Historical output events

This commit is contained in:
Neil Alexander 2020-09-09 12:07:05 +01:00
parent 29d8da614b
commit 54d1228609
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
5 changed files with 33 additions and 25 deletions

View file

@ -110,6 +110,10 @@ func (s *OutputRoomEventConsumer) onMessage(msg *sarama.ConsumerMessage) error {
// processMessage updates the list of currently joined hosts in the room
// and then sends the event to the hosts that were joined before the event.
func (s *OutputRoomEventConsumer) processMessage(ore api.OutputNewRoomEvent) error {
if ore.Historical {
return nil
}
addsJoinedHosts, err := joinedHostsFromEvents(gomatrixserverlib.UnwrapEventHeaders(ore.AddsState()))
if err != nil {
return err

View file

@ -75,6 +75,9 @@ type OutputEvent struct {
type OutputNewRoomEvent struct {
// The Event.
Event gomatrixserverlib.HeaderedEvent `json:"event"`
// Is the event historical? If so, then downstream components should not treat the
// event as if it just arrived.
Historical bool `json:"historical"`
// The latest events in the room after this event.
// This can be used to set the prev events for new events in the room.
// This also can be used to get the full current state after this event.

View file

@ -114,7 +114,7 @@ func (r *Inputer) processRoomEvent(
event, // event
input.SendAsServer, // send as server
input.TransactionID, // transaction ID
input.Kind != api.KindRewrite, // should we send output events?
input.Kind == api.KindRewrite, // historical
); err != nil {
return "", fmt.Errorf("r.updateLatestEvents: %w", err)
}

View file

@ -72,7 +72,7 @@ func (r *Inputer) updateLatestEvents(
event: event,
sendAsServer: sendAsServer,
transactionID: transactionID,
sendOutput: sendOutput,
isHistorical: sendOutput,
}
if err = u.doUpdateLatestEvents(); err != nil {
@ -95,7 +95,7 @@ type latestEventsUpdater struct {
stateAtEvent types.StateAtEvent
event gomatrixserverlib.Event
transactionID *api.TransactionID
sendOutput bool
isHistorical bool
// Which server to send this event as.
sendAsServer string
// The eventID of the event that was processed before this one.
@ -181,7 +181,6 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
return fmt.Errorf("u.api.updateMemberships: %w", err)
}
if u.sendOutput {
var update *api.OutputEvent
update, err = u.makeOutputNewRoomEvent()
if err != nil {
@ -200,17 +199,14 @@ func (u *latestEventsUpdater) doUpdateLatestEvents() error {
if err = u.api.WriteOutputEvents(u.event.RoomID(), updates); err != nil {
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 {
return fmt.Errorf("u.updater.SetLatestEvents: %w", err)
}
if u.sendOutput {
if err = u.updater.MarkEventAsSent(u.stateAtEvent.EventNID); err != nil {
return fmt.Errorf("u.updater.MarkEventAsSent: %w", err)
}
}
return nil
}
@ -313,6 +309,7 @@ func (u *latestEventsUpdater) makeOutputNewRoomEvent() (*api.OutputEvent, error)
ore := api.OutputNewRoomEvent{
Event: u.event.Headered(u.roomInfo.RoomVersion),
Historical: u.isHistorical,
LastSentEventID: u.lastEventIDSent,
LatestEventIDs: latestEventIDs,
TransactionID: u.transactionID,

View file

@ -143,6 +143,10 @@ func (s *OutputRoomEventConsumer) onNewRoomEvent(
}
}
if msg.Historical {
return nil
}
pduPos, err := s.db.WriteEvent(
ctx,
&ev,