diff --git a/include/ircd/m/dbs/ref.h b/include/ircd/m/dbs/ref.h index 1d6255423..496a78d4a 100644 --- a/include/ircd/m/dbs/ref.h +++ b/include/ircd/m/dbs/ref.h @@ -15,21 +15,30 @@ /// which should be plenty of namespace. Internally event_refs_key() and /// event_refs store this in a high order byte of an event::idx integer. This /// is an alternative to having separate columns for each type of reference. +/// +/// NOTE: These values are written to the database and cannot be changed. enum class ircd::m::dbs::ref :uint8_t { - // DAG - PREV = 0x00, - AUTH = 0x01, - STATE = 0x02, + /// All events which reference this event in their `prev_events`. + NEXT = 0x00, + + /// All power events which reference this event in their `auth_events`. + /// Non-auth/non-power events are not involved in this graph at all. + NEXT_AUTH = 0x01, + + /// The next states in the transitions for a (type,state_key) cell. + NEXT_STATE = 0x02, + + /// The previous states in the transitions for a (type,state_key) cell. PREV_STATE = 0x04, - // m.receipt + /// All m.receipt's which target this event. M_RECEIPT__M_READ = 0x10, - // m.relates_to + /// All m.relates_to's which target this event. M_RELATES__M_REPLY = 0x20, - // m.room.redaction + /// All m.room.redaction's which target this event. M_ROOM_REDACTION = 0x40, }; diff --git a/ircd/m_dbs.cc b/ircd/m_dbs.cc index 3bff17a8f..51242a186 100644 --- a/ircd/m_dbs.cc +++ b/ircd/m_dbs.cc @@ -405,13 +405,13 @@ ircd::m::dbs::_index_event_refs(db::txn &txn, { assert(opts.appendix.test(appendix::EVENT_REFS)); - if(opts.event_refs.test(uint(ref::PREV))) + if(opts.event_refs.test(uint(ref::NEXT))) _index_event_refs_prev(txn, event, opts); - if(opts.event_refs.test(uint(ref::AUTH))) + if(opts.event_refs.test(uint(ref::NEXT_AUTH))) _index_event_refs_auth(txn, event, opts); - if(opts.event_refs.test(uint(ref::STATE)) || + if(opts.event_refs.test(uint(ref::NEXT_STATE)) || opts.event_refs.test(uint(ref::PREV_STATE))) _index_event_refs_state(txn, event, opts); @@ -431,7 +431,7 @@ ircd::m::dbs::_index_event_refs_prev(db::txn &txn, const write_opts &opts) { assert(opts.appendix.test(appendix::EVENT_REFS)); - assert(opts.event_refs.test(uint(ref::PREV))); + assert(opts.event_refs.test(uint(ref::NEXT))); const event::prev &prev{event}; for(size_t i(0); i < prev.prev_events_count(); ++i) @@ -468,7 +468,7 @@ ircd::m::dbs::_index_event_refs_prev(db::txn &txn, assert(opts.event_idx != prev_idx); const string_view &key { - event_refs_key(buf, prev_idx, ref::PREV, opts.event_idx) + event_refs_key(buf, prev_idx, ref::NEXT, opts.event_idx) }; db::txn::append @@ -487,7 +487,7 @@ ircd::m::dbs::_index_event_refs_auth(db::txn &txn, const write_opts &opts) { assert(opts.appendix.test(appendix::EVENT_REFS)); - assert(opts.event_refs.test(uint(ref::AUTH))); + assert(opts.event_refs.test(uint(ref::NEXT_AUTH))); if(!event::auth::is_power_event(event)) return; @@ -524,7 +524,7 @@ ircd::m::dbs::_index_event_refs_auth(db::txn &txn, assert(opts.event_idx != auth_idx); const string_view &key { - event_refs_key(buf, auth_idx, ref::AUTH, opts.event_idx) + event_refs_key(buf, auth_idx, ref::NEXT_AUTH, opts.event_idx) }; db::txn::append @@ -543,7 +543,7 @@ ircd::m::dbs::_index_event_refs_state(db::txn &txn, const write_opts &opts) { assert(opts.appendix.test(appendix::EVENT_REFS)); - assert(opts.event_refs.test(uint(ref::STATE)) || + assert(opts.event_refs.test(uint(ref::NEXT_STATE)) || opts.event_refs.test(uint(ref::PREV_STATE))); if(!opts.present) @@ -586,11 +586,11 @@ ircd::m::dbs::_index_event_refs_state(db::txn &txn, assert(opts.event_idx != 0 && prev_state_idx != 0); assert(opts.event_idx != prev_state_idx); - if(opts.event_refs.test(uint(ref::STATE))) + if(opts.event_refs.test(uint(ref::NEXT_STATE))) { const string_view &key { - event_refs_key(buf, prev_state_idx, ref::STATE, opts.event_idx) + event_refs_key(buf, prev_state_idx, ref::NEXT_STATE, opts.event_idx) }; db::txn::append @@ -1691,26 +1691,13 @@ ircd::m::dbs::reflect(const ref &type) { switch(type) { - case ref::PREV: - return "PREV"; - - case ref::AUTH: - return "AUTH"; - - case ref::STATE: - return "STATE"; - - case ref::PREV_STATE: - return "PREV_STATE"; - - case ref::M_RECEIPT__M_READ: - return "M_RECEIPT__M_READ"; - - case ref::M_RELATES__M_REPLY: - return "M_RELATES__M_REPLY"; - - case ref::M_ROOM_REDACTION: - return "M_ROOM_REDACTION"; + case ref::NEXT: return "NEXT"; + case ref::NEXT_AUTH: return "NEXT_AUTH"; + case ref::NEXT_STATE: return "NEXT_STATE"; + case ref::PREV_STATE: return "PREV_STATE"; + case ref::M_RECEIPT__M_READ: return "M_RECEIPT__M_READ"; + case ref::M_RELATES__M_REPLY: return "M_RELATES__M_REPLY"; + case ref::M_ROOM_REDACTION: return "M_ROOM_REDACTION"; } return "????"; diff --git a/ircd/m_event.cc b/ircd/m_event.cc index 01843e6b9..ff66b8441 100644 --- a/ircd/m_event.cc +++ b/ircd/m_event.cc @@ -2429,7 +2429,7 @@ const idx }; - return erefs.for_each(dbs::ref::AUTH, [this, &type, &closure] + return erefs.for_each(dbs::ref::NEXT_AUTH, [this, &type, &closure] (const event::idx &ref, const dbs::ref &) { bool match; @@ -2690,8 +2690,8 @@ const // the iteration at type value 0 and then ignoring the // type as a loop continue condition. const bool all_type(type == dbs::ref(uint8_t(-1))); - const auto &_type{all_type? dbs::ref::PREV : type}; - assert(uint8_t(dbs::ref::PREV) == 0); + const auto &_type{all_type? dbs::ref::NEXT : type}; + assert(uint8_t(dbs::ref::NEXT) == 0); const string_view key { dbs::event_refs_key(buf, idx, _type, 0) diff --git a/ircd/m_room.cc b/ircd/m_room.cc index a0a87c894..451cc0919 100644 --- a/ircd/m_room.cc +++ b/ircd/m_room.cc @@ -86,7 +86,7 @@ ircd::m::room::state::purge_replaced(const state &state) if(!m::get(std::nothrow, event_idx, "state_key", [](const auto &) {})) continue; - if(!m::event::refs(event_idx).count(m::dbs::ref::STATE)) + if(!m::event::refs(event_idx).count(m::dbs::ref::NEXT_STATE)) continue; // TODO: erase event @@ -388,10 +388,10 @@ ircd::m::room::state::next(const event::idx &event_idx, event_idx }; - return refs.for_each(dbs::ref::STATE, [&closure] + return refs.for_each(dbs::ref::NEXT_STATE, [&closure] (const event::idx &event_idx, const dbs::ref &ref) { - assert(ref == dbs::ref::STATE); + assert(ref == dbs::ref::NEXT_STATE); return closure(event_idx); }); } @@ -1712,7 +1712,7 @@ const for(++coord.y; coord.y <= branch.y; ++coord.y, coord.x = 0) { auto idx(0); - refs.for_each(dbs::ref::PREV, [&coord, &branch, &idx] + refs.for_each(dbs::ref::NEXT, [&coord, &branch, &idx] (const auto &event_idx, const auto &) { if(coord.x <= branch.x) diff --git a/modules/console.cc b/modules/console.cc index 42d921a7b..d6ec0be49 100644 --- a/modules/console.cc +++ b/modules/console.cc @@ -6756,7 +6756,7 @@ console_cmd__event__refs(opt &out, const string_view &line) } bool -console_cmd__event__refs__prev(opt &out, const string_view &line) +console_cmd__event__refs__next(opt &out, const string_view &line) { const params param{line, " ", { @@ -6773,7 +6773,7 @@ console_cmd__event__refs__prev(opt &out, const string_view &line) index(event_id) }; - refs.for_each(m::dbs::ref::PREV, [&out] + refs.for_each(m::dbs::ref::NEXT, [&out] (const auto &idx, const auto &type) { const m::event::fetch event