@@ -109,6 +109,9 @@ public void setUp() throws IOException {
109109
110110 @ AfterEach
111111 public void destroyDbStore () throws Exception {
112+ if (scmSafeModeManager != null ) {
113+ scmSafeModeManager .getSafeModeMetrics ().unRegister ();
114+ }
112115 if (scmMetadataStore .getStore () != null ) {
113116 scmMetadataStore .getStore ().close ();
114117 }
@@ -136,6 +139,7 @@ private void testSafeMode(int numContainers) throws Exception {
136139 scmSafeModeManager .start ();
137140
138141 assertTrue (scmSafeModeManager .getInSafeMode ());
142+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
139143 validateRuleStatus ("DatanodeSafeModeRule" , "registered datanodes 0" );
140144 SCMDatanodeProtocolServer .NodeRegistrationContainerReport nodeRegistrationContainerReport =
141145 HddsTestUtils .createNodeRegistrationContainerReport (containers );
@@ -151,6 +155,9 @@ private void testSafeMode(int numContainers) throws Exception {
151155
152156 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
153157 100 , 1000 * 5 );
158+ GenericTestUtils .waitFor (() ->
159+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
160+ 100 , 1000 * 5 );
154161
155162 assertEquals (cutOff , scmSafeModeManager .getSafeModeMetrics ()
156163 .getCurrentContainersWithOneReplicaReportedCount ().value ());
@@ -182,6 +189,7 @@ public void testSafeModeExitRule() throws Exception {
182189 .getNumContainerWithOneReplicaReportedThreshold ().value ());
183190
184191 assertTrue (scmSafeModeManager .getInSafeMode ());
192+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
185193 validateRuleStatus ("ContainerSafeModeRule" ,
186194 "0.00% of [Ratis] Containers(0 / 100) with at least one reported" );
187195 testContainerThreshold (containers .subList (0 , 25 ), 0.25 );
@@ -202,6 +210,9 @@ public void testSafeModeExitRule() throws Exception {
202210
203211 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
204212 100 , 1000 * 5 );
213+ GenericTestUtils .waitFor (() ->
214+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
215+ 100 , 1000 * 5 );
205216 }
206217
207218 private OzoneConfiguration createConf (double healthyPercent ,
@@ -306,6 +317,7 @@ public void testSafeModeExitRuleWithPipelineAvailabilityCheck(
306317 scmSafeModeManager .start ();
307318
308319 assertTrue (scmSafeModeManager .getInSafeMode ());
320+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
309321 if (healthyPipelinePercent > 0 ) {
310322 validateRuleStatus ("HealthyPipelineSafeModeRule" ,
311323 "healthy Ratis/THREE pipelines" );
@@ -367,6 +379,9 @@ public void testSafeModeExitRuleWithPipelineAvailabilityCheck(
367379
368380 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
369381 100 , 1000 * 5 );
382+ GenericTestUtils .waitFor (() ->
383+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
384+ 100 , 1000 * 5 );
370385 }
371386
372387 /**
@@ -477,8 +492,10 @@ public void testContainerSafeModeRule() throws Exception {
477492
478493 scmSafeModeManager = new SCMSafeModeManager (config , null , null ,
479494 containerManager , serviceManager , queue , scmContext );
495+ scmSafeModeManager .start ();
480496
481497 assertTrue (scmSafeModeManager .getInSafeMode ());
498+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
482499
483500 // When 10 CLOSED containers are reported by DNs, the computed container
484501 // threshold should be 10/20 as there are only 20 CLOSED NON-EMPTY
@@ -494,6 +511,9 @@ public void testContainerSafeModeRule() throws Exception {
494511
495512 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
496513 100 , 1000 * 5 );
514+ GenericTestUtils .waitFor (() ->
515+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
516+ 100 , 1000 * 5 );
497517 }
498518
499519 // We simulate common EC types: EC-2-2-1024K, EC-3-2-1024K, EC-6-3-1024K.
@@ -584,6 +604,7 @@ private void testSafeModeDataNodes(int numOfDns) throws Exception {
584604
585605 // Assert SCM is in Safe mode.
586606 assertTrue (scmSafeModeManager .getInSafeMode ());
607+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
587608
588609 // Register all DataNodes except last one and assert SCM is in safe mode.
589610 for (int i = 0 ; i < numOfDns - 1 ; i ++) {
@@ -606,6 +627,9 @@ private void testSafeModeDataNodes(int numOfDns) throws Exception {
606627 HddsTestUtils .createNodeRegistrationContainerReport (containers ));
607628 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
608629 10 , 1000 * 10 );
630+ GenericTestUtils .waitFor (() ->
631+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
632+ 100 , 1000 * 5 );
609633 }
610634
611635 private void testContainerThreshold (List <ContainerInfo > dnContainers ,
@@ -700,11 +724,15 @@ public void testSafeModePipelineExitRule() throws Exception {
700724
701725
702726 assertTrue (scmSafeModeManager .getInSafeMode ());
727+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
703728
704729 firePipelineEvent (pipelineManager , pipeline );
705730
706731 GenericTestUtils .waitFor (() -> !scmSafeModeManager .getInSafeMode (),
707732 100 , 1000 * 10 );
733+ GenericTestUtils .waitFor (() ->
734+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
735+ 100 , 1000 * 5 );
708736 pipelineManager .close ();
709737 }
710738
@@ -744,6 +772,7 @@ public void testPipelinesNotCreatedUntilPreCheckPasses() throws Exception {
744772
745773 // Assert SCM is in Safe mode.
746774 assertTrue (scmSafeModeManager .getInSafeMode ());
775+ assertEquals (1 , scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value ());
747776
748777 // stop background pipeline creator as we manually create
749778 // pipeline below
@@ -781,5 +810,8 @@ public void testPipelinesNotCreatedUntilPreCheckPasses() throws Exception {
781810 queue .processAll (5000 );
782811 assertTrue (scmSafeModeManager .getPreCheckComplete ());
783812 assertFalse (scmSafeModeManager .getInSafeMode ());
813+ GenericTestUtils .waitFor (() ->
814+ scmSafeModeManager .getSafeModeMetrics ().getScmInSafeMode ().value () == 0 ,
815+ 100 , 1000 * 5 );
784816 }
785817}
0 commit comments