}
BlueStore::TransContext *BlueStore::_txc_create(
- Collection *c, OpSequencer *osr)
+ Collection *c, OpSequencer *osr,
+ list<Context*> *on_commits)
{
- TransContext *txc = new TransContext(cct, c, osr);
+ TransContext *txc = new TransContext(cct, c, osr, on_commits);
txc->t = db->get_transaction();
osr->queue_new(txc);
dout(20) << __func__ << " osr " << osr << " = " << txc
r = -EIO;
goto out;
}
- TransContext *txc = _txc_create(ch.get(), osr);
+ TransContext *txc = _txc_create(ch.get(), osr, nullptr);
txc->deferred_txn = deferred_txn;
txc->state = TransContext::STATE_KV_DONE;
_txc_state_proc(txc);
dout(10) << __func__ << " ch " << c << " " << c->cid << dendl;
// prepare
- TransContext *txc = _txc_create(static_cast<Collection*>(ch.get()), osr);
- txc->oncommits.swap(on_commit);
+ TransContext *txc = _txc_create(static_cast<Collection*>(ch.get()), osr,
+ &on_commit);
for (vector<Transaction>::iterator p = tls.begin(); p != tls.end(); ++p) {
txc->bytes += (*p).get_num_bytes();
uint64_t last_nid = 0; ///< if non-zero, highest new nid we allocated
uint64_t last_blobid = 0; ///< if non-zero, highest new blobid we allocated
- explicit TransContext(CephContext* cct, Collection *c, OpSequencer *o)
+ explicit TransContext(CephContext* cct, Collection *c, OpSequencer *o,
+ list<Context*> *on_commits)
: ch(c),
osr(o),
ioc(cct, this),
start(ceph_clock_now()) {
last_stamp = start;
+ if (on_commits) {
+ oncommits.swap(*on_commits);
+ }
}
~TransContext() {
delete deferred_txn;
template <int LogLevelV = 30> void _dump_extent_map(ExtentMap& em);
template <int LogLevelV = 30> void _dump_transaction(Transaction *t);
- TransContext *_txc_create(Collection *c, OpSequencer *osr);
+ TransContext *_txc_create(Collection *c, OpSequencer *osr,
+ list<Context*> *on_commits);
void _txc_update_store_statfs(TransContext *txc);
void _txc_add_transaction(TransContext *txc, Transaction *t);
void _txc_calc_cost(TransContext *txc);