Fix write-over-delete failing for the very first entry in dirty_db
Test / buildenv (push) Successful in 12s Details
Test / build (push) Successful in 3m15s Details
Test / make_test (push) Successful in 38s Details
Test / test_cas (push) Successful in 20s Details
Test / test_change_pg_size (push) Successful in 10s Details
Test / test_change_pg_count_ec (push) Successful in 1m4s Details
Test / test_change_pg_count (push) Successful in 1m7s Details
Test / test_create_nomaxid (push) Successful in 8s Details
Test / test_add_osd (push) Successful in 2m28s Details
Test / test_etcd_fail (push) Successful in 1m13s Details
Test / test_interrupted_rebalance_imm (push) Successful in 2m6s Details
Test / test_interrupted_rebalance (push) Successful in 2m22s Details
Test / test_failure_domain (push) Successful in 19s Details
Test / test_interrupted_rebalance_ec_imm (push) Successful in 1m34s Details
Test / test_snapshot (push) Successful in 36s Details
Test / test_interrupted_rebalance_ec (push) Successful in 2m10s Details
Test / test_minsize_1 (push) Successful in 17s Details
Test / test_snapshot_ec (push) Successful in 38s Details
Test / test_rm (push) Successful in 17s Details
Test / test_snapshot_down (push) Failing after 27s Details
Test / test_move_reappear (push) Failing after 53s Details
Test / test_snapshot_down_ec (push) Failing after 27s Details
Test / test_splitbrain (push) Successful in 25s Details
Test / test_snapshot_chain (push) Successful in 2m28s Details
Test / test_snapshot_chain_ec (push) Successful in 2m59s Details
Test / test_rebalance_verify (push) Successful in 3m22s Details
Test / test_rebalance_verify_imm (push) Successful in 3m21s Details
Test / test_write (push) Successful in 42s Details
Test / test_write_xor (push) Successful in 48s Details
Test / test_write_no_same (push) Successful in 14s Details
Test / test_rebalance_verify_ec (push) Successful in 4m41s Details
Test / test_rebalance_verify_ec_imm (push) Successful in 5m8s Details
Test / test_heal_pg_size_2 (push) Successful in 4m17s Details
Test / test_heal_ec (push) Successful in 4m33s Details
Test / test_heal_csum_32k_dmj (push) Successful in 5m23s Details
Test / test_heal_csum_32k_dj (push) Successful in 6m18s Details
Test / test_heal_csum_32k (push) Successful in 6m44s Details
Test / test_heal_csum_4k_dmj (push) Successful in 6m53s Details
Test / test_scrub (push) Successful in 1m11s Details
Test / test_scrub_zero_osd_2 (push) Successful in 1m5s Details
Test / test_scrub_xor (push) Successful in 1m1s Details
Test / test_heal_csum_4k_dj (push) Successful in 6m58s Details
Test / test_scrub_pg_size_6_pg_minsize_4_osd_count_6_ec (push) Successful in 1m2s Details
Test / test_scrub_pg_size_3 (push) Successful in 1m41s Details
Test / test_scrub_ec (push) Successful in 37s Details
Test / test_heal_csum_4k (push) Successful in 6m4s Details

hotfix-1.1.0
Vitaliy Filippov 2023-10-21 16:59:50 +03:00
parent 93dc31f3fc
commit 5066e35a49
1 changed files with 11 additions and 6 deletions

View File

@ -289,13 +289,18 @@ int blockstore_impl_t::dequeue_write(blockstore_op_t *op)
printf("Restoring %lx:%lx version: v%lu -> v%lu\n", op->oid.inode, op->oid.stripe, op->version, PRIV(op)->real_version);
#endif
auto prev_it = dirty_it;
prev_it--;
if (prev_it->first.oid == op->oid && prev_it->first.version >= PRIV(op)->real_version)
if (prev_it != dirty_db.begin())
{
// Original version is still invalid
// All subsequent writes to the same object must be canceled too
cancel_all_writes(op, dirty_it, -EEXIST);
return 2;
prev_it--;
if (prev_it->first.oid == op->oid && prev_it->first.version >= PRIV(op)->real_version)
{
// Original version is still invalid
// All subsequent writes to the same object must be canceled too
printf("Tried to write %lx:%lx v%lu after delete (old version v%lu), but already have v%lu\n",
op->oid.inode, op->oid.stripe, PRIV(op)->real_version, op->version, prev_it->first.version);
cancel_all_writes(op, dirty_it, -EEXIST);
return 2;
}
}
op->version = PRIV(op)->real_version;
PRIV(op)->real_version = 0;