mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-23 14:53:10 -06:00
Don't generate output events when rewriting forward extremities
This commit is contained in:
parent
fdb3480cc2
commit
3bc10f9674
|
|
@ -33,6 +33,10 @@ const (
|
||||||
// KindBackfill event extend the contiguous graph going backwards.
|
// KindBackfill event extend the contiguous graph going backwards.
|
||||||
// They always have state.
|
// They always have state.
|
||||||
KindBackfill = 3
|
KindBackfill = 3
|
||||||
|
// KindRewrite events are used to rewrite the head of the graph.
|
||||||
|
// They are used in state, forward extremity and membership updates
|
||||||
|
// but are not sent as output events.
|
||||||
|
KindRewrite = 4
|
||||||
)
|
)
|
||||||
|
|
||||||
// DoNotSendToOtherServers tells us not to send the event to other matrix
|
// DoNotSendToOtherServers tells us not to send the event to other matrix
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ func SendEventWithState(
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
ires = append(ires, InputRoomEvent{
|
ires = append(ires, InputRoomEvent{
|
||||||
Kind: KindNew,
|
Kind: KindRewrite,
|
||||||
Event: stateEvent.Headered(event.RoomVersion),
|
Event: stateEvent.Headered(event.RoomVersion),
|
||||||
AuthEventIDs: stateEvent.AuthEventIDs(),
|
AuthEventIDs: stateEvent.AuthEventIDs(),
|
||||||
HasState: true,
|
HasState: true,
|
||||||
|
|
|
||||||
|
|
@ -114,6 +114,7 @@ func (r *Inputer) processRoomEvent(
|
||||||
event, // event
|
event, // event
|
||||||
input.SendAsServer, // send as server
|
input.SendAsServer, // send as server
|
||||||
input.TransactionID, // transaction ID
|
input.TransactionID, // transaction ID
|
||||||
|
input.Kind == api.KindNew, // should we send output events?
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return "", fmt.Errorf("r.updateLatestEvents: %w", err)
|
return "", fmt.Errorf("r.updateLatestEvents: %w", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ func (r *Inputer) updateLatestEvents(
|
||||||
event gomatrixserverlib.Event,
|
event gomatrixserverlib.Event,
|
||||||
sendAsServer string,
|
sendAsServer string,
|
||||||
transactionID *api.TransactionID,
|
transactionID *api.TransactionID,
|
||||||
|
sendOutput bool,
|
||||||
) (err error) {
|
) (err error) {
|
||||||
updater, err := r.DB.GetLatestEventsForUpdate(ctx, *roomInfo)
|
updater, err := r.DB.GetLatestEventsForUpdate(ctx, *roomInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -71,6 +72,7 @@ func (r *Inputer) updateLatestEvents(
|
||||||
event: event,
|
event: event,
|
||||||
sendAsServer: sendAsServer,
|
sendAsServer: sendAsServer,
|
||||||
transactionID: transactionID,
|
transactionID: transactionID,
|
||||||
|
sendOutput: sendOutput,
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = u.doUpdateLatestEvents(); err != nil {
|
if err = u.doUpdateLatestEvents(); err != nil {
|
||||||
|
|
@ -93,6 +95,7 @@ type latestEventsUpdater struct {
|
||||||
stateAtEvent types.StateAtEvent
|
stateAtEvent types.StateAtEvent
|
||||||
event gomatrixserverlib.Event
|
event gomatrixserverlib.Event
|
||||||
transactionID *api.TransactionID
|
transactionID *api.TransactionID
|
||||||
|
sendOutput bool
|
||||||
// Which server to send this event as.
|
// Which server to send this event as.
|
||||||
sendAsServer string
|
sendAsServer string
|
||||||
// The eventID of the event that was processed before this one.
|
// The eventID of the event that was processed before this one.
|
||||||
|
|
@ -178,7 +181,9 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
|
||||||
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
return fmt.Errorf("u.api.updateMemberships: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
update, err := u.makeOutputNewRoomEvent()
|
if u.sendOutput {
|
||||||
|
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)
|
||||||
}
|
}
|
||||||
|
|
@ -195,14 +200,17 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
|
||||||
if err = u.api.WriteOutputEvents(u.event.RoomID(), updates); err != nil {
|
if err = u.api.WriteOutputEvents(u.event.RoomID(), updates); err != nil {
|
||||||
return fmt.Errorf("u.api.WriteOutputEvents: %w", err)
|
return fmt.Errorf("u.api.WriteOutputEvents: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if err = u.updater.SetLatestEvents(u.roomInfo.RoomNID, u.latest, u.stateAtEvent.EventNID, u.newStateNID); err != nil {
|
if err = u.updater.SetLatestEvents(u.roomInfo.RoomNID, u.latest, u.stateAtEvent.EventNID, u.newStateNID); err != nil {
|
||||||
return fmt.Errorf("u.updater.SetLatestEvents: %w", err)
|
return fmt.Errorf("u.updater.SetLatestEvents: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if u.sendOutput {
|
||||||
if err = u.updater.MarkEventAsSent(u.stateAtEvent.EventNID); err != nil {
|
if err = u.updater.MarkEventAsSent(u.stateAtEvent.EventNID); err != nil {
|
||||||
return fmt.Errorf("u.updater.MarkEventAsSent: %w", err)
|
return fmt.Errorf("u.updater.MarkEventAsSent: %w", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue