@@ -46,6 +46,8 @@ def __init__(self, archive_dir, cluster, config):
4646 self .use_existing_volumes = config .get ('use_existing_volumes' , False )
4747 self .pool_name = config .get ("poolname" , "cbt-librbdfio" )
4848 self .recov_pool_name = config .get ("recov_pool_name" , "cbt-librbdfio-recov" )
49+ self .scrub_pool_name = config .get ("scrub_pool_name" , "cbt-librbdfio-scrub" )
50+ self .scrub_pool_profile = config .get ("scrub_pool_profile" , "default" )
4951 self .rbdname = config .get ('rbdname' , '' )
5052
5153 self .total_procs = self .procs_per_volume * self .volumes_per_client * len (settings .getnodes ('clients' ).split (',' ))
@@ -80,6 +82,9 @@ def initialize(self):
8082
8183 common .sync_files ('%s/*' % self .run_dir , self .out_dir )
8284
85+ if 'scrubbing_test' in self .cluster .config :
86+ self .mkscrubimage ()
87+
8388 # Create the recovery image based on test type requested
8489 if 'recovery_test' in self .cluster .config and self .recov_test_type == 'background' :
8590 self .mkrecovimage ()
@@ -128,6 +133,11 @@ def run(self):
128133 # Wait for a signal from the recovery thread to initiate client IO
129134 self .cluster .wait_start_io ()
130135
136+ if 'scrubbing_test' in self .cluster .config :
137+ scrubbing_callback = self .scrubbing_callback
138+ self .cluster .create_scrub_test (self .run_dir , scrubbing_callback )
139+ self .cluster .wait_start_io ()
140+
131141 monitoring .start (self .run_dir )
132142
133143 logger .info ('Running rbd fio %s test.' , self .mode )
@@ -210,6 +220,18 @@ def mkrecovimage(self):
210220 self .cluster .mkimage ('cbt-librbdfio-recov-%s-%d' % (node ,volnum ), self .vol_size , self .recov_pool_name , self .data_pool , self .vol_object_size )
211221 monitoring .stop ()
212222
223+ def mkscrubimage (self ):
224+ logger .info ('Creating scrubbing image...' )
225+ monitoring .start ("%s/scrub_pool_monitoring" % self .run_dir )
226+ if (self .use_existing_volumes == False ):
227+ self .cluster .rmpool (self .scrub_pool_name , self .scrub_pool_profile )
228+ self .cluster .mkpool (self .scrub_pool_name , self .scrub_pool_profile , 'rbd' )
229+ for node in common .get_fqdn_list ('clients' ):
230+ for volnum in range (0 , self .volumes_per_client ):
231+ node = node .rpartition ("@" )[2 ]
232+ self .cluster .mkimage ('cbt-librbdfio-scrub-%s-%d' % (node ,volnum ), self .vol_size , self .scrub_pool_name , self .data_pool , self .vol_object_size )
233+ monitoring .stop ()
234+
213235 def mkimages (self ):
214236 monitoring .start ("%s/pool_monitoring" % self .run_dir )
215237 if (self .use_existing_volumes == False ):
@@ -231,6 +253,9 @@ def recovery_callback_blocking(self):
231253 def recovery_callback_background (self ):
232254 logger .info ('Recovery thread completed!' )
233255
256+ def scrubbing_callback (self ):
257+ logger .info ('Scrubbing thread completed!' )
258+
234259 def parse (self , out_dir ):
235260 for client in settings .getnodes ('clients' ).split (',' ):
236261 host = settings .host_info (client )["host" ]
0 commit comments