diff --git a/changelog.d/19816.misc b/changelog.d/19816.misc new file mode 100644 index 0000000000..4663e8b961 --- /dev/null +++ b/changelog.d/19816.misc @@ -0,0 +1 @@ +Port the python Event classes to Rust. diff --git a/rust/src/events/utils.rs b/rust/src/events/utils.rs index 7d33c52b44..b58edc9352 100644 --- a/rust/src/events/utils.rs +++ b/rust/src/events/utils.rs @@ -75,15 +75,14 @@ pub fn compute_event_reference_hash( redacted_value_mut.remove(UNSIGNED); redacted_value_mut.remove(AGE_TS); - let canonicalization_options = if room_version.strict_canonicaljson { - CanonicalizationOptions::strict() - } else { - CanonicalizationOptions::relaxed() - }; - - let json = - crate::canonical_json::to_string_canonical(&redacted_value_mut, canonicalization_options) - .map_err(|err| anyhow::anyhow!(err))?; + // We use `CanonicalizationOptions::relaxed()` as we have some events that + // have already been accepted with int fields outside the valid range. We + // still want to be able to load them and calculate their event ID. + let json = crate::canonical_json::to_string_canonical( + &redacted_value_mut, + CanonicalizationOptions::relaxed(), + ) + .map_err(|err| anyhow::anyhow!(err))?; let hash = Sha256::digest(json.as_bytes()); diff --git a/synapse/storage/databases/main/events_worker.py b/synapse/storage/databases/main/events_worker.py index 4b372de141..65b7d251d9 100644 --- a/synapse/storage/databases/main/events_worker.py +++ b/synapse/storage/databases/main/events_worker.py @@ -1523,8 +1523,8 @@ class EventsWorkerStore(SQLBaseStore): internal_metadata_dict=internal_metadata, rejected_reason=rejected_reason, ) - except SynapseError: - logger.error("Unable to parse event from database: %s", event_id) + except SynapseError as e: + logger.error("Unable to parse event from database %s: %s", event_id, e) continue original_ev.internal_metadata.stream_ordering = row.stream_ordering