]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
thrasher: Add noscrub_toggle_delay and flip the noscrub osd flags
authorDavid Zafman <dzafman@redhat.com>
Mon, 11 Apr 2016 23:37:07 +0000 (16:37 -0700)
committerDavid Zafman <dzafman@redhat.com>
Fri, 29 Apr 2016 16:43:39 +0000 (09:43 -0700)
Signed-off-by: David Zafman <dzafman@redhat.com>
tasks/ceph_manager.py
tasks/thrashosds.py

index 39c17faa83e5db80e1b1a5fa963114029a399f2c..ddac2eac6ffa05ab9303344e146f2c122479c1a8 100644 (file)
@@ -106,6 +106,7 @@ class Thrasher:
         self.sighup_delay = self.config.get('sighup_delay')
         self.optrack_toggle_delay = self.config.get('optrack_toggle_delay')
         self.dump_ops_enable = self.config.get('dump_ops_enable')
+        self.noscrub_toggle_delay = self.config.get('noscrub_toggle_delay')
 
         num_osds = self.in_osds + self.out_osds
         self.max_pgs = self.config.get("max_pgs_per_pool_osd", 1200) * num_osds
@@ -135,6 +136,8 @@ class Thrasher:
             self.optrack_toggle_thread = gevent.spawn(self.do_optrack_toggle)
         if self.dump_ops_enable == "true":
             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.config.get('powercycle') or not self.cmd_exists_on_osds("ceph-objectstore-tool"):
             self.ceph_objectstore_tool = False
             self.test_rm_past_intervals = False
@@ -437,6 +440,9 @@ class Thrasher:
         if self.dump_ops_enable == "true":
             self.log("joining the do_dump_ops greenlet")
             self.dump_ops_thread.join()
+        if self.noscrub_toggle_delay:
+            self.log("joining the do_noscrub_toggle greenlet")
+            self.noscrub_toggle_thread.join()
 
     def grow_pool(self):
         """
@@ -704,6 +710,33 @@ class Thrasher:
                                      check_status=False, timeout=30)
             gevent.sleep(0)
 
+    @log_exc
+    def do_noscrub_toggle(self):
+        """
+        Loops and toggle noscrub flags
+
+        Loop delay is controlled by the config value noscrub_toggle_delay.
+        """
+        delay = float(self.noscrub_toggle_delay)
+        scrub_state = "none"
+        self.log("starting do_noscrub_toggle with a delay of {0}".format(delay))
+        while not self.stopping:
+            if scrub_state == "none":
+                self.ceph_manager.raw_cluster_cmd('osd', 'set', 'noscrub')
+                scrub_state = "noscrub"
+            elif scrub_state == "noscrub":
+                self.ceph_manager.raw_cluster_cmd('osd', 'set', 'nodeep-scrub')
+                scrub_state = "both"
+            elif scrub_state == "both":
+                self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'noscrub')
+                scrub_state = "nodeep-scrub"
+            else:
+                self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'nodeep-scrub')
+                scrub_state = "none"
+            gevent.sleep(delay)
+        self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'noscrub')
+        self.ceph_manager.raw_cluster_cmd('osd', 'unset', 'nodeep-scrub')
+
     @log_exc
     def do_thrash(self):
         """
index 9f56fbe7d1a35e52aff0d168f4b2c65d2e2de818..2c278fef7bc0489b68a2bd4c3e0131e45dbf218e 100644 (file)
@@ -105,6 +105,8 @@ def task(ctx, config):
 
     dump_ops_enable: (true) continuously dump ops on all live osds
 
+    noscrub_toggle_delay: (2.0) duration to delay between toggling noscrub
+
     example:
 
     tasks:
@@ -126,6 +128,8 @@ def task(ctx, config):
     config['optrack_toggle_delay'] = config.get('optrack_toggle_delay', 2.0)
     # add default value for dump_ops_enable
     config['dump_ops_enable'] = config.get('dump_ops_enable', "true")
+    # add default value for noscrub_toggle_delay
+    config['noscrub_toggle_delay'] = config.get('noscrub_toggle_delay', 2.0)
     overrides = ctx.config.get('overrides', {})
     teuthology.deep_merge(config, overrides.get('thrashosds', {}))