0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-29 10:12:39 +01:00

ircd:Ⓜ️:vm::fetch: Improve various hint selections.

This commit is contained in:
Jason Volk 2020-12-01 02:36:40 -08:00
parent 25bee046b3
commit 9344f3bc35

View file

@ -269,7 +269,7 @@ try
// most likely to provide a satisfying response. // most likely to provide a satisfying response.
opts.hint = opts.hint =
{ {
!my_host(eval.opts->node_id)? eval.opts->node_id && !my_host(eval.opts->node_id)?
eval.opts->node_id: eval.opts->node_id:
event.event_id.host() && !my_host(event.event_id.host())? event.event_id.host() && !my_host(event.event_id.host())?
@ -554,21 +554,28 @@ ircd::m::vm::fetch::state_fetch(const event &event,
if(it != end(req) && *it == event_id) if(it != end(req) && *it == event_id)
return; return;
req.emplace_hint(it, event_id);
m::fetch::opts opts; m::fetch::opts opts;
opts.op = m::fetch::op::event; opts.op = m::fetch::op::event;
opts.room_id = result.request->room_id; opts.room_id = result.request->room_id;
opts.event_id = event_id; opts.event_id = event_id;
opts.hint = opts.hint =
{ {
!my_host(eval.opts->node_id)? event_id.host() && !my_host(event_id.host())?
eval.opts->node_id: event_id.host():
!my_host(result.origin)? !my_host(result.origin)?
result.origin: result.origin:
string_view{}
eval.opts->node_id && !my_host(eval.opts->node_id)?
eval.opts->node_id:
opts.room_id.host() && !my_host(opts.room_id.host())?
opts.room_id.host():
string_view{}
}; };
req.emplace_hint(it, event_id);
ret.emplace_front(m::fetch::start(opts)); ret.emplace_front(m::fetch::start(opts));
assert(std::distance(begin(ret), end(ret)) <= ssize_t(req.size())); assert(std::distance(begin(ret), end(ret)) <= ssize_t(req.size()));
@ -809,6 +816,23 @@ ircd::m::vm::fetch::prev_fetch(const event &event,
opts.backfill_limit = size_t(depth_gap); opts.backfill_limit = size_t(depth_gap);
opts.backfill_limit = std::min(opts.backfill_limit, eval.opts->fetch_prev_limit); opts.backfill_limit = std::min(opts.backfill_limit, eval.opts->fetch_prev_limit);
opts.backfill_limit = std::min(opts.backfill_limit, size_t(prev_backfill_limit)); opts.backfill_limit = std::min(opts.backfill_limit, size_t(prev_backfill_limit));
opts.hint =
{
eval.opts->node_id && !my_host(eval.opts->node_id)?
eval.opts->node_id:
prev_id.host() && !my_host(prev_id.host())?
prev_id.host():
!my_host(json::get<"origin"_>(event))?
string_view(json::get<"origin"_>(event)):
room.room_id.host() && !my_host(room.room_id.host())?
room.room_id.host():
string_view{}
};
log::debug log::debug
{ {
log, "%s requesting backfill off %s; depth:%ld viewport:%ld room:%ld gap:%ld limit:%zu", log, "%s requesting backfill off %s; depth:%ld viewport:%ld room:%ld gap:%ld limit:%zu",