self.chance_force_recovery = self.config.get('chance_force_recovery', 0.3)
self.chance_reset_purged_snaps_last = self.config.get('chance_reset_purged_snaps_last', 0.3)
self.chance_trim_stale_osdmaps = self.config.get('chance_trim_stale_osdmaps', 0.3)
+ self.ec_opts_off_then_on = self.config.get('ec_optimizations_off_then_on', False)
num_osds = self.in_osds + self.out_osds
self.max_pgs = self.config.get("max_pgs_per_pool_osd", 1200) * len(num_osds)
self.dump_ops_thread = gevent.spawn(self.do_dump_ops)
if self.noscrub_toggle_delay:
self.noscrub_toggle_thread = gevent.spawn(self.do_noscrub_toggle)
+ if self.ec_opts_off_then_on:
+ # need delay to let some objects be written before enabling opts
+ self.log("ec_opts_off_then_on detected by thrasher")
+ delay = random.uniform(300, 900)
+ self.turn_on_opts_thread = gevent.spawn_later(delay,
+ self.do_enable_ec_opts)
def log(self, msg, *args, **kwargs):
self.logger.info(msg, *args, **kwargs)
if self.noscrub_toggle_delay:
self.log("joining the do_noscrub_toggle greenlet")
self.noscrub_toggle_thread.join()
+ if self.ec_opts_off_then_on:
+ self.log("joining the do_enable_ec_opts greenlet")
+ self.turn_on_opts_thread.join()
def stop_and_join(self):
"""
self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'noscrub')
self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'nodeep-scrub')
+ @log_exc
+ def do_enable_ec_opts(self):
+ """
+ Loop through pools and enable allow_ec_optimizations on
+ any EC pools with optimizations disabled.
+ """
+ for pool in self.ceph_manager.pools:
+ opts_enabled = self.get_pool_property(self, pool, 'allow_ec_optimizations')
+ # Pools with opts enabled will return 'true', non ec pools will return an error
+ if opts_enabled is 'false':
+ set_pool_property(self, pool, 'allow_ec_optimizations', 'true')
+ self.log('Enabled ec optimizations on pool %s' % pool)
+ else:
+ self.log('Unable to enable ec optimizations on pool %s, ignoring' % pool)
+
@log_exc
def _do_thrash(self):
"""