aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2023-04-21 17:06:29 +0100
committerGitHub <noreply@github.com>2023-04-21 17:06:29 +0100
commit1647213facae52e2c8889fbc848ffc5d3a5792f0 (patch)
tree684206b99582df20ae144e19db37591cc35b789d /roomserver/storage
parent71eeccf34a2ea4434c315c19778d80a7b2469270 (diff)
Implement new RoomVersionImpl API (#3062)
As outlined in https://github.com/matrix-org/gomatrixserverlib/pull/368 The main change Dendrite side is that `RoomVersion` no longer has any methods on it. Instead, you need to bounce via `gmsl.GetRoomVersion`. It's very interesting to see where exactly Dendrite cares about this. For some places it's creating events (fine) but others are way more specific. Those areas will need to migrate to GMSL at some point.
Diffstat (limited to 'roomserver/storage')
-rw-r--r--roomserver/storage/postgres/state_snapshot_table.go6
-rw-r--r--roomserver/storage/shared/storage.go31
2 files changed, 31 insertions, 6 deletions
diff --git a/roomserver/storage/postgres/state_snapshot_table.go b/roomserver/storage/postgres/state_snapshot_table.go
index c1efdad3..db664415 100644
--- a/roomserver/storage/postgres/state_snapshot_table.go
+++ b/roomserver/storage/postgres/state_snapshot_table.go
@@ -218,6 +218,10 @@ func (s *stateSnapshotStatements) BulkSelectMembershipForHistoryVisibility(
var membershipEventID string
knownEvents := make(map[string]*gomatrixserverlib.HeaderedEvent, len(eventIDs))
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomInfo.RoomVersion)
+ if err != nil {
+ return nil, err
+ }
for rows.Next() {
if err = rows.Scan(&eventID, &membershipEventID, &evJson); err != nil {
@@ -232,7 +236,7 @@ func (s *stateSnapshotStatements) BulkSelectMembershipForHistoryVisibility(
result[eventID] = ev
continue
}
- event, err := roomInfo.RoomVersion.NewEventFromTrustedJSON(evJson, false)
+ event, err := verImpl.NewEventFromTrustedJSON(evJson, false)
if err != nil {
result[eventID] = &gomatrixserverlib.HeaderedEvent{}
// not fatal
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go
index c9eb0ca0..8db11644 100644
--- a/roomserver/storage/shared/storage.go
+++ b/roomserver/storage/shared/storage.go
@@ -579,9 +579,14 @@ func (d *EventDatabase) events(
eventIDs = map[types.EventNID]string{}
}
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomInfo.RoomVersion)
+ if err != nil {
+ return nil, err
+ }
+
for _, eventJSON := range eventJSONs {
redacted := gjson.GetBytes(eventJSON.EventJSON, "unsigned.redacted_because").Exists()
- events[eventJSON.EventNID], err = roomInfo.RoomVersion.NewEventFromTrustedJSONWithEventID(
+ events[eventJSON.EventNID], err = verImpl.NewEventFromTrustedJSONWithEventID(
eventIDs[eventJSON.EventNID], eventJSON.EventJSON, redacted,
)
if err != nil {
@@ -1125,13 +1130,17 @@ func (d *Database) GetHistoryVisibilityState(ctx context.Context, roomInfo *type
if err != nil {
eventIDs = map[types.EventNID]string{}
}
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomInfo.RoomVersion)
+ if err != nil {
+ return nil, err
+ }
events := make([]*gomatrixserverlib.Event, 0, len(eventNIDs))
for _, eventNID := range eventNIDs {
data, err := d.EventJSONTable.BulkSelectEventJSON(ctx, nil, []types.EventNID{eventNID})
if err != nil {
return nil, err
}
- ev, err := roomInfo.RoomVersion.NewEventFromTrustedJSONWithEventID(eventIDs[eventNID], data[0].EventJSON, false)
+ ev, err := verImpl.NewEventFromTrustedJSONWithEventID(eventIDs[eventNID], data[0].EventJSON, false)
if err != nil {
return nil, err
}
@@ -1181,6 +1190,10 @@ func (d *Database) GetStateEvent(ctx context.Context, roomID, evType, stateKey s
eventNIDs = append(eventNIDs, e.EventNID)
}
}
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomInfo.RoomVersion)
+ if err != nil {
+ return nil, err
+ }
eventIDs, _ := d.EventsTable.BulkSelectEventID(ctx, nil, eventNIDs)
if err != nil {
eventIDs = map[types.EventNID]string{}
@@ -1195,7 +1208,7 @@ func (d *Database) GetStateEvent(ctx context.Context, roomID, evType, stateKey s
if len(data) == 0 {
return nil, fmt.Errorf("GetStateEvent: no json for event nid %d", e.EventNID)
}
- ev, err := roomInfo.RoomVersion.NewEventFromTrustedJSONWithEventID(eventIDs[e.EventNID], data[0].EventJSON, false)
+ ev, err := verImpl.NewEventFromTrustedJSONWithEventID(eventIDs[e.EventNID], data[0].EventJSON, false)
if err != nil {
return nil, err
}
@@ -1250,9 +1263,13 @@ func (d *Database) GetStateEventsWithEventType(ctx context.Context, roomID, evTy
if len(eventPairs) == 0 {
return nil, nil
}
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomInfo.RoomVersion)
+ if err != nil {
+ return nil, err
+ }
var result []*gomatrixserverlib.HeaderedEvent
for _, pair := range eventPairs {
- ev, err := roomInfo.RoomVersion.NewEventFromTrustedJSONWithEventID(eventIDs[pair.EventNID], pair.EventJSON, false)
+ ev, err := verImpl.NewEventFromTrustedJSONWithEventID(eventIDs[pair.EventNID], pair.EventJSON, false)
if err != nil {
return nil, err
}
@@ -1372,7 +1389,11 @@ func (d *Database) GetBulkStateContent(ctx context.Context, roomIDs []string, tu
result := make([]tables.StrippedEvent, len(events))
for i := range events {
roomVer := eventNIDToVer[events[i].EventNID]
- ev, err := roomVer.NewEventFromTrustedJSONWithEventID(eventIDs[events[i].EventNID], events[i].EventJSON, false)
+ verImpl, err := gomatrixserverlib.GetRoomVersion(roomVer)
+ if err != nil {
+ return nil, err
+ }
+ ev, err := verImpl.NewEventFromTrustedJSONWithEventID(eventIDs[events[i].EventNID], events[i].EventJSON, false)
if err != nil {
return nil, fmt.Errorf("GetBulkStateContent: failed to load event JSON for event NID %v : %w", events[i].EventNID, err)
}