From e8afa454d8ad51fe07667ecb3498ee5a5f90c6e4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 28 Mar 2013 15:24:33 -0700 Subject: [PATCH] ceph_manager: retry set_pool_property on EAGAIN Retry indefinitely, for now. Signed-off-by: Sage Weil --- teuthology/task/ceph_manager.py | 41 ++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 8 deletions(-) diff --git a/teuthology/task/ceph_manager.py b/teuthology/task/ceph_manager.py index d8a6f8eb5e..3deb9b3d46 100644 --- a/teuthology/task/ceph_manager.py +++ b/teuthology/task/ceph_manager.py @@ -283,6 +283,22 @@ class CephManager: ) return proc.stdout.getvalue() + def raw_cluster_cmd_result(self, *args): + testdir = teuthology.get_testdir(self.ctx) + ceph_args = [ + '{tdir}/enable-coredump'.format(tdir=testdir), + 'ceph-coverage', + '{tdir}/archive/coverage'.format(tdir=testdir), + 'ceph', + '--concise', + ] + ceph_args.extend(args) + proc = self.controller.run( + args=ceph_args, + check_status=False, + ) + return proc.exitstatus + def do_rados(self, remote, cmd): testdir = teuthology.get_testdir(self.ctx) pre = [ @@ -463,14 +479,23 @@ class CephManager: assert isinstance(pool_name, str) assert isinstance(prop, str) assert isinstance(val, int) - self.raw_cluster_cmd( - 'osd', - 'pool', - 'set', - pool_name, - prop, - str(val), - '--allow-experimental-feature') + tries = 0 + while True: + r = self.raw_cluster_cmd_result( + 'osd', + 'pool', + 'set', + pool_name, + prop, + str(val), + '--allow-experimental-feature') + if r != 11: # EAGAIN + break + tries += 1 + if tries > 50: + raise Exception('timed out getting EAGAIN when setting pool property %s %s = %s' % (pool_name, prop, val)) + self.log('got EAGAIN setting pool property, waiting a few seconds...') + time.sleep(2) def expand_pool(self, pool_name, by, max_pgs): with self.lock: -- 2.39.5