From 1d1f7f18dfbdc46fdb09a96ef973475cd29feef5 Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Thu, 29 Aug 2013 13:06:33 -0700 Subject: rgw: change watch init ordering, don't distribute if can't Backport: dumpling Moving back the watch initialization after the zone init, as the zone info holds the control pool name. Since zone init might need to create a new system object (that needs to distribute cache), don't try to distribute cache if watch is not yet initialized. Reviewed-by: Sage Weil Signed-off-by: Yehuda Sadeh --- src/rgw/rgw_rados.cc | 26 ++++++++++++++++++-------- src/rgw/rgw_rados.h | 2 ++ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 03cc1ebfdb3..05db9bff782 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -875,14 +875,6 @@ int RGWRados::init_complete() { int ret; - if (need_watch_notify()) { - ret = init_watch(); - if (ret < 0) { - lderr(cct) << "ERROR: failed to initialize watch" << dendl; - return ret; - } - } - ret = region.init(cct, this); if (ret < 0) return ret; @@ -920,6 +912,14 @@ int RGWRados::init_complete() } } + if (need_watch_notify()) { + ret = init_watch(); + if (ret < 0) { + lderr(cct) << "ERROR: failed to initialize watch" << dendl; + return ret; + } + } + map::iterator ziter; for (ziter = region.zones.begin(); ziter != region.zones.end(); ++ziter) { const string& name = ziter->first; @@ -1109,6 +1109,8 @@ int RGWRados::init_watch() return r; } + watch_initialized = true; + return 0; } @@ -4903,6 +4905,14 @@ int RGWRados::append_async(rgw_obj& obj, size_t size, bufferlist& bl) int RGWRados::distribute(const string& key, bufferlist& bl) { + /* + * we were called before watch was initialized. This can only happen if we're updating some system + * config object (e.g., zone info) during init. Don't try to distribute the cache info for these + * objects, they're currently only read on startup anyway. + */ + if (!watch_initialized) + return 0; + string notify_oid; pick_control_oid(key, notify_oid); diff --git a/src/rgw/rgw_rados.h b/src/rgw/rgw_rados.h index e6ab244afa9..0da6f4669bf 100644 --- a/src/rgw/rgw_rados.h +++ b/src/rgw/rgw_rados.h @@ -801,6 +801,7 @@ class RGWRados uint64_t *watch_handles; librados::IoCtx root_pool_ctx; // .rgw librados::IoCtx control_pool_ctx; // .rgw.control + bool watch_initialized; Mutex bucket_id_lock; uint64_t max_bucket_id; @@ -864,6 +865,7 @@ public: RGWRados() : lock("rados_timer_lock"), timer(NULL), gc(NULL), use_gc_thread(false), num_watchers(0), watchers(NULL), watch_handles(NULL), + watch_initialized(false), bucket_id_lock("rados_bucket_id"), max_bucket_id(0), cct(NULL), rados(NULL), pools_initialized(false), -- cgit v1.2.1 From b4cf0f2574be701d9efeb88c45ffd3c2004dce2c Mon Sep 17 00:00:00 2001 From: Gary Lowell Date: Tue, 3 Sep 2013 16:10:31 -0700 Subject: v0.68 --- configure.ac | 2 +- debian/changelog | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 6f3cc6a9f5f..4e9cda5e9fe 100644 --- a/configure.ac +++ b/configure.ac @@ -8,7 +8,7 @@ AC_PREREQ(2.59) # VERSION define is not used by the code. It gets a version string # from 'git describe'; see src/ceph_ver.[ch] -AC_INIT([ceph], [0.67], [ceph-devel@vger.kernel.org]) +AC_INIT([ceph], [0.68], [ceph-devel@vger.kernel.org]) # Create release string. Used with VERSION for RPMs. RPM_RELEASE=0 diff --git a/debian/changelog b/debian/changelog index 3203f4271b1..874f85b1500 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +ceph (0.68-1) precise; urgency=low + + * New upstream release + + -- Gary Lowell Tue, 03 Sep 2013 16:10:11 -0700 + ceph (0.67-1) precise; urgency=low * New upstream release -- cgit v1.2.1