This is an automated email from the ASF dual-hosted git repository. awong pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kudu.git
commit c033425b3d579591ebb15c75de1f193604b8e95b Author: Andrew Wong <[email protected]> AuthorDate: Tue Jan 7 19:09:51 2020 -0800 KUDU-3011 p4: follow-up to 4619473 This addresses feedback on commit 4619473 left after merging. Change-Id: I6d30b28fec9e3c34060f3ad45f6e34a33d4e9a23 Reviewed-on: http://gerrit.cloudera.org:8080/14990 Reviewed-by: Alexey Serbin <[email protected]> Tested-by: Kudu Jenkins --- .../integration-tests/tablet_server_quiescing-itest.cc | 14 +++++++++++++- src/kudu/integration-tests/test_workload.h | 2 +- src/kudu/tserver/tablet_service.cc | 8 ++++---- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/src/kudu/integration-tests/tablet_server_quiescing-itest.cc b/src/kudu/integration-tests/tablet_server_quiescing-itest.cc index 5c18a71..bf4fcec 100644 --- a/src/kudu/integration-tests/tablet_server_quiescing-itest.cc +++ b/src/kudu/integration-tests/tablet_server_quiescing-itest.cc @@ -51,6 +51,7 @@ DECLARE_bool(catalog_manager_wait_for_new_tablets_to_elect_leader); DECLARE_double(leader_failure_max_missed_heartbeat_periods); DECLARE_int32(consensus_inject_latency_ms_in_notifications); DECLARE_int32(scanner_default_batch_size_bytes); +DECLARE_int32(scanner_ttl_ms); DECLARE_int32(raft_heartbeat_interval_ms); using kudu::client::KuduClient; @@ -374,12 +375,23 @@ TEST_P(TServerQuiescingParamITest, TestScansRetry) { // Now stop quiescing one of the servers. Our scans should succeed. Set a // small batch size so our scanner remains active. FLAGS_scanner_default_batch_size_bytes = 1; + // Make our scanner expire really quickly so we can test that we can keep the + // scanner alive even while the tserver is quiescing. + FLAGS_scanner_ttl_ms = 1000; auto* ts = cluster_->mini_tablet_server(0)->server(); *ts->mutable_quiescing() = false; KuduScanBatch batch; ASSERT_OK(scanner.Open()); ASSERT_OK(scanner.NextBatch(&batch)); - ASSERT_EQ(1, ts->scanner_manager()->CountActiveScanners()); + + // Keep the scanner alive, even as we're quiescing. + const auto past_original_expiration = + MonoTime::Now() + MonoDelta::FromMilliseconds(2 * FLAGS_scanner_ttl_ms); + while (MonoTime::Now() < past_original_expiration) { + ASSERT_EQ(1, ts->scanner_manager()->CountActiveScanners()); + ASSERT_OK(scanner.KeepAlive()); + SleepFor(MonoDelta::FromMilliseconds(10)); + } } INSTANTIATE_TEST_CASE_P(NumReplicas, TServerQuiescingParamITest, ::testing::Values(1, 3)); diff --git a/src/kudu/integration-tests/test_workload.h b/src/kudu/integration-tests/test_workload.h index 1f3eaa9..5afa625 100644 --- a/src/kudu/integration-tests/test_workload.h +++ b/src/kudu/integration-tests/test_workload.h @@ -128,7 +128,7 @@ class TestWorkload { } // Set whether we should attempt to verify the number of rows when scanning. - // This sort of error may be indicative of a stale read. + // An incorrect number of rows may be indicative of a stale read. void set_verify_num_rows(bool should_verify) { verify_num_rows_ = should_verify; } diff --git a/src/kudu/tserver/tablet_service.cc b/src/kudu/tserver/tablet_service.cc index 6b49af3..93c6d9c 100644 --- a/src/kudu/tserver/tablet_service.cc +++ b/src/kudu/tserver/tablet_service.cc @@ -359,8 +359,8 @@ bool GetConsensusOrRespond(const scoped_refptr<TabletReplica>& replica, } template<class RespClass> -bool CheckTabletServerQuiescingOrRespond(const TabletServer* server, RespClass* resp, - rpc::RpcContext* context) { +bool CheckTabletServerNotQuiescingOrRespond(const TabletServer* server, RespClass* resp, + rpc::RpcContext* context) { if (PREDICT_FALSE(server->quiescing())) { Status s = Status::ServiceUnavailable("Tablet server is quiescing"); SetupErrorAndRespond(resp->mutable_error(), s, @@ -1708,7 +1708,7 @@ void TabletServiceImpl::Scan(const ScanRequestPB* req, bool has_more_results = false; TabletServerErrorPB::Code error_code = TabletServerErrorPB::UNKNOWN_ERROR; if (req->has_new_scan_request()) { - if (!CheckTabletServerQuiescingOrRespond(server_, resp, context)) { + if (!CheckTabletServerNotQuiescingOrRespond(server_, resp, context)) { return; } const NewScanRequestPB& scan_pb = req->new_scan_request(); @@ -2022,7 +2022,7 @@ void TabletServiceImpl::Checksum(const ChecksumRequestPB* req, } } if (req->has_new_request()) { - if (!CheckTabletServerQuiescingOrRespond(server_, resp, context)) { + if (!CheckTabletServerNotQuiescingOrRespond(server_, resp, context)) { return; } const NewScanRequestPB& new_req = req->new_request();
