]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: MonClient may hang on pinging monitor forever
authorxie xingguo <xie.xingguo@zte.com.cn>
Mon, 23 May 2016 06:26:41 +0000 (14:26 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Mon, 20 Jun 2016 00:16:16 +0000 (08:16 +0800)
On timedout, WaitUntil() method return a positive ETIMEDOUT error number.
It never returns -ETIMEDOUT.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/mon/MonClient.h
src/test/pybind/test_rados.py

index 4e08ceb6d6c0aca5384aec27cf9189af8e1f3034..ec7f688e585c3637541210f7fcff225a794f688a 100644 (file)
@@ -72,7 +72,7 @@ struct MonClientPinger : public Dispatcher {
     int ret = 0;
     while (!done) {
       ret = ping_recvd_cond.WaitUntil(lock, until);
-      if (ret == -ETIMEDOUT)
+      if (ret == ETIMEDOUT)
         break;
     }
     return ret;
index 03cf2dd7a14dc7b09f3cde4783bf9ba0a07ed2ce..d36c92196afcd9debfe1b9467e0174471d0beb1b 100644 (file)
@@ -143,8 +143,10 @@ class TestRados(object):
         cmd = {'prefix': 'mon dump', 'format':'json'}
         ret, buf, out = self.rados.mon_command(json.dumps(cmd), b'')
         for mon in json.loads(buf.decode('utf8'))['mons']:
-            buf = json.loads(self.rados.ping_monitor(mon['name']))
-            assert buf.get('health')
+            while True:
+                buf = json.loads(self.rados.ping_monitor(mon['name']))
+                if buf.get('health'):
+                    break
 
     def test_create(self):
         self.rados.create_pool('foo')