11"""
22 (C) Copyright 2020-2023 Intel Corporation.
3- (C) Copyright 2025 Hewlett Packard Enterprise Development LP
3+ (C) Copyright 2025-2026 Hewlett Packard Enterprise Development LP
44
55 SPDX-License-Identifier: BSD-2-Clause-Patent
66"""
@@ -48,6 +48,12 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
4848 operations.
4949 num_ranks (int): Number of ranks to drain. Defaults to 1.
5050 """
51+ # Figure out an additional unique rank to stop during rebuild.
52+ # Used when self.test_during_rebuild is True
53+ all_ranks = list (map (str , self .server_managers [0 ].ranks .keys ()))
54+ all_exclude_ranks = ',' .join (ranks ).split (',' )
55+ rank_during_rebuild = self .random .choice (list (set (all_ranks ) - set (all_exclude_ranks )))
56+
5157 # Create 'num_pool' number of pools
5258 pools = []
5359 if oclass is None :
@@ -82,7 +88,7 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
8288 if self .test_during_aggregation is True :
8389 self .run_ior_thread ("Write" , oclass , test_seq )
8490
85- self .pool = self .random .choice (pools ) # nosec
91+ self .pool = self .random .choice (pools )
8692 for loop in range (0 , self .loop_test_cnt ):
8793 self .log .info (
8894 "==> (Loop %s/%s) Excluding ranks %s from %s" ,
@@ -95,8 +101,8 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
95101 initial_free_space = self .pool .get_total_free_space (refresh = True )
96102 if server_boot is False :
97103 if (self .test_during_rebuild is True and index == 0 ):
98- # Exclude rank 5
99- output = self .pool .exclude ("5" )
104+ # Exclude an additional rank
105+ output = self .pool .exclude (rank_during_rebuild )
100106 self .print_and_assert_on_rebuild_failure (output )
101107 if self .test_during_aggregation is True :
102108 self .delete_extra_container (self .pool )
@@ -115,10 +121,9 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
115121 output = self .dmg_command .system_stop (ranks = rank , force = True )
116122 self .print_and_assert_on_rebuild_failure (output )
117123 output = self .dmg_command .system_start (ranks = rank )
118- # Just try to reintegrate rank 5
124+ # Just try to reintegrate the additional rank
119125 if (self .test_during_rebuild is True and index == 2 ):
120- # Reintegrate rank 5
121- output = self .pool .reintegrate ("5" )
126+ output = self .pool .reintegrate (rank_during_rebuild )
122127 self .print_and_assert_on_rebuild_failure (output )
123128
124129 pver_exclude = self .pool .get_version (True )
@@ -127,10 +132,12 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
127132 # Check pool version incremented after pool exclude
128133 # pver_exclude should be greater than
129134 # pver_begin + 1 (1 target + exclude)
130- self .assertTrue (pver_exclude > (pver_begin + 1 ),
131- "Pool Version Error: After exclude" )
132- self .assertTrue (initial_free_space > free_space_after_exclude ,
133- "Expected free space after exclude is less than initial" )
135+ if not pver_exclude > (pver_begin + 1 ):
136+ self .fail (f"Pool version after exclude: { pver_exclude } !> { pver_begin + 1 } " )
137+ if not initial_free_space > free_space_after_exclude :
138+ self .fail (
139+ "Expected free space after exclude: "
140+ f"{ initial_free_space } !> { free_space_after_exclude } " )
134141
135142 # Reintegrate the ranks which was excluded
136143 self .log .info (
@@ -154,12 +161,14 @@ def run_offline_reintegration_test(self, num_pool, ranks, data=False, server_boo
154161 free_space_after_reintegration = self .pool .get_total_free_space (refresh = True )
155162 pver_reint = self .pool .get_version (True )
156163 self .log .info ("Pool Version after reintegrate %d" , pver_reint )
157- # Check pool version incremented after pool reintegrate
158- self .assertTrue (pver_reint > pver_exclude , "Pool Version Error: After reintegrate" )
159- self .assertTrue (free_space_after_reintegration > free_space_after_exclude ,
160- "Expected free space after reintegration is less than exclude" )
161-
162- display_string = "{} space at the End" .format (str (self .pool ))
164+ if not pver_reint > pver_exclude :
165+ self .fail (f"Pool version after reintegrate: { pver_reint } !> { pver_exclude } " )
166+ if not free_space_after_reintegration > free_space_after_exclude :
167+ self .fail (
168+ "Expected free space after reintegrate: "
169+ f"{ free_space_after_reintegration } !> { free_space_after_exclude } " )
170+
171+ display_string = f"{ str (self .pool )} space at the End"
163172 self .pool .display_pool_daos_space (display_string )
164173
165174 # Finally check whether the written data can be accessed.
0 commit comments