Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions performinvite.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ func PerformInvite(ctx context.Context, input PerformInviteInput, fedClient Fede
if len(stateNeeded.Tuples()) == 0 {
return nil, spec.InternalServerError{}
}
if stateNeeded.Create && verImpl.DomainlessRoomIDs() {
stateNeeded.Create = false
}

latestEvents, err := input.EventQuerier(ctx, input.RoomID, stateNeeded.Tuples())
if err != nil {
Expand Down
22 changes: 20 additions & 2 deletions stateresolutionv2.go
Original file line number Diff line number Diff line change
Expand Up @@ -391,17 +391,26 @@ func ResolveStateConflictsV2New(
// using Kahn's algorithm in order to topologically order them. The
// result array of events will be sorted so that "earlier" events appear
// first.
// FIXME: this function does not sort correctly because it doesn't lookup PL events
// correctly, meaning it will sort incorrectly for PL tiebreaks.
func ReverseTopologicalOrdering(input []PDU, order TopologicalOrder) []PDU {
r := stateResolverV2{}
r := stateResolverV2{
resolvedCreate: getCreateEvent(input),
}
return r.reverseTopologicalOrdering(input, order)
}

// TODO: Remove this function. Use ReverseTopologicalOrdering.
// HeaderedReverseTopologicalOrdering takes a set of input events and sorts
// them using Kahn's algorithm in order to topologically order them. The
// result array of events will be sorted so that "earlier" events appear
// first.
// FIXME: this function does not sort correctly because it doesn't lookup PL events
// correctly, meaning it will sort incorrectly for PL tiebreaks.
func HeaderedReverseTopologicalOrdering(events []PDU, order TopologicalOrder) []PDU {
r := stateResolverV2{}
r := stateResolverV2{
resolvedCreate: getCreateEvent(events),
}
input := make([]PDU, len(events))
for i := range events {
unwrapped := events[i]
Expand All @@ -414,6 +423,15 @@ func HeaderedReverseTopologicalOrdering(events []PDU, order TopologicalOrder) []
return result
}

func getCreateEvent(input []PDU) PDU {
for _, ev := range input {
if ev.Type() == spec.MRoomCreate && ev.StateKeyEquals("") {
return ev
}
}
return nil
}

// isControlEvent returns true if the event meets the criteria for being classed
// as a "control" event for reverse topological sorting. If not then the event
// will be mainline sorted.
Expand Down
Loading