mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-26 00:03:09 -06:00
Only process state/membership if forward extremities have changed
This commit is contained in:
parent
33540fe84b
commit
788f921d7b
|
|
@ -139,28 +139,31 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
|
||||||
|
|
||||||
// Work out what the latest events are. This will include the new
|
// Work out what the latest events are. This will include the new
|
||||||
// event if it is not already referenced.
|
// event if it is not already referenced.
|
||||||
if err := u.calculateLatest(
|
extremitiesChanged, err := u.calculateLatest(
|
||||||
oldLatest, &u.event,
|
oldLatest, &u.event,
|
||||||
types.StateAtEventAndReference{
|
types.StateAtEventAndReference{
|
||||||
EventReference: u.event.EventReference(),
|
EventReference: u.event.EventReference(),
|
||||||
StateAtEvent: u.stateAtEvent,
|
StateAtEvent: u.stateAtEvent,
|
||||||
},
|
},
|
||||||
); err != nil {
|
)
|
||||||
|
if err != nil {
|
||||||
return fmt.Errorf("u.calculateLatest: %w", err)
|
return fmt.Errorf("u.calculateLatest: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that we know what the latest events are, it's time to get the
|
// Now that we know what the latest events are, it's time to get the
|
||||||
// latest state.
|
// latest state.
|
||||||
if err := u.latestState(); err != nil {
|
var updates []api.OutputEvent
|
||||||
|
if extremitiesChanged {
|
||||||
|
if err = u.latestState(); err != nil {
|
||||||
return fmt.Errorf("u.latestState: %w", err)
|
return fmt.Errorf("u.latestState: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we need to generate any output events then here's where we do it.
|
// If we need to generate any output events then here's where we do it.
|
||||||
// TODO: Move this!
|
// TODO: Move this!
|
||||||
updates, err := u.api.updateMemberships(u.ctx, u.updater, u.removed, u.added)
|
if updates, err = u.api.updateMemberships(u.ctx, u.updater, u.removed, u.added); err != nil {
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
update, err := u.makeOutputNewRoomEvent()
|
update, err := u.makeOutputNewRoomEvent()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -250,7 +253,7 @@ func (u *latestEventsUpdater) calculateLatest(
|
||||||
oldLatest []types.StateAtEventAndReference,
|
oldLatest []types.StateAtEventAndReference,
|
||||||
newEvent *gomatrixserverlib.Event,
|
newEvent *gomatrixserverlib.Event,
|
||||||
newStateAndRef types.StateAtEventAndReference,
|
newStateAndRef types.StateAtEventAndReference,
|
||||||
) error {
|
) (bool, error) {
|
||||||
// First of all, get a list of all of the events in our current
|
// First of all, get a list of all of the events in our current
|
||||||
// set of forward extremities.
|
// set of forward extremities.
|
||||||
existingRefs := make(map[string]*types.StateAtEventAndReference)
|
existingRefs := make(map[string]*types.StateAtEventAndReference)
|
||||||
|
|
@ -264,7 +267,7 @@ func (u *latestEventsUpdater) calculateLatest(
|
||||||
// prev events.
|
// prev events.
|
||||||
events, err := u.api.DB.Events(u.ctx, existingNIDs)
|
events, err := u.api.DB.Events(u.ctx, existingNIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("u.api.DB.Events: %w", err)
|
return false, fmt.Errorf("u.api.DB.Events: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make a list of all of the prev events as referenced by all of
|
// Make a list of all of the prev events as referenced by all of
|
||||||
|
|
@ -280,14 +283,14 @@ func (u *latestEventsUpdater) calculateLatest(
|
||||||
// then do nothing - it's not a candidate to be a new extremity if
|
// then do nothing - it's not a candidate to be a new extremity if
|
||||||
// it has been referenced.
|
// it has been referenced.
|
||||||
if _, ok := existingPrevs[newEvent.EventID()]; ok {
|
if _, ok := existingPrevs[newEvent.EventID()]; ok {
|
||||||
return nil
|
return false, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the "new" event is already a forward extremity then stop, as
|
// If the "new" event is already a forward extremity then stop, as
|
||||||
// nothing changes.
|
// nothing changes.
|
||||||
for _, event := range events {
|
for _, event := range events {
|
||||||
if event.EventID() == newEvent.EventID() {
|
if event.EventID() == newEvent.EventID() {
|
||||||
return nil
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -315,7 +318,7 @@ func (u *latestEventsUpdater) calculateLatest(
|
||||||
}
|
}
|
||||||
|
|
||||||
u.latest = newLatest
|
u.latest = newLatest
|
||||||
return nil
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error) {
|
func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue