aboutsummaryrefslogtreecommitdiff
path: root/roomserver/storage
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2022-02-23 15:41:32 +0000
committerGitHub <noreply@github.com>2022-02-23 15:41:32 +0000
commitfea8d152e7d81a9cbd387108d263950d8ec6ddc7 (patch)
treedce949a63a636944d17363ee366880fc184bfd5a /roomserver/storage
parentb8a97b6ee083d1047d09f99daf2594d0821705ca (diff)
Relax roomserver input transactional isolation (#2224)
* Don't force full transactional isolation on roomserver input * Set succeeded * Tweak `MissingAuthPrevEvents`
Diffstat (limited to 'roomserver/storage')
-rw-r--r--roomserver/storage/interface.go5
-rw-r--r--roomserver/storage/shared/room_updater.go54
-rw-r--r--roomserver/storage/shared/storage.go23
3 files changed, 28 insertions, 54 deletions
diff --git a/roomserver/storage/interface.go b/roomserver/storage/interface.go
index a9851e05..685505d5 100644
--- a/roomserver/storage/interface.go
+++ b/roomserver/storage/interface.go
@@ -35,6 +35,11 @@ type Database interface {
stateBlockNIDs []types.StateBlockNID,
state []types.StateEntry,
) (types.StateSnapshotNID, error)
+
+ MissingAuthPrevEvents(
+ ctx context.Context, e *gomatrixserverlib.Event,
+ ) (missingAuth, missingPrev []string, err error)
+
// Look up the state of a room at each event for a list of string event IDs.
// Returns an error if there is an error talking to the database.
// The length of []types.StateAtEvent is guaranteed to equal the length of eventIDs if no error is returned.
diff --git a/roomserver/storage/shared/room_updater.go b/roomserver/storage/shared/room_updater.go
index 810a18ef..d4a2ee3b 100644
--- a/roomserver/storage/shared/room_updater.go
+++ b/roomserver/storage/shared/room_updater.go
@@ -103,25 +103,6 @@ func (u *RoomUpdater) CurrentStateSnapshotNID() types.StateSnapshotNID {
return u.currentStateSnapshotNID
}
-func (u *RoomUpdater) MissingAuthPrevEvents(
- ctx context.Context, e *gomatrixserverlib.Event,
-) (missingAuth, missingPrev []string, err error) {
- for _, authEventID := range e.AuthEventIDs() {
- if nids, err := u.EventNIDs(ctx, []string{authEventID}); err != nil || len(nids) == 0 {
- missingAuth = append(missingAuth, authEventID)
- }
- }
-
- for _, prevEventID := range e.PrevEventIDs() {
- state, err := u.StateAtEventIDs(ctx, []string{prevEventID})
- if err != nil || len(state) == 0 || (!state[0].IsCreate() && state[0].BeforeStateSnapshotNID == 0) {
- missingPrev = append(missingPrev, prevEventID)
- }
- }
-
- return
-}
-
// StorePreviousEvents implements types.RoomRecentEventsUpdater - This must be called from a Writer
func (u *RoomUpdater) StorePreviousEvents(eventNID types.EventNID, previousEventReferences []gomatrixserverlib.EventReference) error {
return u.d.Writer.Do(u.d.DB, u.txn, func(txn *sql.Tx) error {
@@ -146,13 +127,6 @@ func (u *RoomUpdater) SnapshotNIDFromEventID(
return u.d.snapshotNIDFromEventID(ctx, u.txn, eventID)
}
-func (u *RoomUpdater) StoreEvent(
- ctx context.Context, event *gomatrixserverlib.Event,
- authEventNIDs []types.EventNID, isRejected bool,
-) (types.EventNID, types.RoomNID, types.StateAtEvent, *gomatrixserverlib.Event, string, error) {
- return u.d.storeEvent(ctx, u, event, authEventNIDs, isRejected)
-}
-
func (u *RoomUpdater) StateBlockNIDs(
ctx context.Context, stateNIDs []types.StateSnapshotNID,
) ([]types.StateBlockNIDList, error) {
@@ -212,44 +186,16 @@ func (u *RoomUpdater) EventIDs(
return u.d.EventsTable.BulkSelectEventID(ctx, u.txn, eventNIDs)
}
-func (u *RoomUpdater) EventNIDs(
- ctx context.Context, eventIDs []string,
-) (map[string]types.EventNID, error) {
- return u.d.eventNIDs(ctx, u.txn, eventIDs, NoFilter)
-}
-
-func (u *RoomUpdater) UnsentEventNIDs(
- ctx context.Context, eventIDs []string,
-) (map[string]types.EventNID, error) {
- return u.d.eventNIDs(ctx, u.txn, eventIDs, FilterUnsentOnly)
-}
-
func (u *RoomUpdater) StateAtEventIDs(
ctx context.Context, eventIDs []string,
) ([]types.StateAtEvent, error) {
return u.d.EventsTable.BulkSelectStateAtEventByID(ctx, u.txn, eventIDs)
}
-func (u *RoomUpdater) StateEntriesForEventIDs(
- ctx context.Context, eventIDs []string,
-) ([]types.StateEntry, error) {
- return u.d.EventsTable.BulkSelectStateEventByID(ctx, u.txn, eventIDs)
-}
-
-func (u *RoomUpdater) EventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error) {
- return u.d.eventsFromIDs(ctx, u.txn, eventIDs, false)
-}
-
func (u *RoomUpdater) UnsentEventsFromIDs(ctx context.Context, eventIDs []string) ([]types.Event, error) {
return u.d.eventsFromIDs(ctx, u.txn, eventIDs, true)
}
-func (u *RoomUpdater) GetMembershipEventNIDsForRoom(
- ctx context.Context, roomNID types.RoomNID, joinOnly bool, localOnly bool,
-) ([]types.EventNID, error) {
- return u.d.getMembershipEventNIDsForRoom(ctx, u.txn, roomNID, joinOnly, localOnly)
-}
-
// IsReferenced implements types.RoomRecentEventsUpdater
func (u *RoomUpdater) IsReferenced(eventReference gomatrixserverlib.EventReference) (bool, error) {
err := u.d.PrevEventsTable.SelectPreviousEventExists(u.ctx, u.txn, eventReference.EventID, eventReference.EventSHA256)
diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go
index e270e121..6e84b283 100644
--- a/roomserver/storage/shared/storage.go
+++ b/roomserver/storage/shared/storage.go
@@ -674,6 +674,29 @@ func (d *Database) GetPublishedRooms(ctx context.Context) ([]string, error) {
return d.PublishedTable.SelectAllPublishedRooms(ctx, nil, true)
}
+func (d *Database) MissingAuthPrevEvents(
+ ctx context.Context, e *gomatrixserverlib.Event,
+) (missingAuth, missingPrev []string, err error) {
+ authEventNIDs, err := d.EventNIDs(ctx, e.AuthEventIDs())
+ if err != nil {
+ return nil, nil, fmt.Errorf("d.EventNIDs: %w", err)
+ }
+ for _, authEventID := range e.AuthEventIDs() {
+ if _, ok := authEventNIDs[authEventID]; !ok {
+ missingAuth = append(missingAuth, authEventID)
+ }
+ }
+
+ for _, prevEventID := range e.PrevEventIDs() {
+ state, err := d.StateAtEventIDs(ctx, []string{prevEventID})
+ if err != nil || len(state) == 0 || (!state[0].IsCreate() && state[0].BeforeStateSnapshotNID == 0) {
+ missingPrev = append(missingPrev, prevEventID)
+ }
+ }
+
+ return
+}
+
func (d *Database) assignRoomNID(
ctx context.Context, txn *sql.Tx,
roomID string, roomVersion gomatrixserverlib.RoomVersion,