aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage
diff options
context:
space:
mode:
Diffstat (limited to 'roomserver/storage')
-rw-r--r--roomserver/storage/postgres/events_table.go4
-rw-r--r--roomserver/storage/sqlite3/events_table.go4
2 files changed, 6 insertions, 2 deletions
diff --git a/roomserver/storage/postgres/events_table.go b/roomserver/storage/postgres/events_table.go
index c549fb65..778cd8d7 100644
--- a/roomserver/storage/postgres/events_table.go
+++ b/roomserver/storage/postgres/events_table.go
@@ -311,7 +311,9 @@ func (s *eventStatements) BulkSelectStateAtEventByID(
); err != nil {
return nil, err
}
- if result.BeforeStateSnapshotNID == 0 {
+ // Genuine create events are the only case where it's OK to have no previous state.
+ isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1
+ if result.BeforeStateSnapshotNID == 0 && !isCreate {
return nil, types.MissingEventError(
fmt.Sprintf("storage: missing state for event NID %d", result.EventNID),
)
diff --git a/roomserver/storage/sqlite3/events_table.go b/roomserver/storage/sqlite3/events_table.go
index 3127eb17..7483e281 100644
--- a/roomserver/storage/sqlite3/events_table.go
+++ b/roomserver/storage/sqlite3/events_table.go
@@ -322,7 +322,9 @@ func (s *eventStatements) BulkSelectStateAtEventByID(
); err != nil {
return nil, err
}
- if result.BeforeStateSnapshotNID == 0 {
+ // Genuine create events are the only case where it's OK to have no previous state.
+ isCreate := result.EventTypeNID == types.MRoomCreateNID && result.EventStateKeyNID == 1
+ if result.BeforeStateSnapshotNID == 0 && !isCreate {
return nil, types.MissingEventError(
fmt.Sprintf("storage: missing state for event NID %d", result.EventNID),
)