0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-11-29 18:22:50 +01:00

modules/m_event: Add event refs rebuild util w/ console cmd.

This commit is contained in:
Jason Volk 2019-02-06 17:49:29 -08:00
parent 2b3aec68ee
commit f21c08fb19
2 changed files with 75 additions and 0 deletions

View file

@ -5852,6 +5852,20 @@ console_cmd__event__refs(opt &out, const string_view &line)
return true;
}
bool
console_cmd__event__refs__rebuild(opt &out, const string_view &line)
{
using prototype = void ();
static mods::import<prototype> rebuild
{
"m_event", "event_refs__rebuild"
};
rebuild();
out << "done" << std::endl;
return true;
}
//
// state
//

View file

@ -556,3 +556,64 @@ pretty_oneline__prev(std::ostream &s,
s << unquote(prev_event[0]) << " ";
s << "] ";
}
extern "C" void
event_refs__rebuild()
{
static const size_t pool_size{64};
static const size_t log_interval{8192};
db::txn txn
{
*m::dbs::events
};
auto &column
{
dbs::event_json
};
auto it
{
column.begin()
};
ctx::dock dock;
ctx::pool pool;
pool.min(pool_size);
size_t i(0), j(0);
for(; it; ++it)
{
std::string event{it->second};
const m::event::idx event_idx
{
byte_view<m::event::idx>(it->first)
};
pool([&txn, &dock, &i, &j, event(std::move(event)), event_idx]
{
m::dbs::write_opts wopts;
wopts.event_idx = event_idx;
m::dbs::_index_event_refs(txn, json::object{event}, wopts);
if(++j % log_interval == 0) log::info
{
m::log, "Refs builder @%zu:%zu of %lu (@idx: %lu)",
i,
j,
m::vm::current_sequence,
event_idx
};
dock.notify_one();
});
++i;
}
dock.wait([&i, &j]
{
return i == j;
});
txn();
}