This commit is contained in:
Till Faelligen 2023-05-16 12:24:06 +02:00
parent a9dffcb23a
commit 3d8bd4d353
No known key found for this signature in database
GPG key ID: 3DF82D8AB9211D4E
5 changed files with 22 additions and 31 deletions

View file

@ -62,9 +62,6 @@ CREATE TABLE IF NOT EXISTS roomserver_events (
-- Needed for state resolution. -- Needed for state resolution.
-- An event may only appear in this table once. -- An event may only appear in this table once.
event_id TEXT NOT NULL CONSTRAINT roomserver_event_id_unique UNIQUE, event_id TEXT NOT NULL CONSTRAINT roomserver_event_id_unique UNIQUE,
-- The sha256 reference hash for the event.
-- Needed for setting reference hashes when sending new events.
reference_sha256 BYTEA NOT NULL,
-- A list of numeric IDs for events that can authenticate this event. -- A list of numeric IDs for events that can authenticate this event.
auth_event_nids BIGINT[] NOT NULL, auth_event_nids BIGINT[] NOT NULL,
is_rejected BOOLEAN NOT NULL DEFAULT FALSE is_rejected BOOLEAN NOT NULL DEFAULT FALSE
@ -75,10 +72,10 @@ CREATE INDEX IF NOT EXISTS roomserver_events_memberships_idx ON roomserver_event
` `
const insertEventSQL = "" + const insertEventSQL = "" +
"INSERT INTO roomserver_events AS e (room_nid, event_type_nid, event_state_key_nid, event_id, reference_sha256, auth_event_nids, depth, is_rejected)" + "INSERT INTO roomserver_events AS e (room_nid, event_type_nid, event_state_key_nid, event_id, auth_event_nids, depth, is_rejected)" +
" VALUES ($1, $2, $3, $4, $5, $6, $7, $8)" + " VALUES ($1, $2, $3, $4, $5, $6, $7)" +
" ON CONFLICT ON CONSTRAINT roomserver_event_id_unique DO UPDATE" + " ON CONFLICT ON CONSTRAINT roomserver_event_id_unique DO UPDATE" +
" SET is_rejected = $8 WHERE e.event_id = $4 AND e.is_rejected = TRUE" + " SET is_rejected = $7 WHERE e.event_id = $4 AND e.is_rejected = TRUE" +
" RETURNING event_nid, state_snapshot_nid" " RETURNING event_nid, state_snapshot_nid"
const selectEventSQL = "" + const selectEventSQL = "" +
@ -130,11 +127,11 @@ const selectEventIDSQL = "" +
"SELECT event_id FROM roomserver_events WHERE event_nid = $1" "SELECT event_id FROM roomserver_events WHERE event_nid = $1"
const bulkSelectStateAtEventAndReferenceSQL = "" + const bulkSelectStateAtEventAndReferenceSQL = "" +
"SELECT event_type_nid, event_state_key_nid, event_nid, state_snapshot_nid, event_id, reference_sha256" + "SELECT event_type_nid, event_state_key_nid, event_nid, state_snapshot_nid, event_id" +
" FROM roomserver_events WHERE event_nid = ANY($1)" " FROM roomserver_events WHERE event_nid = ANY($1)"
const bulkSelectEventReferenceSQL = "" + const bulkSelectEventReferenceSQL = "" +
"SELECT event_id, reference_sha256 FROM roomserver_events WHERE event_nid = ANY($1)" "SELECT event_id FROM roomserver_events WHERE event_nid = ANY($1)"
const bulkSelectEventIDSQL = "" + const bulkSelectEventIDSQL = "" +
"SELECT event_nid, event_id FROM roomserver_events WHERE event_nid = ANY($1)" "SELECT event_nid, event_id FROM roomserver_events WHERE event_nid = ANY($1)"
@ -214,7 +211,6 @@ func (s *eventStatements) InsertEvent(
eventTypeNID types.EventTypeNID, eventTypeNID types.EventTypeNID,
eventStateKeyNID types.EventStateKeyNID, eventStateKeyNID types.EventStateKeyNID,
eventID string, eventID string,
referenceSHA256 []byte,
authEventNIDs []types.EventNID, authEventNIDs []types.EventNID,
depth int64, depth int64,
isRejected bool, isRejected bool,
@ -224,7 +220,7 @@ func (s *eventStatements) InsertEvent(
stmt := sqlutil.TxStmt(txn, s.insertEventStmt) stmt := sqlutil.TxStmt(txn, s.insertEventStmt)
err := stmt.QueryRowContext( err := stmt.QueryRowContext(
ctx, int64(roomNID), int64(eventTypeNID), int64(eventStateKeyNID), ctx, int64(roomNID), int64(eventTypeNID), int64(eventStateKeyNID),
eventID, referenceSHA256, eventNIDsAsArray(authEventNIDs), depth, eventID, eventNIDsAsArray(authEventNIDs), depth,
isRejected, isRejected,
).Scan(&eventNID, &stateNID) ).Scan(&eventNID, &stateNID)
return types.EventNID(eventNID), types.StateSnapshotNID(stateNID), err return types.EventNID(eventNID), types.StateSnapshotNID(stateNID), err
@ -441,11 +437,10 @@ func (s *eventStatements) BulkSelectStateAtEventAndReference(
eventNID int64 eventNID int64
stateSnapshotNID int64 stateSnapshotNID int64
eventID string eventID string
eventSHA256 []byte
) )
for ; rows.Next(); i++ { for ; rows.Next(); i++ {
if err = rows.Scan( if err = rows.Scan(
&eventTypeNID, &eventStateKeyNID, &eventNID, &stateSnapshotNID, &eventID, &eventSHA256, &eventTypeNID, &eventStateKeyNID, &eventNID, &stateSnapshotNID, &eventID,
); err != nil { ); err != nil {
return nil, err return nil, err
} }
@ -455,7 +450,6 @@ func (s *eventStatements) BulkSelectStateAtEventAndReference(
result.EventNID = types.EventNID(eventNID) result.EventNID = types.EventNID(eventNID)
result.BeforeStateSnapshotNID = types.StateSnapshotNID(stateSnapshotNID) result.BeforeStateSnapshotNID = types.StateSnapshotNID(stateSnapshotNID)
result.EventID = eventID result.EventID = eventID
result.EventSHA256 = eventSHA256
} }
if err = rows.Err(); err != nil { if err = rows.Err(); err != nil {
return nil, err return nil, err
@ -478,7 +472,7 @@ func (s *eventStatements) BulkSelectEventReference(
i := 0 i := 0
for ; rows.Next(); i++ { for ; rows.Next(); i++ {
result := &results[i] result := &results[i]
if err = rows.Scan(&result.EventID, &result.EventSHA256); err != nil { if err = rows.Scan(&result.EventID); err != nil {
return nil, err return nil, err
} }
} }

View file

@ -742,7 +742,6 @@ func (d *EventDatabase) StoreEvent(
eventTypeNID, eventTypeNID,
eventStateKeyNID, eventStateKeyNID,
event.EventID(), event.EventID(),
event.EventReference().EventSHA256,
authEventNIDs, authEventNIDs,
event.Depth(), event.Depth(),
isRejected, isRejected,

View file

@ -41,17 +41,16 @@ const eventsSchema = `
state_snapshot_nid INTEGER NOT NULL DEFAULT 0, state_snapshot_nid INTEGER NOT NULL DEFAULT 0,
depth INTEGER NOT NULL, depth INTEGER NOT NULL,
event_id TEXT NOT NULL UNIQUE, event_id TEXT NOT NULL UNIQUE,
reference_sha256 BLOB NOT NULL,
auth_event_nids TEXT NOT NULL DEFAULT '[]', auth_event_nids TEXT NOT NULL DEFAULT '[]',
is_rejected BOOLEAN NOT NULL DEFAULT FALSE is_rejected BOOLEAN NOT NULL DEFAULT FALSE
); );
` `
const insertEventSQL = ` const insertEventSQL = `
INSERT INTO roomserver_events (room_nid, event_type_nid, event_state_key_nid, event_id, reference_sha256, auth_event_nids, depth, is_rejected) INSERT INTO roomserver_events (room_nid, event_type_nid, event_state_key_nid, event_id, auth_event_nids, depth, is_rejected)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8) VALUES ($1, $2, $3, $4, $5, $6, $7)
ON CONFLICT DO UPDATE ON CONFLICT DO UPDATE
SET is_rejected = $8 WHERE is_rejected = 1 SET is_rejected = $7 WHERE is_rejected = 1
RETURNING event_nid, state_snapshot_nid; RETURNING event_nid, state_snapshot_nid;
` `
@ -100,11 +99,11 @@ const selectEventIDSQL = "" +
"SELECT event_id FROM roomserver_events WHERE event_nid = $1" "SELECT event_id FROM roomserver_events WHERE event_nid = $1"
const bulkSelectStateAtEventAndReferenceSQL = "" + const bulkSelectStateAtEventAndReferenceSQL = "" +
"SELECT event_type_nid, event_state_key_nid, event_nid, state_snapshot_nid, event_id, reference_sha256" + "SELECT event_type_nid, event_state_key_nid, event_nid, state_snapshot_nid, event_id" +
" FROM roomserver_events WHERE event_nid IN ($1)" " FROM roomserver_events WHERE event_nid IN ($1)"
const bulkSelectEventReferenceSQL = "" + const bulkSelectEventReferenceSQL = "" +
"SELECT event_id, reference_sha256 FROM roomserver_events WHERE event_nid IN ($1)" "SELECT event_id FROM roomserver_events WHERE event_nid IN ($1)"
const bulkSelectEventIDSQL = "" + const bulkSelectEventIDSQL = "" +
"SELECT event_nid, event_id FROM roomserver_events WHERE event_nid IN ($1)" "SELECT event_nid, event_id FROM roomserver_events WHERE event_nid IN ($1)"
@ -183,7 +182,6 @@ func (s *eventStatements) InsertEvent(
eventTypeNID types.EventTypeNID, eventTypeNID types.EventTypeNID,
eventStateKeyNID types.EventStateKeyNID, eventStateKeyNID types.EventStateKeyNID,
eventID string, eventID string,
referenceSHA256 []byte,
authEventNIDs []types.EventNID, authEventNIDs []types.EventNID,
depth int64, depth int64,
isRejected bool, isRejected bool,
@ -194,7 +192,7 @@ func (s *eventStatements) InsertEvent(
insertStmt := sqlutil.TxStmt(txn, s.insertEventStmt) insertStmt := sqlutil.TxStmt(txn, s.insertEventStmt)
err := insertStmt.QueryRowContext( err := insertStmt.QueryRowContext(
ctx, int64(roomNID), int64(eventTypeNID), int64(eventStateKeyNID), ctx, int64(roomNID), int64(eventTypeNID), int64(eventStateKeyNID),
eventID, referenceSHA256, eventNIDsAsArray(authEventNIDs), depth, isRejected, eventID, eventNIDsAsArray(authEventNIDs), depth, isRejected,
).Scan(&eventNID, &stateNID) ).Scan(&eventNID, &stateNID)
return types.EventNID(eventNID), types.StateSnapshotNID(stateNID), err return types.EventNID(eventNID), types.StateSnapshotNID(stateNID), err
} }
@ -475,11 +473,10 @@ func (s *eventStatements) BulkSelectStateAtEventAndReference(
eventNID int64 eventNID int64
stateSnapshotNID int64 stateSnapshotNID int64
eventID string eventID string
eventSHA256 []byte
) )
for ; rows.Next(); i++ { for ; rows.Next(); i++ {
if err = rows.Scan( if err = rows.Scan(
&eventTypeNID, &eventStateKeyNID, &eventNID, &stateSnapshotNID, &eventID, &eventSHA256, &eventTypeNID, &eventStateKeyNID, &eventNID, &stateSnapshotNID, &eventID,
); err != nil { ); err != nil {
return nil, err return nil, err
} }
@ -489,7 +486,6 @@ func (s *eventStatements) BulkSelectStateAtEventAndReference(
result.EventNID = types.EventNID(eventNID) result.EventNID = types.EventNID(eventNID)
result.BeforeStateSnapshotNID = types.StateSnapshotNID(stateSnapshotNID) result.BeforeStateSnapshotNID = types.StateSnapshotNID(stateSnapshotNID)
result.EventID = eventID result.EventID = eventID
result.EventSHA256 = eventSHA256
} }
if i != len(eventNIDs) { if i != len(eventNIDs) {
return nil, fmt.Errorf("storage: event NIDs missing from the database (%d != %d)", i, len(eventNIDs)) return nil, fmt.Errorf("storage: event NIDs missing from the database (%d != %d)", i, len(eventNIDs))
@ -523,7 +519,7 @@ func (s *eventStatements) BulkSelectEventReference(
i := 0 i := 0
for ; rows.Next(); i++ { for ; rows.Next(); i++ {
result := &results[i] result := &results[i]
if err = rows.Scan(&result.EventID, &result.EventSHA256); err != nil { if err = rows.Scan(&result.EventID); err != nil {
return nil, err return nil, err
} }
} }

View file

@ -51,7 +51,7 @@ func Test_EventsTable(t *testing.T) {
wantEventReferences := make([]gomatrixserverlib.EventReference, 0, len(room.Events())) wantEventReferences := make([]gomatrixserverlib.EventReference, 0, len(room.Events()))
wantStateAtEventAndRefs := make([]types.StateAtEventAndReference, 0, len(room.Events())) wantStateAtEventAndRefs := make([]types.StateAtEventAndReference, 0, len(room.Events()))
for _, ev := range room.Events() { for _, ev := range room.Events() {
eventNID, snapNID, err := tab.InsertEvent(ctx, nil, 1, 1, 1, ev.EventID(), ev.EventReference().EventSHA256, nil, ev.Depth(), false) eventNID, snapNID, err := tab.InsertEvent(ctx, nil, 1, 1, 1, ev.EventID(), nil, ev.Depth(), false)
assert.NoError(t, err) assert.NoError(t, err)
gotEventNID, gotSnapNID, err := tab.SelectEvent(ctx, nil, ev.EventID()) gotEventNID, gotSnapNID, err := tab.SelectEvent(ctx, nil, ev.EventID())
assert.NoError(t, err) assert.NoError(t, err)
@ -75,7 +75,9 @@ func Test_EventsTable(t *testing.T) {
assert.True(t, sentToOutput) assert.True(t, sentToOutput)
eventIDs = append(eventIDs, ev.EventID()) eventIDs = append(eventIDs, ev.EventID())
wantEventReferences = append(wantEventReferences, ev.EventReference()) ref := ev.EventReference()
ref.EventSHA256 = nil
wantEventReferences = append(wantEventReferences, ref)
// Set the stateSnapshot to 2 for some events to verify they are returned later // Set the stateSnapshot to 2 for some events to verify they are returned later
stateSnapshot := 0 stateSnapshot := 0
@ -98,7 +100,7 @@ func Test_EventsTable(t *testing.T) {
wantStateAtEvent = append(wantStateAtEvent, stateAtEvent) wantStateAtEvent = append(wantStateAtEvent, stateAtEvent)
wantStateAtEventAndRefs = append(wantStateAtEventAndRefs, types.StateAtEventAndReference{ wantStateAtEventAndRefs = append(wantStateAtEventAndRefs, types.StateAtEventAndReference{
StateAtEvent: stateAtEvent, StateAtEvent: stateAtEvent,
EventReference: ev.EventReference(), EventReference: ref,
}) })
} }

View file

@ -42,7 +42,7 @@ type Events interface {
InsertEvent( InsertEvent(
ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventTypeNID types.EventTypeNID, ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, eventTypeNID types.EventTypeNID,
eventStateKeyNID types.EventStateKeyNID, eventID string, eventStateKeyNID types.EventStateKeyNID, eventID string,
referenceSHA256 []byte, authEventNIDs []types.EventNID, depth int64, isRejected bool, authEventNIDs []types.EventNID, depth int64, isRejected bool,
) (types.EventNID, types.StateSnapshotNID, error) ) (types.EventNID, types.StateSnapshotNID, error)
SelectEvent(ctx context.Context, txn *sql.Tx, eventID string) (types.EventNID, types.StateSnapshotNID, error) SelectEvent(ctx context.Context, txn *sql.Tx, eventID string) (types.EventNID, types.StateSnapshotNID, error)
BulkSelectSnapshotsFromEventIDs(ctx context.Context, txn *sql.Tx, eventIDs []string) (map[types.StateSnapshotNID][]string, error) BulkSelectSnapshotsFromEventIDs(ctx context.Context, txn *sql.Tx, eventIDs []string) (map[types.StateSnapshotNID][]string, error)