From: Ryne Li Date: Mon, 10 Oct 2016 19:46:15 +0000 (-0400) Subject: osd: add comfigurable timeout for OSD_OP_WATCH X-Git-Tag: v11.1.0~307^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6fef17b1126403308f9241a70bf5361f61194386;p=ceph.git osd: add comfigurable timeout for OSD_OP_WATCH Signed-off-by: Ryne Li --- diff --git a/src/include/rados.h b/src/include/rados.h index 7525339b1b09..71d5f2702b65 100644 --- a/src/include/rados.h +++ b/src/include/rados.h @@ -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; diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index cd8d91f598c5..c1e92c84701c 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -5481,7 +5481,12 @@ int ReplicatedPG::do_osd_ops(OpContext *ctx, vector& 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) { diff --git a/src/osdc/Objecter.h b/src/osdc/Objecter.h index b0ab51d0ad27..984fb8959fa9 100644 --- a/src/osdc/Objecter.h +++ b/src/osdc/Objecter.h @@ -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,