mirror of
https://github.com/matrix-construct/construct
synced 2024-05-29 08:13:46 +02:00
ircd:Ⓜ️:vm::eval: Remove sequence_shared state.
This commit is contained in:
parent
987a3eeb6b
commit
b91c768c57
|
@ -81,7 +81,6 @@ struct ircd::m::vm::eval
|
||||||
vm::eval *child {nullptr};
|
vm::eval *child {nullptr};
|
||||||
uint64_t id {++id_ctr};
|
uint64_t id {++id_ctr};
|
||||||
uint64_t sequence {0};
|
uint64_t sequence {0};
|
||||||
uint64_t sequence_shared[2] {0}; // min, max
|
|
||||||
std::shared_ptr<db::txn> txn;
|
std::shared_ptr<db::txn> txn;
|
||||||
|
|
||||||
vector_view<m::event> pdus;
|
vector_view<m::event> pdus;
|
||||||
|
|
|
@ -127,14 +127,15 @@ ircd::m::vm::loghead(const mutable_buffer &buf,
|
||||||
{
|
{
|
||||||
return fmt::sprintf
|
return fmt::sprintf
|
||||||
{
|
{
|
||||||
buf, "vm:%lu:%lu:%lu eval:%lu seq:%lu share:%lu:%lu %s",
|
buf, "vm:%lu:%lu:%lu eval:%lu seq:%lu parent:%lu %s",
|
||||||
sequence::retired,
|
sequence::retired,
|
||||||
sequence::committed,
|
sequence::committed,
|
||||||
sequence::uncommitted,
|
sequence::uncommitted,
|
||||||
eval.id,
|
eval.id,
|
||||||
sequence::get(eval),
|
sequence::get(eval),
|
||||||
eval.sequence_shared[0],
|
eval.parent?
|
||||||
eval.sequence_shared[1],
|
eval.parent->id:
|
||||||
|
0UL,
|
||||||
eval.event_?
|
eval.event_?
|
||||||
string_view{eval.event_->event_id}:
|
string_view{eval.event_->event_id}:
|
||||||
"<unidentified>"_sv,
|
"<unidentified>"_sv,
|
||||||
|
|
|
@ -669,12 +669,6 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
|
|
||||||
// Obtain sequence number here.
|
// Obtain sequence number here.
|
||||||
const auto *const &top(eval::seqmax());
|
const auto *const &top(eval::seqmax());
|
||||||
const scope_restore<uint64_t> sequence_shared[2]
|
|
||||||
{
|
|
||||||
{ eval.sequence_shared[0], 0UL },
|
|
||||||
{ eval.sequence_shared[1], 0UL },
|
|
||||||
};
|
|
||||||
|
|
||||||
eval.sequence =
|
eval.sequence =
|
||||||
{
|
{
|
||||||
top?
|
top?
|
||||||
|
@ -719,11 +713,13 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(eval.sequence != 0);
|
assert(eval.sequence != 0);
|
||||||
assert(sequence::uncommitted <= sequence::get(eval));
|
|
||||||
assert(sequence::committed < sequence::get(eval));
|
|
||||||
assert(sequence::retired < sequence::get(eval));
|
|
||||||
assert(eval::sequnique(sequence::get(eval)));
|
assert(eval::sequnique(sequence::get(eval)));
|
||||||
sequence::uncommitted = sequence::get(eval);
|
assert(eval.parent || sequence::uncommitted <= sequence::get(eval));
|
||||||
|
assert(eval.parent || sequence::committed < sequence::get(eval));
|
||||||
|
assert(eval.parent || sequence::retired < sequence::get(eval));
|
||||||
|
sequence::uncommitted = !eval.parent?
|
||||||
|
sequence::get(eval):
|
||||||
|
sequence::uncommitted;
|
||||||
|
|
||||||
const scope_restore eval_phase_commit
|
const scope_restore eval_phase_commit
|
||||||
{
|
{
|
||||||
|
@ -733,7 +729,10 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
// Wait until this is the lowest sequence number
|
// Wait until this is the lowest sequence number
|
||||||
sequence::dock.wait([&eval]
|
sequence::dock.wait([&eval]
|
||||||
{
|
{
|
||||||
return eval::seqnext(sequence::committed) == &eval;
|
return false
|
||||||
|
|| eval.parent
|
||||||
|
|| eval::seqnext(sequence::committed) == &eval
|
||||||
|
;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reevaluation of auth against the present state of the room.
|
// Reevaluation of auth against the present state of the room.
|
||||||
|
@ -758,10 +757,6 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
call_hook(eval_hook, eval, event, eval);
|
call_hook(eval_hook, eval, event, eval);
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(sequence::committed < sequence::get(eval));
|
|
||||||
assert(sequence::retired < sequence::get(eval));
|
|
||||||
sequence::committed = sequence::get(eval);
|
|
||||||
|
|
||||||
// Allocate transaction; discover shared-sequenced evals.
|
// Allocate transaction; discover shared-sequenced evals.
|
||||||
if(likely(opts.phase[phase::INDEX]))
|
if(likely(opts.phase[phase::INDEX]))
|
||||||
{
|
{
|
||||||
|
@ -780,6 +775,12 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
write_append(eval, event);
|
write_append(eval, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(eval.parent || sequence::committed < sequence::get(eval));
|
||||||
|
assert(eval.parent || sequence::retired < sequence::get(eval));
|
||||||
|
sequence::committed = !eval.parent?
|
||||||
|
sequence::get(eval):
|
||||||
|
sequence::committed;
|
||||||
|
|
||||||
// Generate post-eval/pre-notify effects. This function may conduct
|
// Generate post-eval/pre-notify effects. This function may conduct
|
||||||
// an entire eval of several more events recursively before returning.
|
// an entire eval of several more events recursively before returning.
|
||||||
if(likely(opts.phase[phase::POST]))
|
if(likely(opts.phase[phase::POST]))
|
||||||
|
@ -793,7 +794,7 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Commit the transaction to database iff this eval is at the stack base.
|
// Commit the transaction to database iff this eval is at the stack base.
|
||||||
if(likely(opts.phase[phase::WRITE]) && !eval.sequence_shared[0])
|
if(likely(opts.phase[phase::WRITE] && !eval.parent))
|
||||||
{
|
{
|
||||||
const scope_restore eval_phase
|
const scope_restore eval_phase
|
||||||
{
|
{
|
||||||
|
@ -805,7 +806,7 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
|
|
||||||
// Wait for sequencing only if this is the stack base, otherwise we'll
|
// Wait for sequencing only if this is the stack base, otherwise we'll
|
||||||
// never return back to that stack base.
|
// never return back to that stack base.
|
||||||
if(likely(!eval.sequence_shared[0]))
|
if(likely(!eval.parent))
|
||||||
{
|
{
|
||||||
const scope_restore eval_phase
|
const scope_restore eval_phase
|
||||||
{
|
{
|
||||||
|
@ -817,9 +818,16 @@ ircd::m::vm::execute_pdu(eval &eval,
|
||||||
return eval::seqnext(sequence::retired) == std::addressof(eval);
|
return eval::seqnext(sequence::retired) == std::addressof(eval);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const auto next
|
||||||
|
{
|
||||||
|
eval::seqnext(eval.sequence)
|
||||||
|
};
|
||||||
|
|
||||||
const auto highest
|
const auto highest
|
||||||
{
|
{
|
||||||
std::max(eval.sequence_shared[1], sequence::get(eval))
|
next?
|
||||||
|
sequence::get(*next):
|
||||||
|
sequence::get(eval)
|
||||||
};
|
};
|
||||||
|
|
||||||
const auto retire
|
const auto retire
|
||||||
|
@ -872,8 +880,6 @@ ircd::m::vm::write_prepare(eval &eval,
|
||||||
if(sequence::get(other) <= sequence::retired)
|
if(sequence::get(other) <= sequence::retired)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
other.sequence_shared[1] = std::max(other.sequence_shared[1], sequence::get(eval));
|
|
||||||
eval.sequence_shared[0] = sequence::get(other);
|
|
||||||
eval.txn = other.txn;
|
eval.txn = other.txn;
|
||||||
return false;
|
return false;
|
||||||
}};
|
}};
|
||||||
|
@ -984,7 +990,7 @@ ircd::m::vm::write_commit(eval &eval)
|
||||||
{
|
{
|
||||||
assert(eval.txn);
|
assert(eval.txn);
|
||||||
assert(eval.txn.use_count() == 1);
|
assert(eval.txn.use_count() == 1);
|
||||||
assert(eval.sequence_shared[0] == 0);
|
assert(!eval.parent);
|
||||||
auto &txn
|
auto &txn
|
||||||
{
|
{
|
||||||
*eval.txn
|
*eval.txn
|
||||||
|
@ -1001,10 +1007,9 @@ ircd::m::vm::write_commit(eval &eval)
|
||||||
|
|
||||||
log::debug
|
log::debug
|
||||||
{
|
{
|
||||||
log, "%s | wrote %lu:%lu | db seq %lu:%lu %zu cells in %zu bytes to events database ...",
|
log, "%s | wrote %lu | db seq %lu:%lu %zu cells in %zu bytes to events database ...",
|
||||||
loghead(eval),
|
loghead(eval),
|
||||||
sequence::get(eval),
|
sequence::get(eval),
|
||||||
eval.sequence_shared[1],
|
|
||||||
db_seq_before,
|
db_seq_before,
|
||||||
db_seq_after,
|
db_seq_after,
|
||||||
txn.size(),
|
txn.size(),
|
||||||
|
|
|
@ -14924,8 +14924,8 @@ console_cmd__vm(opt &out, const string_view &line)
|
||||||
<< std::left << std::setw(24) << "USER" << " "
|
<< std::left << std::setw(24) << "USER" << " "
|
||||||
<< std::right << std::setw(5) << "PDUS" << " "
|
<< std::right << std::setw(5) << "PDUS" << " "
|
||||||
<< std::right << std::setw(5) << "DONE" << " "
|
<< std::right << std::setw(5) << "DONE" << " "
|
||||||
|
<< std::right << std::setw(8) << "PARENT" << " "
|
||||||
<< std::right << std::setw(9) << "SEQUENCE" << " "
|
<< std::right << std::setw(9) << "SEQUENCE" << " "
|
||||||
<< std::right << std::setw(9) << "SEQSHARE" << " "
|
|
||||||
<< std::left << std::setw(4) << "HOOK" << " "
|
<< std::left << std::setw(4) << "HOOK" << " "
|
||||||
<< std::left << std::setw(10) << "PHASE" << " "
|
<< std::left << std::setw(10) << "PHASE" << " "
|
||||||
<< std::right << std::setw(6) << "SIZE" << " "
|
<< std::right << std::setw(6) << "SIZE" << " "
|
||||||
|
@ -14962,8 +14962,8 @@ console_cmd__vm(opt &out, const string_view &line)
|
||||||
<< std::left << std::setw(24) << trunc(eval->opts->node_id?: eval->opts->user_id, 24) << " "
|
<< std::left << std::setw(24) << trunc(eval->opts->node_id?: eval->opts->user_id, 24) << " "
|
||||||
<< std::right << std::setw(5) << eval->pdus.size() << " "
|
<< std::right << std::setw(5) << eval->pdus.size() << " "
|
||||||
<< std::right << std::setw(5) << done << " "
|
<< std::right << std::setw(5) << done << " "
|
||||||
|
<< std::right << std::setw(8) << (eval->parent? eval->parent->id : 0UL) << " "
|
||||||
<< std::right << std::setw(9) << eval->sequence << " "
|
<< std::right << std::setw(9) << eval->sequence << " "
|
||||||
<< std::right << std::setw(9) << std::max(eval->sequence_shared[0], eval->sequence_shared[1]) << " "
|
|
||||||
<< std::right << std::setw(4) << (eval->hook? eval->hook->id(): 0U) << " "
|
<< std::right << std::setw(4) << (eval->hook? eval->hook->id(): 0U) << " "
|
||||||
<< std::left << std::setw(10) << trunc(reflect(eval->phase), 10) << " "
|
<< std::left << std::setw(10) << trunc(reflect(eval->phase), 10) << " "
|
||||||
<< std::right << std::setw(6) << (eval->txn? eval->txn->bytes() : 0UL) << " "
|
<< std::right << std::setw(6) << (eval->txn? eval->txn->bytes() : 0UL) << " "
|
||||||
|
|
Loading…
Reference in a new issue