0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-16 08:58:20 +02:00

ircd:Ⓜ️:dbs: Restore purged events to the event horizon.

This commit is contained in:
Jason Volk 2023-02-11 11:48:47 -08:00
parent 603a6a3f99
commit 30cc6b3bdb

View file

@ -240,12 +240,23 @@ ircd::m::dbs::_index_event_refs_prev(db::txn &txn,
for(size_t i(0); i < prev_id.size(); ++i) for(size_t i(0); i < prev_id.size(); ++i)
{ {
if(opts.appendix.test(appendix::EVENT_HORIZON) && !prev_idx[i]) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && prev_idx[i])
_index_event_horizon(txn, event, opts, prev_id[i]); {
continue; auto _opts(opts);
} _opts.op = db::op::SET;
else if(!prev_idx[i]) _opts.event_idx = prev_idx[i];
_index_event_horizon(txn, {}, _opts, event.event_id);
}
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && !prev_idx[i])
{
_index_event_horizon(txn, event, opts, prev_id[i]);
continue;
}
if(!prev_idx[i])
{ {
log::dwarning log::dwarning
{ {
@ -327,11 +338,21 @@ ircd::m::dbs::_index_event_refs_auth(db::txn &txn,
for(size_t i(0); i < auth_id.size(); ++i) for(size_t i(0); i < auth_id.size(); ++i)
{ {
if(unlikely(!auth_idx[i])) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && auth_idx[i])
if(opts.appendix.test(appendix::EVENT_HORIZON)) {
auto _opts(opts);
_opts.op = db::op::SET;
_opts.event_idx = auth_idx[i];
_index_event_horizon(txn, {}, _opts, event.event_id);
}
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && unlikely(!auth_idx[i]))
_index_event_horizon(txn, event, opts, auth_id[i]); _index_event_horizon(txn, event, opts, auth_id[i]);
if(unlikely(!auth_idx[i]))
{
log::error log::error
{ {
log, "No index found to ref %s AUTH of %s", log, "No index found to ref %s AUTH of %s",
@ -520,12 +541,23 @@ ircd::m::dbs::_index_event_refs_m_receipt_m_read(db::txn &txn,
find_event_idx(event_id, opts) find_event_idx(event_id, opts)
}; };
if(opts.appendix.test(appendix::EVENT_HORIZON) && !event_idx) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && event_idx)
_index_event_horizon(txn, event, opts, event_id); {
return; auto _opts(opts);
} _opts.op = db::op::SET;
else if(!event_idx) _opts.event_idx = event_idx;
_index_event_horizon(txn, {}, _opts, event.event_id);
}
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && !event_idx)
{
_index_event_horizon(txn, event, opts, event_id);
return;
}
if(!event_idx)
{ {
log::dwarning log::dwarning
{ {
@ -625,14 +657,23 @@ ircd::m::dbs::_index_event_refs_m_relates(db::txn &txn,
find_event_idx(event_id, opts) find_event_idx(event_id, opts)
}; };
if(opts.appendix.test(appendix::EVENT_HORIZON) && !event_idx) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && event_idx)
// If we don't have the event being related to yet, place a marker in {
// the event_horizon indicating need for re-evaluation later. auto _opts(opts);
_index_event_horizon(txn, event, opts, event_id); _opts.op = db::op::SET;
return; _opts.event_idx = event_idx;
} _index_event_horizon(txn, {}, _opts, event.event_id);
else if(!event_idx) }
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && !event_idx)
{
_index_event_horizon(txn, event, opts, event_id);
return;
}
if(!event_idx)
{ {
log::derror log::derror
{ {
@ -722,12 +763,23 @@ ircd::m::dbs::_index_event_refs_m_relates_m_reply(db::txn &txn,
find_event_idx(event_id, opts) find_event_idx(event_id, opts)
}; };
if(opts.appendix.test(appendix::EVENT_HORIZON) && !event_idx) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && event_idx)
_index_event_horizon(txn, event, opts, event_id); {
return; auto _opts(opts);
} _opts.op = db::op::SET;
else if(!event_idx) _opts.event_idx = event_idx;
_index_event_horizon(txn, {}, _opts, event.event_id);
}
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && !event_idx)
{
_index_event_horizon(txn, event, opts, event_id);
return;
}
if(!event_idx)
{ {
log::dwarning log::dwarning
{ {
@ -807,12 +859,23 @@ ircd::m::dbs::_index_event_refs_m_room_redaction(db::txn &txn,
find_event_idx(event_id, opts) find_event_idx(event_id, opts)
}; };
if(opts.appendix.test(appendix::EVENT_HORIZON) && !event_idx) if(opts.appendix.test(appendix::EVENT_HORIZON))
{ if(opts.op == db::op::DELETE && event_idx)
_index_event_horizon(txn, event, opts, event_id); {
return; auto _opts(opts);
} _opts.op = db::op::SET;
else if(!event_idx) _opts.event_idx = event_idx;
_index_event_horizon(txn, {}, _opts, event.event_id);
}
if(opts.appendix.test(appendix::EVENT_HORIZON))
if(opts.op == db::op::SET && !event_idx)
{
_index_event_horizon(txn, event, opts, event_id);
return;
}
if(!event_idx)
{ {
log::dwarning log::dwarning
{ {