From 741304271e3c4461f073f77cb02dcb33fb3b93fb Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Sat, 29 Apr 2023 12:35:03 -0700 Subject: [PATCH] ircd::m::event::append: Optimize opts, eliminate double-indirection; various reorg. --- include/ircd/m/event/append.h | 43 ++- matrix/event_append.cc | 498 +++++++++++++++----------- modules/client/events.cc | 8 +- modules/client/notifications.cc | 2 +- modules/client/rooms/context.cc | 32 +- modules/client/rooms/event.cc | 4 +- modules/client/rooms/initialsync.cc | 25 +- modules/client/rooms/members.cc | 4 +- modules/client/rooms/messages.cc | 8 +- modules/client/rooms/relations.cc | 4 +- modules/client/rooms/state.cc | 4 +- modules/client/search.cc | 12 +- modules/client/sync/rooms/state.cc | 40 +-- modules/client/sync/rooms/timeline.cc | 30 +- modules/m_bridge.cc | 13 +- 15 files changed, 422 insertions(+), 305 deletions(-) diff --git a/include/ircd/m/event/append.h b/include/ircd/m/event/append.h index f271e28de..d3519207b 100644 --- a/include/ircd/m/event/append.h +++ b/include/ircd/m/event/append.h @@ -36,6 +36,19 @@ struct ircd::m::event::append static conf::item info; static log::log log; + bool is_ignored(const event &, const opts &) const; + bool is_redacted(const event &, const opts &) const; + bool is_invisible(const event &, const opts &) const; + bool is_excluded(const event &, const opts &) const; + + void _age(json::stack::object &, const event &, const opts &); + void _txnid(json::stack::object &, const event &, const opts &); + void _prev_state(json::stack::object &, const event &, const opts &); + void _unsigned(json::stack::object &, const event &, const opts &); + + bool members(json::stack::object &, const event &, const opts &); + bool object(json::stack::array &, const event &, const opts &); + public: append(json::stack::object &, const event &, const opts &); append(json::stack::object &, const event &); @@ -47,11 +60,11 @@ struct ircd::m::event::append /// can provide the best result. struct ircd::m::event::append::opts { - const event::idx *event_idx {nullptr}; - const string_view *client_txnid {nullptr}; - const id::user *user_id {nullptr}; - const room *user_room {nullptr}; - const int64_t *room_depth {nullptr}; + event::idx event_idx {0}; + string_view client_txnid; + id::user user_id; + id::room user_room_id; + int64_t room_depth {-1L}; const event::keys *keys {nullptr}; const m::event_filter *event_filter {nullptr}; long age {std::numeric_limits::min()}; @@ -72,3 +85,23 @@ ircd::m::event::append::append(json::stack::object &o, const event &e) :append{o, e, {}} {} + +inline +ircd::m::event::append::append(json::stack::array &array, + const event &event, + const opts &opts) +:returns{[this, &array, &event, &opts] +{ + return object(array, event, opts); +}} +{} + +inline +ircd::m::event::append::append(json::stack::object &object, + const event &event, + const opts &opts) +:returns{[this, &object, &event, &opts] +{ + return members(object, event, opts); +}} +{} diff --git a/matrix/event_append.cc b/matrix/event_append.cc index 7238610e8..4157e1b90 100644 --- a/matrix/event_append.cc +++ b/matrix/event_append.cc @@ -55,10 +55,10 @@ ircd::m::event::append::default_keys event::append::exclude_keys }; -ircd::m::event::append::append(json::stack::array &array, - const event &event_, +bool +ircd::m::event::append::object(json::stack::array &array, + const event &event, const opts &opts) -:returns{[&] { assert(array.s); json::stack::checkpoint cp @@ -66,29 +66,24 @@ ircd::m::event::append::append(json::stack::array &array, *array.s }; - json::stack::object object + json::stack::object _object { array }; const bool ret { - append - { - object, event_, opts - } + members(_object, event, opts) }; cp.committing(ret); return ret; -}} -{ } -ircd::m::event::append::append(json::stack::object &object, - const event &event, - const opts &opts) -:returns{[&] +bool +ircd::m::event::append::members(json::stack::object &out, + const event &event, + const opts &opts) { // Assertions that the event being appended has some required fields. This // is a central butt-end test of data coming through the system to here. @@ -97,150 +92,35 @@ ircd::m::event::append::append(json::stack::object &object, assert(defined(json::get<"sender"_>(event))); //assert(json::get<"origin_server_ts"_>(event)); //assert(json::get<"origin_server_ts"_>(event) != json::undefined_number); - #if defined(RB_DEBUG) - if(unlikely(!defined(json::get<"type"_>(event)))) - return false; + if constexpr(RB_DEBUG_LEVEL) + { + if(unlikely(!defined(json::get<"type"_>(event)))) + return false; - if(unlikely(!defined(json::get<"sender"_>(event)))) - return false; - #endif + if(unlikely(!defined(json::get<"sender"_>(event)))) + return false; + } if(opts.event_filter && !m::match(*opts.event_filter, event)) return false; - const auto ¬_types - { - exclude_types - }; - - if(!opts.event_filter && token_exists(not_types, ' ', json::get<"type"_>(event))) - { - log::debug - { - log, "Not sending event %s because type '%s' excluded by configuration.", - string_view{event.event_id}, - json::get<"type"_>(event), - }; - + if(is_excluded(event, opts)) return false; - } - - if(opts.query_visible && opts.user_id && !visible(event, *opts.user_id)) - { - log::debug - { - log, "Not sending event %s because not visible to %s.", - string_view{event.event_id}, - string_view{*opts.user_id}, - }; + if(is_invisible(event, opts)) return false; - } - - const bool has_event_idx - { - opts.event_idx && *opts.event_idx - }; - - const bool is_state - { - defined(json::get<"state_key"_>(event)) - }; - - const bool query_redacted - { - has_event_idx && - opts.query_redacted && - !is_state && - (!opts.room_depth || *opts.room_depth > json::get<"depth"_>(event)) - }; - - if(query_redacted && m::redacted(*opts.event_idx)) - { - log::debug - { - log, "Not sending event %s because redacted.", - string_view{event.event_id}, - }; + if(is_redacted(event, opts)) return false; - } - const bool has_user - { - opts.user_id && opts.user_room - }; - - const bool check_ignores - { - has_user && !is_state - }; - - if(check_ignores && *opts.user_id != json::get<"sender"_>(event)) - { - const m::user::ignores ignores - { - *opts.user_id - }; - - if(ignores.enforce("events") && ignores.has(json::get<"sender"_>(event))) - { - log::debug - { - log, "Not sending event %s because %s is ignored by %s", - string_view{event.event_id}, - json::get<"sender"_>(event), - string_view{*opts.user_id} - }; - - return false; - } - } - - const bool sender_is_user - { - has_user && json::get<"sender"_>(event) == *opts.user_id - }; - - const bool has_client_txnid - { - opts.client_txnid && *opts.client_txnid - }; - - const auto txnid_idx - { - !has_client_txnid && sender_is_user && opts.query_txnid? - opts.user_room->get(std::nothrow, "ircd.client.txnid", event.event_id): - 0UL - }; - - const bool query_prev_state - { - opts.query_prev_state && has_event_idx && is_state - }; - - const auto prev_state_idx - { - query_prev_state? - room::state::prev(*opts.event_idx): - 0UL - }; - - #if defined(RB_DEBUG) && 0 - if(!has_client_txnid && !txnid_idx && sender_is_user && opts.query_txnid) - log::dwarning - { - log, "Could not find transaction_id for %s from %s in %s", - string_view{event.event_id}, - json::get<"sender"_>(event), - json::get<"room_id"_>(event) - }; - #endif + if(is_ignored(event, opts)) + return false; + // For v3+ events if(!json::get<"event_id"_>(event)) json::stack::member { - object, "event_id", event.event_id + out, "event_id", event.event_id }; // Get the list of properties to send to the client so we can strip @@ -254,7 +134,7 @@ ircd::m::event::append::append(json::stack::object &object, }; // Append the event members - for_each(event, [&keys, &object] + for_each(event, [&keys, &out] (const auto &key, const auto &val_) { if(!keys.has(key) && key != "redacts"_sv) @@ -270,70 +150,77 @@ ircd::m::event::append::append(json::stack::object &object, json::stack::member { - object, key, val + out, key, val }; return true; }); - json::stack::object unsigned_ - { - object, "unsigned" - }; + _unsigned(out, event, opts); - const json::value age - { - // When the opts give an explicit age, use it. - opts.age != std::numeric_limits::min()? - opts.age: - - // If we have depth information, craft a value based on the - // distance to the head depth; if this is 0 in riot the event will - // "stick" at the bottom of the timeline. This may be advantageous - // in the future but for now we make sure the result is non-zero. - json::get<"depth"_>(event) >= 0 && opts.room_depth && *opts.room_depth >= 0L? - (*opts.room_depth + 1 - json::get<"depth"_>(event)) + 1: - - // We don't have depth information, so we use the origin_server_ts. - // It is bad if it conflicts with other appends in the room which - // did have depth information. - !opts.room_depth && json::get<"origin_server_ts"_>(event)? - ircd::time() - json::get<"origin_server_ts"_>(event): - - // Finally, this special value will eliminate the age altogether - // during serialization. - json::undefined_number - }; - - json::stack::member - { - unsigned_, "age", age - }; - - if(has_client_txnid) - json::stack::member + if(unlikely(info)) + log::info { - unsigned_, "transaction_id", *opts.client_txnid + log, "%s %s idx:%lu in %s depth:%ld txnid:%s %s,%s", + string_view{opts.user_id}, + string_view{event.event_id}, + opts.event_idx, + json::get<"room_id"_>(event), + json::get<"depth"_>(event), + opts.client_txnid, + json::get<"type"_>(event), + json::get<"state_key"_>(event), }; - if(txnid_idx) - m::get(std::nothrow, txnid_idx, "content", [&unsigned_] - (const json::object &content) - { - json::stack::member - { - unsigned_, "transaction_id", unquote(content.get("transaction_id")) - }; - }); + return true; +} + +void +ircd::m::event::append::_unsigned(json::stack::object &out, + const event &event, + const opts &opts) +{ + json::stack::object object + { + out, "unsigned" + }; + + _age(object, event, opts); + _txnid(object, event, opts); + + if(defined(json::get<"state_key"_>(event))) + _prev_state(object, event, opts); +} + +void +ircd::m::event::append::_prev_state(json::stack::object &out, + const event &event, + const opts &opts) +{ + assert(defined(json::get<"state_key"_>(event))) + + const bool query_prev_state + { + true + && opts.event_idx + && opts.query_prev_state + }; + + const auto prev_state_idx + { + query_prev_state? + room::state::prev(opts.event_idx): + 0UL + }; if(prev_state_idx) { - m::get(std::nothrow, prev_state_idx, "content", [&unsigned_] + m::get(std::nothrow, prev_state_idx, "content", [&out] (const json::object &content) { json::stack::member { - unsigned_, "prev_content", content + out, "prev_content", content }; }); @@ -344,7 +231,7 @@ ircd::m::event::append::append(json::stack::object &object, json::stack::member { - unsigned_, "replaces_state", json::value + out, "replaces_state", json::value { replaces_state_id? string_view{replaces_state_id}: @@ -352,24 +239,217 @@ ircd::m::event::append::append(json::stack::object &object, } }; } +} - if(unlikely(info)) - log::info +void +ircd::m::event::append::_txnid(json::stack::object &out, + const event &event, + const opts &opts) +{ + const bool sender_is_user + { + json::get<"sender"_>(event) == opts.user_id + }; + + const bool query_txnid + { + true + && !opts.client_txnid + && opts.query_txnid + && opts.user_room_id + && sender_is_user + }; + + const auto txnid_idx + { + query_txnid? + m::room(opts.user_room_id).get(std::nothrow, "ircd.client.txnid", event.event_id): + 0UL + }; + + if constexpr(RB_DEBUG_LEVEL) + { + const bool missing_txnid { - log, "%s %s idx:%lu in %s depth:%ld txnid:%s idx:%lu age:%ld %s,%s", - opts.user_id? string_view{*opts.user_id} : string_view{}, - string_view{event.event_id}, - opts.event_idx? *opts.event_idx : 0UL, - json::get<"room_id"_>(event), - json::get<"depth"_>(event), - has_client_txnid? *opts.client_txnid : string_view{}, - txnid_idx, - int64_t(age), - json::get<"type"_>(event), - json::get<"state_key"_>(event), + true + && !opts.client_txnid + && !txnid_idx + && sender_is_user + && opts.query_txnid }; - return true; -}} -{ + if(unlikely(missing_txnid)) + log::dwarning + { + log, "Could not find transaction_id for %s from %s in %s", + string_view{event.event_id}, + json::get<"sender"_>(event), + json::get<"room_id"_>(event) + }; + } + + if(opts.client_txnid) + json::stack::member + { + out, "transaction_id", opts.client_txnid + }; + else if(txnid_idx) + m::get(std::nothrow, txnid_idx, "content", [&out] + (const json::object &content) + { + json::stack::member + { + out, "transaction_id", content.get("transaction_id") + }; + }); +} + +void +ircd::m::event::append::_age(json::stack::object &out, + const event &event, + const opts &opts) +{ + const json::value age + { + // When the opts give an explicit age, use it. + opts.age != std::numeric_limits::min()? + opts.age: + + // If we have depth information, craft a value based on the + // distance to the head depth; if this is 0 in riot the event will + // "stick" at the bottom of the timeline. This may be advantageous + // in the future but for now we make sure the result is non-zero. + json::get<"depth"_>(event) >= 0 && opts.room_depth >= 0L? + (opts.room_depth + 1 - json::get<"depth"_>(event)) + 1: + + // We don't have depth information, so we use the origin_server_ts. + // It is bad if it conflicts with other appends in the room which + // did have depth information. + opts.room_depth < 0 && json::get<"origin_server_ts"_>(event)? + ircd::time() - json::get<"origin_server_ts"_>(event): + + // Finally, this special value will eliminate the age altogether + // during serialization. + json::undefined_number + }; + + json::stack::member + { + out, "age", age + }; +} + +bool +ircd::m::event::append::is_excluded(const event &event, + const opts &opts) +const +{ + const auto ¬_types + { + exclude_types + }; + + const bool ret + { + true + && !opts.event_filter + && token_exists(not_types, ' ', json::get<"type"_>(event)) + }; + + if(ret) + log::debug + { + log, "Not sending event %s because type '%s' excluded by configuration.", + string_view{event.event_id}, + json::get<"type"_>(event), + }; + + return ret; +} + +bool +ircd::m::event::append::is_invisible(const event &event, + const opts &opts) +const +{ + const bool ret + { + true + && opts.query_visible + && opts.user_id + && !visible(event, opts.user_id) + }; + + if(ret) + log::debug + { + log, "Not sending event %s because not visible to %s.", + string_view{event.event_id}, + string_view{opts.user_id}, + }; + + return ret; +} + +bool +ircd::m::event::append::is_redacted(const event &event, + const opts &opts) +const +{ + const bool ret + { + true + && opts.event_idx + && opts.query_redacted + && !defined(json::get<"state_key"_>(event)) + && opts.room_depth > json::get<"depth"_>(event) + && m::redacted(opts.event_idx) + }; + + if(ret) + log::debug + { + log, "Not sending event %s because redacted.", + string_view{event.event_id}, + }; + + return ret; +} + +bool +ircd::m::event::append::is_ignored(const event &event, + const opts &opts) +const +{ + const bool check_ignores + { + true + && !defined(json::get<"state_key"_>(event)) + && opts.user_id + && opts.user_room_id + && opts.user_id != json::get<"sender"_>(event) + }; + + if(!check_ignores) + return false; + + const m::user::ignores ignores + { + opts.user_id + }; + + if(ignores.enforce("events") && ignores.has(json::get<"sender"_>(event))) + { + log::debug + { + log, "Not sending event %s because %s is ignored by %s", + string_view{event.event_id}, + json::get<"sender"_>(event), + string_view{opts.user_id} + }; + + return true; + } + + return false; } diff --git a/modules/client/events.cc b/modules/client/events.cc index 63536646e..fde01f040 100644 --- a/modules/client/events.cc +++ b/modules/client/events.cc @@ -376,10 +376,10 @@ append_event(json::stack::array &out, { out, event, { - .event_idx = &event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, }, }; } diff --git a/modules/client/notifications.cc b/modules/client/notifications.cc index 574eb9f00..cae678bb1 100644 --- a/modules/client/notifications.cc +++ b/modules/client/notifications.cc @@ -206,7 +206,7 @@ ircd::m::get_notifications(client &client, { event_object, event, { - .event_idx = &event_idx, + .event_idx = event_idx, .keys = ¬ification_event_keys, //.query_txnid = false, //.query_prev_state = false, diff --git a/modules/client/rooms/context.cc b/modules/client/rooms/context.cc index 137c02d30..4440fc1dc 100644 --- a/modules/client/rooms/context.cc +++ b/modules/client/rooms/context.cc @@ -132,10 +132,10 @@ get__context(client &client, { _event, event, { - .event_idx = &event.event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event.event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, } }; } @@ -179,10 +179,10 @@ get__context(client &client, { array, event, { - .event_idx = &event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, .query_txnid = true, } }; @@ -233,10 +233,10 @@ get__context(client &client, { array, event, { - .event_idx = &event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, .query_txnid = true, } }; @@ -301,10 +301,10 @@ get__context(client &client, { array, event, { - .event_idx = &event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, .query_txnid = false, } }; diff --git a/modules/client/rooms/event.cc b/modules/client/rooms/event.cc index 0c6f26529..a68c8f93f 100644 --- a/modules/client/rooms/event.cc +++ b/modules/client/rooms/event.cc @@ -58,8 +58,8 @@ get__event(client &client, { top, event, { - .event_idx = &event.event_idx, - .user_id = &request.user_id, + .event_idx = event.event_idx, + .user_id = request.user_id, .query_prev_state = false, .query_redacted = false, .query_visible = false, diff --git a/modules/client/rooms/initialsync.cc b/modules/client/rooms/initialsync.cc index 883d7c6d4..f427992cf 100644 --- a/modules/client/rooms/initialsync.cc +++ b/modules/client/rooms/initialsync.cc @@ -202,10 +202,10 @@ get__initialsync_local(client &client, { state, state_event, { - .event_idx = &event_idx, - .user_id = &user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, .query_txnid = false, } }; @@ -255,14 +255,17 @@ get__initialsync_local(client &client, if(!visible(event, user.user_id)) continue; - m::event::append(chunk, event, + m::event::append { - .event_idx = &event_idx, - .user_id = &user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, - .query_txnid = true, - }); + chunk, event, + { + .event_idx = event_idx, + .user_id = user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, + .query_txnid = true, + } + }; } } diff --git a/modules/client/rooms/members.cc b/modules/client/rooms/members.cc index 12b8a6887..bbc0946bd 100644 --- a/modules/client/rooms/members.cc +++ b/modules/client/rooms/members.cc @@ -165,8 +165,8 @@ get__members(client &client, { chunk, event, { - .event_idx = &event_idx, - .user_id = &request.user_id, + .event_idx = event_idx, + .user_id = request.user_id, .query_txnid = false, .query_prev_state = false, .query_redacted = false, diff --git a/modules/client/rooms/messages.cc b/modules/client/rooms/messages.cc index f577b040f..4deac8106 100644 --- a/modules/client/rooms/messages.cc +++ b/modules/client/rooms/messages.cc @@ -152,10 +152,10 @@ get__messages(client &client, { chunk, event, { - .event_idx = &event_idx, - .user_id = &user_room.user.user_id, - .user_room = &user_room, - .room_depth = &room_depth, + .event_idx = event_idx, + .user_id = user_room.user.user_id, + .user_room_id = user_room.room_id, + .room_depth = room_depth, } } }; diff --git a/modules/client/rooms/relations.cc b/modules/client/rooms/relations.cc index 65e3cff2a..97a3bd3c7 100644 --- a/modules/client/rooms/relations.cc +++ b/modules/client/rooms/relations.cc @@ -174,8 +174,8 @@ relations_chunk_append(client &client, { chunk, event, { - .event_idx = &event_idx, - .user_id = &request.user_id, + .event_idx = event_idx, + .user_id = request.user_id, .query_txnid = false, } }; diff --git a/modules/client/rooms/state.cc b/modules/client/rooms/state.cc index 4bd606aec..916f7c9a1 100644 --- a/modules/client/rooms/state.cc +++ b/modules/client/rooms/state.cc @@ -206,8 +206,8 @@ append_event(const m::resource::request &request, { array, event, { - .event_idx = &event_idx, - .user_id = &request.user_id, + .event_idx = event_idx, + .user_id = request.user_id, .query_txnid = false, .query_prev_state = false, .query_redacted = false, diff --git a/modules/client/search.cc b/modules/client/search.cc index 0a09e9012..cc11a6ca4 100644 --- a/modules/client/search.cc +++ b/modules/client/search.cc @@ -550,8 +550,8 @@ try { result_event, event, { - .event_idx = &result.event_idx, - .user_id = &query.user_id, + .event_idx = result.event_idx, + .user_id = query.user_id, .event_filter = &event_filter, .query_prev_state = false, .query_visible = true, @@ -599,8 +599,8 @@ try { events_before, event, { - .event_idx = &event_idx, - .user_id = &query.user_id, + .event_idx = event_idx, + .user_id = query.user_id, .event_filter = &event_filter, .query_prev_state = false, .query_visible = true, @@ -628,8 +628,8 @@ try { events_after, event, { - .event_idx = &event_idx, - .user_id = &query.user_id, + .event_idx = event_idx, + .user_id = query.user_id, .event_filter = &event_filter, .query_prev_state = false, .query_visible = true, diff --git a/modules/client/sync/rooms/state.cc b/modules/client/sync/rooms/state.cc index 9d0ada238..8f7e7352b 100644 --- a/modules/client/sync/rooms/state.cc +++ b/modules/client/sync/rooms/state.cc @@ -221,10 +221,10 @@ ircd::m::sync::room_state_linear_events(data &data) { array, event, { - .event_idx = &event_idx, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = event_idx, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, .query_txnid = false, .query_prev_state = true, } @@ -265,10 +265,10 @@ ircd::m::sync::room_state_linear_events(data &data) { array, *data.event, { - .event_idx = &data.event_idx, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = data.event_idx, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, .query_txnid = false, .query_prev_state = true, } @@ -377,10 +377,10 @@ ircd::m::sync::room_state_polylog_events(data &data) { array, event, { - .event_idx = &event_idx, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = event_idx, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, .query_txnid = false, .query_prev_state = false, } @@ -517,10 +517,10 @@ ircd::m::sync::room_state_phased_events(data &data) { array, event, { - .event_idx = &event_idx, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = event_idx, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, .query_txnid = false, .query_prev_state = true, } @@ -664,10 +664,10 @@ ircd::m::sync::room_state_phased_member_events(data &data, { array, event, { - .event_idx = &sender_idx, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = sender_idx, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, .query_txnid = false, .query_prev_state = false, } diff --git a/modules/client/sync/rooms/timeline.cc b/modules/client/sync/rooms/timeline.cc index 5852c5323..8c61fa832 100644 --- a/modules/client/sync/rooms/timeline.cc +++ b/modules/client/sync/rooms/timeline.cc @@ -212,11 +212,11 @@ ircd::m::sync::room_timeline_linear(data &data) { array, *data.event, { - .event_idx = &data.event_idx, - .client_txnid = &data.client_txnid, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = data.event_idx, + .client_txnid = data.client_txnid, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, } }; } @@ -289,11 +289,11 @@ ircd::m::sync::_room_timeline_linear_command(data &data) { array, *data.event, { - .event_idx = &data.event_idx, - .client_txnid = &data.client_txnid, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = data.event_idx, + .client_txnid = data.client_txnid, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, } }; } @@ -400,11 +400,11 @@ ircd::m::sync::_room_timeline_polylog_events(data &data, { array, event, { - .event_idx = &event_idx, - .client_txnid = &data.client_txnid, - .user_id = &data.user.user_id, - .user_room = &data.user_room, - .room_depth = &data.room_depth, + .event_idx = event_idx, + .client_txnid = data.client_txnid, + .user_id = data.user.user_id, + .user_room_id = data.user_room.room_id, + .room_depth = data.room_depth, } }; } diff --git a/modules/m_bridge.cc b/modules/m_bridge.cc index c631b707d..b389b89e9 100644 --- a/modules/m_bridge.cc +++ b/modules/m_bridge.cc @@ -677,14 +677,15 @@ ircd::m::bridge::append(const config &config, const event::idx &event_idx, const event &event) { - event::append::opts opts; - opts.event_idx = &event_idx; - opts.query_txnid = false; - opts.query_prev_state = true; - opts.query_redacted = false; event::append { - events, event, opts + events, event, event::append::opts + { + .event_idx = event_idx, + .query_txnid = false, + .query_prev_state = true, + .query_redacted = false, + }, }; log::debug