This is an automated email from the ASF dual-hosted git repository.

alexey pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git

commit 110352d0163fa390ac25f4d69232886f84fb85dd
Author: Alexey Serbin <[email protected]>
AuthorDate: Mon Mar 24 13:45:19 2025 -0700

    KUDU-3653 fix flaky test in ts_tablet_manager-test
    
    Before this patch, the TestCreateAndDifferentModeDeleteMetrics scenario
    of TestCreateAndDeleteMetrics in ts_tablet_manager-test would usually
    fail once in every 30 runs.  With this patch, not a single failure
    has been detected in more than 500 runs of the test scenario.
    
    Change-Id: Iec7832d24e94247b0788c6eca7c85deedce54e4e
    Reviewed-on: http://gerrit.cloudera.org:8080/22659
    Tested-by: Alexey Serbin <[email protected]>
    Reviewed-by: Yifan Zhang <[email protected]>
---
 src/kudu/tserver/ts_tablet_manager-test.cc | 33 ++++++++++++++++--------------
 1 file changed, 18 insertions(+), 15 deletions(-)

diff --git a/src/kudu/tserver/ts_tablet_manager-test.cc 
b/src/kudu/tserver/ts_tablet_manager-test.cc
index a3bf78889..930729f2f 100644
--- a/src/kudu/tserver/ts_tablet_manager-test.cc
+++ b/src/kudu/tserver/ts_tablet_manager-test.cc
@@ -198,28 +198,31 @@ INSTANTIATE_TEST_SUITE_P(Params, 
TestCreateAndDeleteMetrics,
                                            
TabletDataState::TABLET_DATA_TOMBSTONED));
 
 TEST_P(TestCreateAndDeleteMetrics, TestCreateAndDifferentModeDeleteMetrics) {
-  TabletDataState data_state = GetParam();
-  scoped_refptr<Histogram> create_tablet_run_time =
-    
METRIC_create_tablet_run_time.Instantiate(mini_server_->server()->metric_entity());
-  ASSERT_EQ(0, create_tablet_run_time->TotalCount());
-
-  scoped_refptr<Histogram> delete_tablet_run_time =
-    
METRIC_delete_tablet_run_time.Instantiate(mini_server_->server()->metric_entity());
-  ASSERT_EQ(0, delete_tablet_run_time->TotalCount());
-
-  string test_tablet = "ffffffffffffffffffffffffffffffff";
+  static const string kTestTablet = "ffffffffffffffffffffffffffffffff";
+  const TabletDataState data_state = GetParam();
   scoped_refptr<TabletReplica> test_replica;
 
+  scoped_refptr<Histogram> create_tablet_run_time =
+      
METRIC_create_tablet_run_time.Instantiate(mini_server_->server()->metric_entity());
+  ASSERT_EQ(0, create_tablet_run_time->TotalCount());
   // Create a new tablet.
-  ASSERT_OK(CreateNewTablet(test_tablet, schema_, true, nullopt, nullopt, 
&test_replica));
-  ASSERT_EQ(test_tablet, test_replica->tablet()->tablet_id());
+  ASSERT_OK(CreateNewTablet(kTestTablet, schema_, true, nullopt, nullopt, 
&test_replica));
+  ASSERT_EQ(kTestTablet, test_replica->tablet()->tablet_id());
   // Metrics should be incremented.
   ASSERT_EQ(1, create_tablet_run_time->TotalCount());
 
+  // Wait for the tablet state transition to complete, otherwise there will be
+  // an error reported by 
TSTabletManager::StartTabletStateTransitionUnlocked().
+  ASSERT_EVENTUALLY([&] () {
+    ASSERT_OK(tablet_manager_->WaitForNoTransitionsForTests(
+        MonoDelta::FromSeconds(1)));
+  });
+
+  scoped_refptr<Histogram> delete_tablet_run_time =
+      
METRIC_delete_tablet_run_time.Instantiate(mini_server_->server()->metric_entity());
   ASSERT_EQ(0, delete_tablet_run_time->TotalCount());
-  ASSERT_OK(tablet_manager_->DeleteTablet(test_tablet,
-                                          data_state,
-                                          nullopt));
+  // Delete the newly created tablet.
+  ASSERT_OK(tablet_manager_->DeleteTablet(kTestTablet, data_state, nullopt));
   // Metrics should be incremented.
   ASSERT_EQ(1, delete_tablet_run_time->TotalCount());
 }

Reply via email to