OPTION(bluestore_fsck_on_mount, OPT_BOOL, false)
OPTION(bluestore_fsck_on_umount, OPT_BOOL, false)
OPTION(bluestore_fsck_on_mkfs, OPT_BOOL, true)
-OPTION(bluestore_sync_transaction, OPT_BOOL, false) // perform kv txn synchronously
-OPTION(bluestore_sync_submit_transaction, OPT_BOOL, false)
+OPTION(bluestore_sync_submit_transaction, OPT_BOOL, false) // submit kv txn in queueing thread (not kv_sync_thread)
OPTION(bluestore_sync_wal_apply, OPT_BOOL, true) // perform initial wal work synchronously (possibly in combination with aio so we only *queue* ios)
OPTION(bluestore_wal_threads, OPT_INT, 4)
OPTION(bluestore_wal_thread_timeout, OPT_INT, 30)
sb->bc.finish_write(txc->seq);
}
txc->shared_blobs_written.clear();
- if (!g_conf->bluestore_sync_transaction) {
- if (g_conf->bluestore_sync_submit_transaction) {
- _txc_finalize_kv(txc, txc->t);
- int r = db->submit_transaction(txc->t);
- assert(r == 0);
- }
- } else {
+ if (g_conf->bluestore_sync_submit_transaction) {
_txc_finalize_kv(txc, txc->t);
- int r = db->submit_transaction_sync(txc->t);
+ txc->kv_submitted = true;
+ int r = db->submit_transaction(txc->t);
assert(r == 0);
}
{
bdev->flush();
uint64_t high_nid = 0, high_blobid = 0;
- if (!g_conf->bluestore_sync_transaction &&
- !g_conf->bluestore_sync_submit_transaction) {
- for (auto txc : kv_committing) {
+ bool any_to_submit = false;
+ for (auto txc : kv_committing) {
+ if (!txc->kv_submitted) {
_txc_finalize_kv(txc, txc->t);
if (txc->last_nid > high_nid) {
high_nid = txc->last_nid;
high_blobid = txc->last_blobid;
}
txc->log_state_latency(logger, l_bluestore_state_kv_queued_lat);
+ any_to_submit = true;
}
- if (!kv_committing.empty()) {
+ }
+ if (any_to_submit) {
+ if (high_nid || high_blobid) {
TransContext *first_txc = kv_committing.front();
std::lock_guard<std::mutex> l(id_lock);
if (high_nid + g_conf->bluestore_nid_prealloc/2 > nid_max) {
}
}
for (auto txc : kv_committing) {
- int r = db->submit_transaction(txc->t);
- assert(r == 0);
+ if (!txc->kv_submitted) {
+ txc->kv_submitted = true;
+ int r = db->submit_transaction(txc->t);
+ assert(r == 0);
+ }
}
}