summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Durgin <josh.durgin@inktank.com>2013-01-02 12:32:33 -0800
committerJosh Durgin <josh.durgin@inktank.com>2013-01-02 12:32:33 -0800
commite0858fa89903cf4055889c405f17515504e917a0 (patch)
treeb82ca7636ce4b059cd576ae6745965cce43bd325
parent82297706da549e2e7451eed45b7f449958b6a10b (diff)
downloadceph-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-xqa/workunits/rbd/watch_correct_version.sh31
-rw-r--r--src/librbd/ImageCtx.cc16
-rw-r--r--src/librbd/ImageCtx.h2
-rw-r--r--src/librbd/internal.cc2
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) {