diff options
author | Josh Durgin <josh.durgin@inktank.com> | 2013-01-02 12:32:33 -0800 |
---|---|---|
committer | Josh Durgin <josh.durgin@inktank.com> | 2013-01-02 12:32:33 -0800 |
commit | e0858fa89903cf4055889c405f17515504e917a0 (patch) | |
tree | b82ca7636ce4b059cd576ae6745965cce43bd325 | |
parent | 82297706da549e2e7451eed45b7f449958b6a10b (diff) | |
download | ceph-e0858fa89903cf4055889c405f17515504e917a0.tar.gz |
Revert "librbd: ensure header is up to date after initial read"
Using assert version for linger ops doesn't work with retries,
since the version will change after the first send.
This reverts commit e1776809031c6dad441cfb2b9fac9612720b9083.
Conflicts:
qa/workunits/rbd/watch_correct_version.sh
-rwxr-xr-x | qa/workunits/rbd/watch_correct_version.sh | 31 | ||||
-rw-r--r-- | src/librbd/ImageCtx.cc | 16 | ||||
-rw-r--r-- | src/librbd/ImageCtx.h | 2 | ||||
-rw-r--r-- | src/librbd/internal.cc | 2 |
4 files changed, 1 insertions, 50 deletions
diff --git a/qa/workunits/rbd/watch_correct_version.sh b/qa/workunits/rbd/watch_correct_version.sh deleted file mode 100755 index 602cf619b67..00000000000 --- a/qa/workunits/rbd/watch_correct_version.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -ex - -resize_image() { - for i in $(seq 1 1000) - do - rbd resize --size $i test - done -} - -rm -f test.exported || true -rbd rm test || true -rbd create -s 1 --order 25 test -resize_image & - -for i in $(seq 1 1000) -do - rbd export test test.exported --debug-rbd 20 2>export.log - rm -f test.exported - MATCHED=`cat export.log | tr -d '\n' | (grep -c 'watching header object returned -34.*watching header object returned 0' || true)` - rm -f export.log - if [ "$MATCHED" == "1" ] - then - echo OK - exit 0 - fi -done -rbd rm test - -echo "No race detected" -echo OK -exit 0 diff --git a/src/librbd/ImageCtx.cc b/src/librbd/ImageCtx.cc index 80f19d23550..7a44a6a53e8 100644 --- a/src/librbd/ImageCtx.cc +++ b/src/librbd/ImageCtx.cc @@ -39,7 +39,6 @@ namespace librbd { wctx(NULL), refresh_seq(0), last_refresh(0), - last_header_version(0), md_lock("librbd::ImageCtx::md_lock"), cache_lock("librbd::ImageCtx::cache_lock"), snap_lock("librbd::ImageCtx::snap_lock"), @@ -556,20 +555,7 @@ namespace librbd { int ImageCtx::register_watch() { assert(!wctx); wctx = new WatchCtx(this); - - int r = 0; - do { - md_lock.Lock(); - if (r == -ERANGE) - ictx_refresh(this); - uint64_t last_read = last_header_version; - md_lock.Unlock(); - - md_ctx.set_assert_version(last_read); - r = md_ctx.watch(header_oid, 0, &(wctx->cookie), wctx); - ldout(cct, 20) << "watching header object returned " << r << dendl; - } while (r == -ERANGE); - return r; + return md_ctx.watch(header_oid, 0, &(wctx->cookie), wctx); } void ImageCtx::unregister_watch() { diff --git a/src/librbd/ImageCtx.h b/src/librbd/ImageCtx.h index bd0ba87862c..ed03846fcde 100644 --- a/src/librbd/ImageCtx.h +++ b/src/librbd/ImageCtx.h @@ -54,8 +54,6 @@ namespace librbd { WatchCtx *wctx; int refresh_seq; ///< sequence for refresh requests int last_refresh; ///< last completed refresh - uint64_t last_header_version; ///< last version of the header object - ///< read from librados /** * Lock ordering: diff --git a/src/librbd/internal.cc b/src/librbd/internal.cc index ee8966cb40e..b69e40bbbdb 100644 --- a/src/librbd/internal.cc +++ b/src/librbd/internal.cc @@ -1601,7 +1601,6 @@ reprotect_and_return_err: lderr(cct) << "Error reading header: " << cpp_strerror(r) << dendl; return r; } - ictx->last_header_version = ictx->md_ctx.get_last_version(); r = cls_client::old_snapshot_list(&ictx->md_ctx, ictx->header_oid, &snap_names, &snap_sizes, &new_snapc); if (r < 0) { @@ -1639,7 +1638,6 @@ reprotect_and_return_err: << dendl; return r; } - ictx->last_header_version = ictx->md_ctx.get_last_version(); uint64_t unsupported = incompatible_features & ~RBD_FEATURES_ALL; if (unsupported) { |