Store v2: Wait for fsyncs submitted by other operations before completing a sync #107
Open
koolkhel
wants to merge 1 commits from
koolkhel/vitastor:v2-chaos-105267292 into master
pull from: koolkhel/vitastor:v2-chaos-105267292
merge into: vitalif:master
vitalif:master
vitalif:fatal-error-hook
vitalif:primary-stickiness
vitalif:libvfn
vitalif:canceling
vitalif:immediate-repeering
vitalif:rdma-close-tcp
vitalif:use-degraded-writes
vitalif:fix-write-delete-flow
vitalif:openssl-3.0.12
vitalif:openssl-capture-secrets
vitalif:ignore-small-rdma-end
vitalif:encrypt-batch
vitalif:faster-peering-calc
vitalif:http-hello
vitalif:xxh3-bench
vitalif:create-user-etcd-based
vitalif:aesxts_streaming_nosupport
vitalif:refactor-heap-continue-write
vitalif:ston3lu-patch-0127
vitalif:rdma-credits
vitalif:heap-meta
vitalif:sendmsg-zc-no-more-error
vitalif:fix-clear-refs
vitalif:veeam-trick
vitalif:test-etcd-schizo
vitalif:test
vitalif:test1
vitalif:test2
vitalif:cow-meta
vitalif:kv-readahead
vitalif:qemu-fix-crash-idea
vitalif:eventloop-auto-init-trigger
vitalif:hugo-docs
vitalif:node-mutex-and-postpone
vitalif:check-writeback
vitalif:msgr-iothreads-v2
vitalif:antietcd
vitalif:rel-1.4
vitalif:test-fix-ec-unknown-state-51
vitalif:kv-update
vitalif:kv-debug
vitalif:hotfix-1.2.0
vitalif:rdma-simple-nodp
vitalif:zerocopy-tcp-send
vitalif:csi-staging
vitalif:hotfix-1.1.0
vitalif:hotfix-1.0.0
vitalif:fsync-feedback
vitalif:cached-reads
vitalif:qemu-send-loop
vitalif:test-double-alloc
vitalif:hier-failure-domains
vitalif:mon-self-restart
vitalif:epoch-deletions
vitalif:rdma-flow-control
vitalif:csi-use-vitastor-cli
vitalif:rdma-v2
vitalif:etcd-hide-base64
vitalif:lrc-matrix
vitalif:rm-left-on-dead
vitalif:nfs-proxy-old
vitalif:non-odp-rdma
vitalif:test-zctr
vitalif:separate-data-connections
vitalif:sec_osd_msgr
vitalif:test-assert
vitalif:nbd-vmsplice
vitalif:allow-etcd-address-option
vitalif:rdma-zerocopy
vitalif:rel-0.5
vitalif:openonload
vitalif:sync-io-test
vitalif:trace-sync
vitalif:trace-sqes
vitalif:test-submit-and-wait
vitalif:test-sq-poll
vitalif:blocking-uring-test
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "koolkhel/vitastor:v2-chaos-105267292"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Description
do_sync()returned at once when nothing was left unsynced, but these counters are reset when an fsync is submitted, not when it completes. So a stabilize or rollback whose metadata block was written before another operation submitted its fsync completed before that fsync did, and a power outage could undo it:test_blockstore_chaos --seed 105267292sees a rolled back version come back.Wait until everything completed is fsynced instead. A waiting sync still counts as unfinished, so that the next one doesn't overtake it and have its pending fsyncs reset.
Tested:
test_blockstore: newtest_rollback_waits_for_inflight_fsync(fails on master, the rollback completes while the fsync is held)test_blockstore_chaos --seed 105267292passestest_blockstore_chaos: the default 200-seed sweep, and earlier 1200 seeds (--seeds 1-48 --random 1152), all passContributor Name
Yury Luneff (MIND Software LLC, https://mindsw.io)
CLA
@@ -107,6 +107,16 @@ int blockstore_impl_t::do_sync(blockstore_op_t *op, int base_state)}if (!has_unsynced()){if ((!dsk.disable_meta_fsync || !dsk.disable_journal_fsync) &&тут точно обе правки нужны? выглядит как будто то ли два разных кейса поправлено, то ли один, но двумя способами. верхней правки не хватит ли?
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.