Add `state_key` and `rejection_reason` to `events` (#11792)
... and start populating them for new events
This commit is contained in:
parent
b784299cbc
commit
2aa37a4250
|
@ -0,0 +1 @@
|
||||||
|
Preparation for database schema simplifications: add `state_key` and `rejection_reason` columns to `events` table.
|
|
@ -1389,6 +1389,8 @@ class PersistEventsStore:
|
||||||
"received_ts",
|
"received_ts",
|
||||||
"sender",
|
"sender",
|
||||||
"contains_url",
|
"contains_url",
|
||||||
|
"state_key",
|
||||||
|
"rejection_reason",
|
||||||
),
|
),
|
||||||
values=(
|
values=(
|
||||||
(
|
(
|
||||||
|
@ -1405,8 +1407,10 @@ class PersistEventsStore:
|
||||||
self._clock.time_msec(),
|
self._clock.time_msec(),
|
||||||
event.sender,
|
event.sender,
|
||||||
"url" in event.content and isinstance(event.content["url"], str),
|
"url" in event.content and isinstance(event.content["url"], str),
|
||||||
|
event.get_state_key(),
|
||||||
|
context.rejected or None,
|
||||||
)
|
)
|
||||||
for event, _ in events_and_contexts
|
for event, context in events_and_contexts
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1456,6 +1460,7 @@ class PersistEventsStore:
|
||||||
for event, context in events_and_contexts:
|
for event, context in events_and_contexts:
|
||||||
if context.rejected:
|
if context.rejected:
|
||||||
# Insert the event_id into the rejections table
|
# Insert the event_id into the rejections table
|
||||||
|
# (events.rejection_reason has already been done)
|
||||||
self._store_rejections_txn(txn, event.event_id, context.rejected)
|
self._store_rejections_txn(txn, event.event_id, context.rejected)
|
||||||
to_remove.add(event)
|
to_remove.add(event)
|
||||||
|
|
||||||
|
|
|
@ -56,13 +56,15 @@ Changes in SCHEMA_VERSION = 67:
|
||||||
|
|
||||||
Changes in SCHEMA_VERSION = 68:
|
Changes in SCHEMA_VERSION = 68:
|
||||||
- event_reference_hashes is no longer read.
|
- event_reference_hashes is no longer read.
|
||||||
|
- `events` has `state_key` and `rejection_reason` columns, which are populated for
|
||||||
|
new events.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
SCHEMA_COMPAT_VERSION = (
|
SCHEMA_COMPAT_VERSION = (
|
||||||
# we have removed the public_room_list_stream table, so are now incompatible with
|
# we now have `state_key` columns in both `events` and `state_events`, so
|
||||||
# synapses wth SCHEMA_VERSION < 63.
|
# now incompatible with synapses wth SCHEMA_VERSION < 66.
|
||||||
63
|
66
|
||||||
)
|
)
|
||||||
"""Limit on how far the synapse codebase can be rolled back without breaking db compat
|
"""Limit on how far the synapse codebase can be rolled back without breaking db compat
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* Copyright 2022 The Matrix.org Foundation C.I.C
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
-- Add new colums to the `events` table which will (one day) make the `state_events`
|
||||||
|
-- and `rejections` tables redundant.
|
||||||
|
|
||||||
|
ALTER TABLE events
|
||||||
|
-- if this event is a state event, its state key
|
||||||
|
ADD COLUMN state_key TEXT DEFAULT NULL;
|
||||||
|
|
||||||
|
|
||||||
|
ALTER TABLE events
|
||||||
|
-- if this event was rejected, the reason it was rejected.
|
||||||
|
ADD COLUMN rejection_reason TEXT DEFAULT NULL;
|
|
@ -19,6 +19,7 @@ from twisted.trial import unittest
|
||||||
from synapse.api.constants import EventTypes
|
from synapse.api.constants import EventTypes
|
||||||
from synapse.api.room_versions import RoomVersions
|
from synapse.api.room_versions import RoomVersions
|
||||||
from synapse.events import EventBase
|
from synapse.events import EventBase
|
||||||
|
from synapse.events.snapshot import EventContext
|
||||||
from synapse.rest import admin
|
from synapse.rest import admin
|
||||||
from synapse.rest.client import login, room
|
from synapse.rest.client import login, room
|
||||||
from synapse.storage.databases.main.events import _LinkMap
|
from synapse.storage.databases.main.events import _LinkMap
|
||||||
|
@ -391,7 +392,9 @@ class EventChainStoreTestCase(HomeserverTestCase):
|
||||||
def _persist(txn):
|
def _persist(txn):
|
||||||
# We need to persist the events to the events and state_events
|
# We need to persist the events to the events and state_events
|
||||||
# tables.
|
# tables.
|
||||||
persist_events_store._store_event_txn(txn, [(e, {}) for e in events])
|
persist_events_store._store_event_txn(
|
||||||
|
txn, [(e, EventContext()) for e in events]
|
||||||
|
)
|
||||||
|
|
||||||
# Actually call the function that calculates the auth chain stuff.
|
# Actually call the function that calculates the auth chain stuff.
|
||||||
persist_events_store._persist_event_auth_chain_txn(txn, events)
|
persist_events_store._persist_event_auth_chain_txn(txn, events)
|
||||||
|
|
Loading…
Reference in New Issue