diff --git a/matrix/dbs.cc b/matrix/dbs.cc index 5b4cc5261..f39aa024e 100644 --- a/matrix/dbs.cc +++ b/matrix/dbs.cc @@ -315,17 +315,14 @@ ircd::m::dbs::_index_room(db::txn &txn, if(opts.appendix.test(appendix::ROOM_HEAD_RESOLVE)) _index_room_head_resolve(txn, event, opts); - if(defined(json::get<"state_key"_>(event))) - { - if(opts.appendix.test(appendix::ROOM_STATE)) - _index_room_state(txn, event, opts); + if(opts.appendix.test(appendix::ROOM_STATE)) + _index_room_state(txn, event, opts); - if(opts.appendix.test(appendix::ROOM_STATE_SPACE)) - _index_room_state_space(txn, event, opts); + if(opts.appendix.test(appendix::ROOM_STATE_SPACE)) + _index_room_state_space(txn, event, opts); - if(opts.appendix.test(appendix::ROOM_JOINED) && at<"type"_>(event) == "m.room.member") - _index_room_joined(txn, event, opts); - } + if(opts.appendix.test(appendix::ROOM_JOINED) && at<"type"_>(event) == "m.room.member") + _index_room_joined(txn, event, opts); if(opts.appendix.test(appendix::ROOM_REDACT) && json::get<"type"_>(event) == "m.room.redaction") _index_room_redact(txn, event, opts); @@ -350,17 +347,14 @@ ircd::m::dbs::_prefetch_room(const event &event, if(opts.appendix.test(appendix::ROOM_HEAD_RESOLVE)) ;//ret += _prefetch_room_head_resolve(event, opts); - if(defined(json::get<"state_key"_>(event))) - { - if(opts.appendix.test(appendix::ROOM_STATE)) - ;//ret += _prefetch_room_state(event, opts); + if(opts.appendix.test(appendix::ROOM_STATE)) + ;//ret += _prefetch_room_state(event, opts); - if(opts.appendix.test(appendix::ROOM_STATE_SPACE)) - ;//ret += _prefetch_room_state_space(event, opts); + if(opts.appendix.test(appendix::ROOM_STATE_SPACE)) + ;//ret += _prefetch_room_state_space(event, opts); - if(opts.appendix.test(appendix::ROOM_JOINED) && at<"type"_>(event) == "m.room.member") - ;//ret += _prefetch_room_joined(event, opts); - } + if(opts.appendix.test(appendix::ROOM_JOINED) && at<"type"_>(event) == "m.room.member") + ;//ret += _prefetch_room_joined(event, opts); if(opts.appendix.test(appendix::ROOM_REDACT) && json::get<"type"_>(event) == "m.room.redaction") ret += _prefetch_room_redact(event, opts); diff --git a/matrix/dbs_event_state.cc b/matrix/dbs_event_state.cc index 341128284..a4652f496 100644 --- a/matrix/dbs_event_state.cc +++ b/matrix/dbs_event_state.cc @@ -113,6 +113,7 @@ ircd::m::dbs::_index_event_state(db::txn &txn, assert(json::get<"type"_>(event)); assert(opts.event_idx); + // Ignore non-state if(!defined(json::get<"state_key"_>(event))) return; diff --git a/matrix/dbs_room_joined.cc b/matrix/dbs_room_joined.cc index 0bc014316..6e37c735e 100644 --- a/matrix/dbs_room_joined.cc +++ b/matrix/dbs_room_joined.cc @@ -154,6 +154,15 @@ ircd::m::dbs::_index_room_joined(db::txn &txn, assert(opts.appendix.test(appendix::ROOM_JOINED)); assert(at<"type"_>(event) == "m.room.member"); + // Ignore non-state + if(!defined(json::get<"state_key"_>(event))) + return; + + // Ignore non-present state (similar to room_state) + if(opts.op == db::op::DELETE) + if(!room::state::present(opts.event_idx)) + return; + thread_local char buf[ROOM_JOINED_KEY_MAX_SIZE]; const ctx::critical_assertion ca; const string_view &key diff --git a/matrix/dbs_room_state.cc b/matrix/dbs_room_state.cc index e65313c9d..6a1aaed26 100644 --- a/matrix/dbs_room_state.cc +++ b/matrix/dbs_room_state.cc @@ -161,6 +161,15 @@ ircd::m::dbs::_index_room_state(db::txn &txn, { assert(opts.appendix.test(appendix::ROOM_STATE)); + // Ignore non-state + if(!defined(json::get<"state_key"_>(event))) + return; + + // Ignore non-present state (likely coming from an event purge) + if(opts.op == db::op::DELETE) + if(!room::state::present(opts.event_idx)) + return; + const ctx::critical_assertion ca; thread_local char buf[ROOM_STATE_KEY_MAX_SIZE]; const string_view &key diff --git a/matrix/dbs_room_state_space.cc b/matrix/dbs_room_state_space.cc index fd4cf6e15..4b5b03e0c 100644 --- a/matrix/dbs_room_state_space.cc +++ b/matrix/dbs_room_state_space.cc @@ -161,6 +161,10 @@ ircd::m::dbs::_index_room_state_space(db::txn &txn, { assert(opts.appendix.test(appendix::ROOM_STATE_SPACE)); + // Ignore non-state + if(!defined(json::get<"state_key"_>(event))) + return; + const ctx::critical_assertion ca; thread_local char buf[ROOM_STATE_SPACE_KEY_MAX_SIZE]; const string_view &key