From 95583e1532118b070cfcc548b09007f2368d5eb1 Mon Sep 17 00:00:00 2001 From: Maysam Yabandeh Date: Fri, 15 Dec 2017 16:15:58 -0800 Subject: [PATCH] db_stress: skip snapshot check if cf is dropped Summary: We added a new verification that ensures a value that snapshot reads when is released is the same as when it was created. This test however fails when the cf is dropped in between. The patch skips the tests if that was the case. Closes https://github.com/facebook/rocksdb/pull/3279 Differential Revision: D6581584 Pulled By: maysamyabandeh fbshipit-source-id: afe37d371c0f91818d2e279b3949b810e112e8eb --- tools/db_stress.cc | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/tools/db_stress.cc b/tools/db_stress.cc index b8536f33f..d972bf6da 100644 --- a/tools/db_stress.cc +++ b/tools/db_stress.cc @@ -995,6 +995,8 @@ struct ThreadState { const Snapshot* snapshot; // The cf from which we did a Get at this stapshot int cf_at; + // The name of the cf at the the time that we did a read + std::string cf_at_name; // The key with which we did a Get at this stapshot std::string key; // The status of the Get @@ -1338,20 +1340,25 @@ class StressTest { private: Status AssertSame(DB* db, ColumnFamilyHandle* cf, ThreadState::SnapshotState& snap_state) { + Status s; + if (cf->GetName() != snap_state.cf_at_name) { + return s; + } ReadOptions ropt; ropt.snapshot = snap_state.snapshot; PinnableSlice exp_v(&snap_state.value); exp_v.PinSelf(); - Status s; PinnableSlice v; s = db->Get(ropt, cf, snap_state.key, &v); if (!s.ok() && !s.IsNotFound()) { return s; } if (snap_state.status != s) { - return Status::Corruption("The snapshot gave inconsistent results: (" + - snap_state.status.ToString() + ") vs. (" + - s.ToString() + ")"); + return Status::Corruption( + "The snapshot gave inconsistent results for key " + + ToString(Hash(snap_state.key.c_str(), snap_state.key.size(), 0)) + + " in cf " + cf->GetName() + ": (" + snap_state.status.ToString() + + ") vs. (" + s.ToString() + ")"); } if (s.ok()) { if (exp_v != v) { @@ -1880,8 +1887,9 @@ class StressTest { // will later read the same key before releasing the snapshot and verify // that the results are the same. auto status_at = db_->Get(ropt, column_family, key, &value_at); - ThreadState::SnapshotState snap_state = {snapshot, rand_column_family, - keystr, status_at, value_at}; + ThreadState::SnapshotState snap_state = { + snapshot, rand_column_family, column_family->GetName(), + keystr, status_at, value_at}; thread->snapshot_queue.emplace( std::min(FLAGS_ops_per_thread - 1, i + FLAGS_snapshot_hold_ops), snap_state);