[test] instantiate TsRecoveryITestDeathTest
As it turned out, the parameterized TsRecoveryITestDeathTest was not
instantiated. Digging into the history of changes, I found that [1]
introduced TEST_F --> TEST_P change without adding corresponding
instantiations for the parameterized test suite.
I fixed the test by adapting it for the parameterization it went through
and added the missing instantiation macro. In addition, [2] introduced
an extra DCHECK() into TabletReplica::FinishConsensusOnlyRound(). Once
instantiated, the test started hitting the DCHECK(). To address that
issue, I updated the test-only function AppendNoOpsToLogSync() in
log-test-base.h to fill in the 'noop_request' field along with setting
the 'op_type' field to NO_OP. With that, since I added some extra data
into a NO_OP log record, I also updated the reference size of the WAL
segment in Raft consensus log test.
[1] https://github.com/apache/kudu/commit/371a00b7aeba244aa63d92bf479cbb356b4dfbca
[2] https://github.com/apache/kudu/commit/bc817a44867c586bf4e0539aa564b282c666a49d
Change-Id: Iaf48782ad17ac40023ee94770820d8d403c5cf96
Reviewed-on: http://gerrit.cloudera.org:8080/18920
Tested-by: Kudu Jenkins
Reviewed-by: Yingchun Lai <acelyc1112009@gmail.com>
diff --git a/src/kudu/consensus/log-test-base.h b/src/kudu/consensus/log-test-base.h
index 6692102..6aa1f28 100644
--- a/src/kudu/consensus/log-test-base.h
+++ b/src/kudu/consensus/log-test-base.h
@@ -80,6 +80,7 @@
repl->mutable_id()->CopyFrom(*op_id);
repl->set_op_type(consensus::NO_OP);
+ repl->mutable_noop_request(); // add a no-op request field
repl->set_timestamp(clock->Now().ToUint64());
// Increment op_id.
diff --git a/src/kudu/consensus/log-test.cc b/src/kudu/consensus/log-test.cc
index c1005b1..4ea6e0b 100644
--- a/src/kudu/consensus/log-test.cc
+++ b/src/kudu/consensus/log-test.cc
@@ -467,6 +467,7 @@
ReplicateMsg* repl = log_entry->mutable_replicate();
repl->mutable_id()->CopyFrom(op_id);
repl->set_op_type(NO_OP);
+ repl->mutable_noop_request();
repl->set_timestamp(0L);
// Entries are prefixed with a header.
@@ -1074,7 +1075,7 @@
const int kNumTotalSegments = 5;
const int kNumOpsPerSegment = 5;
- const int64_t kSegmentSizeBytes = 337 + env_->GetEncryptionHeaderSize();
+ const int64_t kSegmentSizeBytes = 352 + env_->GetEncryptionHeaderSize();
OpId op_id = MakeOpId(1, 10);
// Create 5 segments, starting from log index 10, with 5 ops per segment.
// [10-14], [15-19], [20-24], [25-29], [30-34]
diff --git a/src/kudu/integration-tests/ts_recovery-itest.cc b/src/kudu/integration-tests/ts_recovery-itest.cc
index 35b93d8..ea49900 100644
--- a/src/kudu/integration-tests/ts_recovery-itest.cc
+++ b/src/kudu/integration-tests/ts_recovery-itest.cc
@@ -23,6 +23,7 @@
#include <ostream>
#include <string>
#include <thread>
+#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <vector>
@@ -552,12 +553,14 @@
// test scenario isn't present for TSAN builds.
class TsRecoveryITestDeathTest : public TsRecoveryITest {
};
+INSTANTIATE_TEST_SUITE_P(BlockManagerType, TsRecoveryITestDeathTest,
+ ::testing::ValuesIn(BlockManager::block_manager_types()));
// Test that tablet bootstrap can automatically repair itself if it finds an
// overflowed OpId index written to the log caused by KUDU-1933.
// Also serves as a regression itest for KUDU-1933 by writing ops with a high
// term and index.
-TEST_P(TsRecoveryITestDeathTest, TestRecoverFromOpIdOverflow) {
+TEST_P(TsRecoveryITestDeathTest, RecoverFromOpIdOverflow) {
// Create the initial tablet files on disk, then shut down the cluster so we
// can meddle with the WAL.
NO_FATALS(StartClusterOneTs());
@@ -584,6 +587,7 @@
FsManagerOpts opts;
opts.wal_root = ets->wal_dir();
opts.data_roots = ets->data_dirs();
+ opts.block_manager_type = GetParam();
unique_ptr<FsManager> fs_manager(new FsManager(env_, opts));
ASSERT_OK(fs_manager->Open());
scoped_refptr<ConsensusMetadataManager> cmeta_manager(