mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-25 07:43:10 -06:00
Don't process latest events/memberships for old events
This commit is contained in:
parent
8af1de94f9
commit
787e4e655d
|
|
@ -136,18 +136,17 @@ func (r *Inputer) processRoomEvent(
|
||||||
return event.EventID(), rejectionErr
|
return event.EventID(), rejectionErr
|
||||||
}
|
}
|
||||||
|
|
||||||
if input.Kind == api.KindNew {
|
if err = r.updateLatestEvents(
|
||||||
if err = r.updateLatestEvents(
|
ctx, // context
|
||||||
ctx, // context
|
roomInfo, // room info for the room being updated
|
||||||
roomInfo, // room info for the room being updated
|
stateAtEvent, // state at event (below)
|
||||||
stateAtEvent, // state at event (below)
|
input.Kind, // kind of event
|
||||||
event, // event
|
event, // event
|
||||||
input.SendAsServer, // send as server
|
input.SendAsServer, // send as server
|
||||||
input.TransactionID, // transaction ID
|
input.TransactionID, // transaction ID
|
||||||
input.HasState, // rewrites state?
|
input.HasState, // rewrites state?
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return "", fmt.Errorf("r.updateLatestEvents: %w", err)
|
return "", fmt.Errorf("r.updateLatestEvents: %w", err)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// processing this event resulted in an event (which may not be the one we're processing)
|
// processing this event resulted in an event (which may not be the one we're processing)
|
||||||
|
|
|
||||||
|
|
@ -52,6 +52,7 @@ func (r *Inputer) updateLatestEvents(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
roomInfo *types.RoomInfo,
|
roomInfo *types.RoomInfo,
|
||||||
stateAtEvent types.StateAtEvent,
|
stateAtEvent types.StateAtEvent,
|
||||||
|
kind api.Kind,
|
||||||
event gomatrixserverlib.Event,
|
event gomatrixserverlib.Event,
|
||||||
sendAsServer string,
|
sendAsServer string,
|
||||||
transactionID *api.TransactionID,
|
transactionID *api.TransactionID,
|
||||||
|
|
@ -70,6 +71,7 @@ func (r *Inputer) updateLatestEvents(
|
||||||
updater: updater,
|
updater: updater,
|
||||||
roomInfo: roomInfo,
|
roomInfo: roomInfo,
|
||||||
stateAtEvent: stateAtEvent,
|
stateAtEvent: stateAtEvent,
|
||||||
|
kind: kind,
|
||||||
event: event,
|
event: event,
|
||||||
sendAsServer: sendAsServer,
|
sendAsServer: sendAsServer,
|
||||||
transactionID: transactionID,
|
transactionID: transactionID,
|
||||||
|
|
@ -95,6 +97,7 @@ type latestEventsUpdater struct {
|
||||||
roomInfo *types.RoomInfo
|
roomInfo *types.RoomInfo
|
||||||
stateAtEvent types.StateAtEvent
|
stateAtEvent types.StateAtEvent
|
||||||
event gomatrixserverlib.Event
|
event gomatrixserverlib.Event
|
||||||
|
kind api.Kind
|
||||||
transactionID *api.TransactionID
|
transactionID *api.TransactionID
|
||||||
rewritesState bool
|
rewritesState bool
|
||||||
// Which server to send this event as.
|
// Which server to send this event as.
|
||||||
|
|
@ -139,33 +142,36 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Work out what the latest events are. This will include the new
|
var updates []api.OutputEvent
|
||||||
// event if it is not already referenced.
|
var err error
|
||||||
if err := u.calculateLatest(
|
if u.kind == api.KindNew {
|
||||||
oldLatest,
|
// Work out what the latest events are. This will include the new
|
||||||
types.StateAtEventAndReference{
|
// event if it is not already referenced.
|
||||||
EventReference: u.event.EventReference(),
|
if err = u.calculateLatest(
|
||||||
StateAtEvent: u.stateAtEvent,
|
oldLatest,
|
||||||
},
|
types.StateAtEventAndReference{
|
||||||
); err != nil {
|
EventReference: u.event.EventReference(),
|
||||||
return fmt.Errorf("u.calculateLatest: %w", err)
|
StateAtEvent: u.stateAtEvent,
|
||||||
|
},
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("u.calculateLatest: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now that we know what the latest events are, it's time to get the
|
||||||
|
// latest state.
|
||||||
|
if err = u.latestState(); err != nil {
|
||||||
|
return fmt.Errorf("u.latestState: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we need to generate any output events then here's where we do it.
|
||||||
|
// TODO: Move this!
|
||||||
|
updates, err = u.api.updateMemberships(u.ctx, u.updater, u.removed, u.added)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that we know what the latest events are, it's time to get the
|
update, err := u.makeOutputNewRoomEvent()
|
||||||
// latest state.
|
|
||||||
if err := u.latestState(); err != nil {
|
|
||||||
return fmt.Errorf("u.latestState: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we need to generate any output events then here's where we do it.
|
|
||||||
// TODO: Move this!
|
|
||||||
updates, err := u.api.updateMemberships(u.ctx, u.updater, u.removed, u.added)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var update *api.OutputEvent
|
|
||||||
update, err = u.makeOutputNewRoomEvent()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("u.makeOutputNewRoomEvent: %w", err)
|
return fmt.Errorf("u.makeOutputNewRoomEvent: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue