Transaction &t)
{
LOG_PREFIX(TransactionManager::submit_transaction);
- size_t projected_usage = t.get_allocation_size();
- DEBUGT("waiting for projected_usage: {}", t, projected_usage);
return trans_intr::make_interruptible(
- segment_cleaner->reserve_projected_usage(projected_usage)
- ).then_interruptible([this, &t] {
- return submit_transaction_direct(t);
- }).finally([this, FNAME, projected_usage, &t] {
- DEBUGT("releasing projected_usage: {}", t, projected_usage);
- segment_cleaner->release_projected_usage(projected_usage);
+ t.get_handle().enter(write_pipeline.reserve_projected_usage)
+ ).then_interruptible([this, FNAME, &t] {
+ size_t projected_usage = t.get_allocation_size();
+ DEBUGT("waiting for projected_usage: {}", t, projected_usage);
+ return trans_intr::make_interruptible(
+ segment_cleaner->reserve_projected_usage(projected_usage)
+ ).then_interruptible([this, &t] {
+ return submit_transaction_direct(t);
+ }).finally([this, FNAME, projected_usage, &t] {
+ DEBUGT("releasing projected_usage: {}", t, projected_usage);
+ segment_cleaner->release_projected_usage(projected_usage);
+ });
});
}
LOG_PREFIX(TransactionManager::submit_transaction_direct);
DEBUGT("about to alloc delayed extents", tref);
- return epm->delayed_alloc_or_ool_write(tref)
- .handle_error_interruptible(
- crimson::ct_error::input_output_error::pass_further(),
- crimson::ct_error::assert_all("invalid error")
- ).si_then([&tref, this] {
- LOG_PREFIX(TransactionManager::submit_transaction_direct);
+ return trans_intr::make_interruptible(
+ tref.get_handle().enter(write_pipeline.ool_writes)
+ ).then_interruptible([this, &tref] {
+ return epm->delayed_alloc_or_ool_write(tref
+ ).handle_error_interruptible(
+ crimson::ct_error::input_output_error::pass_further(),
+ crimson::ct_error::assert_all("invalid error")
+ );
+ }).si_then([this, FNAME, &tref] {
DEBUGT("about to prepare", tref);
return tref.get_handle().enter(write_pipeline.prepare);
}).si_then([this, FNAME, &tref]() mutable