]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add comfigurable timeout for OSD_OP_WATCH
authorRyne Li <lizhenqiangsnake@gmail.com>
Mon, 10 Oct 2016 19:46:15 +0000 (15:46 -0400)
committerRyne Li <lizhenqiangsnake@gmail.com>
Tue, 11 Oct 2016 20:22:51 +0000 (16:22 -0400)
Signed-off-by: Ryne Li <lizhenqiangsnake@gmail.com>
src/include/rados.h
src/osd/ReplicatedPG.cc
src/osdc/Objecter.h

index 7525339b1b09254a1d95d97dc73f19a29fe30a70..71d5f2702b651684a1945372a4304a768df328ca 100644 (file)
@@ -517,6 +517,7 @@ struct ceph_osd_op {
                        __le64 ver;     /* no longer used */
                        __u8 op;        /* CEPH_OSD_WATCH_OP_* */
                        __u32 gen;      /* registration generation */
+                       __u32 timeout; /* connection timeout */
                } __attribute__ ((packed)) watch;
                struct {
                        __le64 cookie;
index cd8d91f598c5719b0cb59f78d5b77c2ac0602c1e..c1e92c84701c272966a44c06ed762f4c7f60d337 100644 (file)
@@ -5481,7 +5481,12 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector<OSDOp>& ops)
        dout(10) << "watch: peer_addr="
          << ctx->op->get_req()->get_connection()->get_peer_addr() << dendl;
 
-       watch_info_t w(cookie, cct->_conf->osd_client_watch_timeout,
+       uint32_t timeout = cct->_conf->osd_client_watch_timeout;
+       if (op.watch.timeout != 0) {
+         timeout = op.watch.timeout;
+       }
+
+       watch_info_t w(cookie, timeout,
          ctx->op->get_req()->get_connection()->get_peer_addr());
        if (op.watch.op == CEPH_OSD_WATCH_OP_WATCH ||
            op.watch.op == CEPH_OSD_WATCH_OP_LEGACY_WATCH) {
index b0ab51d0ad27dd7dcad65ce704b136d3dd07d547..984fb8959fa996584b4b860d0b1feb264d17c29b 100644 (file)
@@ -922,10 +922,11 @@ struct ObjectOperation {
   }
 
   // watch/notify
-  void watch(uint64_t cookie, __u8 op) {
+  void watch(uint64_t cookie, __u8 op, uint32_t timeout = 0) {
     OSDOp& osd_op = add_op(CEPH_OSD_OP_WATCH);
     osd_op.op.watch.cookie = cookie;
     osd_op.op.watch.op = op;
+    osd_op.op.watch.timeout = timeout;
   }
 
   void notify(uint64_t cookie, uint32_t prot_ver, uint32_t timeout,