mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-10-01 11:49:51 -04:00
Stop reading from event_reference_hashes
(#11794)
Preparation for dropping this table altogether. Part of #6574.
This commit is contained in:
parent
c027bc0e4b
commit
2277275485
1
changelog.d/11794.misc
Normal file
1
changelog.d/11794.misc
Normal file
@ -0,0 +1 @@
|
|||||||
|
Preparation for database schema simplifications: stop reading from `event_reference_hashes`.
|
@ -52,8 +52,8 @@ class SlavedEventStore(
|
|||||||
EventPushActionsWorkerStore,
|
EventPushActionsWorkerStore,
|
||||||
StreamWorkerStore,
|
StreamWorkerStore,
|
||||||
StateGroupWorkerStore,
|
StateGroupWorkerStore,
|
||||||
EventsWorkerStore,
|
|
||||||
SignatureWorkerStore,
|
SignatureWorkerStore,
|
||||||
|
EventsWorkerStore,
|
||||||
UserErasureWorkerStore,
|
UserErasureWorkerStore,
|
||||||
RelationsWorkerStore,
|
RelationsWorkerStore,
|
||||||
BaseSlavedStore,
|
BaseSlavedStore,
|
||||||
|
@ -65,7 +65,7 @@ class _NoChainCoverIndex(Exception):
|
|||||||
super().__init__("Unexpectedly no chain cover for events in %s" % (room_id,))
|
super().__init__("Unexpectedly no chain cover for events in %s" % (room_id,))
|
||||||
|
|
||||||
|
|
||||||
class EventFederationWorkerStore(EventsWorkerStore, SignatureWorkerStore, SQLBaseStore):
|
class EventFederationWorkerStore(SignatureWorkerStore, EventsWorkerStore, SQLBaseStore):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
database: DatabasePool,
|
database: DatabasePool,
|
||||||
|
@ -12,16 +12,19 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
from typing import Dict, Iterable, List, Tuple
|
from typing import Collection, Dict, List, Tuple
|
||||||
|
|
||||||
from unpaddedbase64 import encode_base64
|
from unpaddedbase64 import encode_base64
|
||||||
|
|
||||||
from synapse.storage._base import SQLBaseStore
|
from synapse.crypto.event_signing import compute_event_reference_hash
|
||||||
from synapse.storage.types import Cursor
|
from synapse.storage.databases.main.events_worker import (
|
||||||
|
EventRedactBehaviour,
|
||||||
|
EventsWorkerStore,
|
||||||
|
)
|
||||||
from synapse.util.caches.descriptors import cached, cachedList
|
from synapse.util.caches.descriptors import cached, cachedList
|
||||||
|
|
||||||
|
|
||||||
class SignatureWorkerStore(SQLBaseStore):
|
class SignatureWorkerStore(EventsWorkerStore):
|
||||||
@cached()
|
@cached()
|
||||||
def get_event_reference_hash(self, event_id):
|
def get_event_reference_hash(self, event_id):
|
||||||
# This is a dummy function to allow get_event_reference_hashes
|
# This is a dummy function to allow get_event_reference_hashes
|
||||||
@ -32,7 +35,7 @@ class SignatureWorkerStore(SQLBaseStore):
|
|||||||
cached_method_name="get_event_reference_hash", list_name="event_ids", num_args=1
|
cached_method_name="get_event_reference_hash", list_name="event_ids", num_args=1
|
||||||
)
|
)
|
||||||
async def get_event_reference_hashes(
|
async def get_event_reference_hashes(
|
||||||
self, event_ids: Iterable[str]
|
self, event_ids: Collection[str]
|
||||||
) -> Dict[str, Dict[str, bytes]]:
|
) -> Dict[str, Dict[str, bytes]]:
|
||||||
"""Get all hashes for given events.
|
"""Get all hashes for given events.
|
||||||
|
|
||||||
@ -41,18 +44,27 @@ class SignatureWorkerStore(SQLBaseStore):
|
|||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
A mapping of event ID to a mapping of algorithm to hash.
|
A mapping of event ID to a mapping of algorithm to hash.
|
||||||
|
Returns an empty dict for a given event id if that event is unknown.
|
||||||
"""
|
"""
|
||||||
|
events = await self.get_events(
|
||||||
|
event_ids,
|
||||||
|
redact_behaviour=EventRedactBehaviour.AS_IS,
|
||||||
|
allow_rejected=True,
|
||||||
|
)
|
||||||
|
|
||||||
def f(txn):
|
hashes: Dict[str, Dict[str, bytes]] = {}
|
||||||
return {
|
for event_id in event_ids:
|
||||||
event_id: self._get_event_reference_hashes_txn(txn, event_id)
|
event = events.get(event_id)
|
||||||
for event_id in event_ids
|
if event is None:
|
||||||
}
|
hashes[event_id] = {}
|
||||||
|
else:
|
||||||
|
ref_alg, ref_hash_bytes = compute_event_reference_hash(event)
|
||||||
|
hashes[event_id] = {ref_alg: ref_hash_bytes}
|
||||||
|
|
||||||
return await self.db_pool.runInteraction("get_event_reference_hashes", f)
|
return hashes
|
||||||
|
|
||||||
async def add_event_hashes(
|
async def add_event_hashes(
|
||||||
self, event_ids: Iterable[str]
|
self, event_ids: Collection[str]
|
||||||
) -> List[Tuple[str, Dict[str, str]]]:
|
) -> List[Tuple[str, Dict[str, str]]]:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -70,24 +82,6 @@ class SignatureWorkerStore(SQLBaseStore):
|
|||||||
|
|
||||||
return list(encoded_hashes.items())
|
return list(encoded_hashes.items())
|
||||||
|
|
||||||
def _get_event_reference_hashes_txn(
|
|
||||||
self, txn: Cursor, event_id: str
|
|
||||||
) -> Dict[str, bytes]:
|
|
||||||
"""Get all the hashes for a given PDU.
|
|
||||||
Args:
|
|
||||||
txn:
|
|
||||||
event_id: Id for the Event.
|
|
||||||
Returns:
|
|
||||||
A mapping of algorithm -> hash.
|
|
||||||
"""
|
|
||||||
query = (
|
|
||||||
"SELECT algorithm, hash"
|
|
||||||
" FROM event_reference_hashes"
|
|
||||||
" WHERE event_id = ?"
|
|
||||||
)
|
|
||||||
txn.execute(query, (event_id,))
|
|
||||||
return {k: v for k, v in txn}
|
|
||||||
|
|
||||||
|
|
||||||
class SignatureStore(SignatureWorkerStore):
|
class SignatureStore(SignatureWorkerStore):
|
||||||
"""Persistence for event signatures and hashes"""
|
"""Persistence for event signatures and hashes"""
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SCHEMA_VERSION = 67 # remember to update the list below when updating
|
SCHEMA_VERSION = 68 # remember to update the list below when updating
|
||||||
"""Represents the expectations made by the codebase about the database schema
|
"""Represents the expectations made by the codebase about the database schema
|
||||||
|
|
||||||
This should be incremented whenever the codebase changes its requirements on the
|
This should be incremented whenever the codebase changes its requirements on the
|
||||||
@ -53,6 +53,9 @@ Changes in SCHEMA_VERSION = 66:
|
|||||||
|
|
||||||
Changes in SCHEMA_VERSION = 67:
|
Changes in SCHEMA_VERSION = 67:
|
||||||
- state_events.prev_state is no longer written to.
|
- state_events.prev_state is no longer written to.
|
||||||
|
|
||||||
|
Changes in SCHEMA_VERSION = 68:
|
||||||
|
- event_reference_hashes is no longer read.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user