summaryrefslogtreecommitdiffstats
path: root/xlators/protocol
diff options
context:
space:
mode:
authorAnand Avati <avati@gluster.com>2010-10-07 05:58:06 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-07 05:08:56 -0700
commit32b62dd42fc479d19211a3c223b665d28d2207f2 (patch)
tree34bb31209e792aaf574a3594b8902ee2e1b43a8a /xlators/protocol
parent0c0c82729b947256beefcd3999d230302faef1fd (diff)
lock recovery: temporarily disable lock healing
Signed-off-by: Anand V. Avati <avati@blackhole.gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 865 (Add locks recovery support in GlusterFS) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=865
Diffstat (limited to 'xlators/protocol')
-rw-r--r--xlators/protocol/client/src/client-lk.c1
-rw-r--r--xlators/protocol/client/src/client3_1-fops.c50
2 files changed, 29 insertions, 22 deletions
diff --git a/xlators/protocol/client/src/client-lk.c b/xlators/protocol/client/src/client-lk.c
index 76ebc02d6..afd7eda33 100644
--- a/xlators/protocol/client/src/client-lk.c
+++ b/xlators/protocol/client/src/client-lk.c
@@ -859,6 +859,7 @@ client_lockrec_init (clnt_fd_ctx_t *fdctx, clnt_local_t *local)
return 0;
}
+
int
client_attempt_lock_recovery (xlator_t *this, clnt_fd_ctx_t *fdctx)
{
diff --git a/xlators/protocol/client/src/client3_1-fops.c b/xlators/protocol/client/src/client3_1-fops.c
index 231b4d9ea..d69d9f841 100644
--- a/xlators/protocol/client/src/client3_1-fops.c
+++ b/xlators/protocol/client/src/client3_1-fops.c
@@ -1553,6 +1553,8 @@ client3_1_lk_cbk (struct rpc_req *req, struct iovec *iov, int count,
/* Save the lock to the client lock cache to be able
to recover in the case of server reboot.*/
+ /*
+ temporarily
if (local->cmd == F_SETLK || local->cmd == F_SETLKW) {
ret = client_add_lock_for_recovery (local->fd, &lock,
local->owner, local->cmd);
@@ -1561,6 +1563,7 @@ client3_1_lk_cbk (struct rpc_req *req, struct iovec *iov, int count,
rsp.op_errno = -ret;
}
}
+ */
frame->local = NULL;
client_local_wipe (local);
@@ -2059,7 +2062,7 @@ client3_1_reopen_cbk (struct rpc_req *req, struct iovec *iov, int count,
frame = myframe;
local = frame->local;
conf = frame->this->private;
-
+
if (-1 == req->rpc_status) {
rsp.op_ret = -1;
rsp.op_errno = ENOTCONN;
@@ -2078,38 +2081,43 @@ client3_1_reopen_cbk (struct rpc_req *req, struct iovec *iov, int count,
"reopen on %s returned %d (%"PRId64")",
local->loc.path, rsp.op_ret, rsp.fd);
- if (-1 != rsp.op_ret) {
- fdctx = local->fdctx;
- if(fdctx) {
- pthread_mutex_lock (&conf->lock);
- {
- fdctx->remote_fd = rsp.fd;
+ if (rsp.op_ret == -1)
+ goto out;
- if (!fdctx->released) {
- list_add_tail (&fdctx->sfd_pos, &conf->saved_fds);
+ fdctx = local->fdctx;
+
+ if (!fdctx)
+ goto out;
+
+ pthread_mutex_lock (&conf->lock);
+ {
+ fdctx->remote_fd = rsp.fd;
+ if (!fdctx->released) {
+ list_add_tail (&fdctx->sfd_pos, &conf->saved_fds);
+ if (!list_empty (&fdctx->lock_list))
attempt_lock_recovery = _gf_true;
- fdctx = NULL;
- }
+ fdctx = NULL;
}
- pthread_mutex_unlock (&conf->lock);
-
- }
}
+ pthread_mutex_unlock (&conf->lock);
+
+ attempt_lock_recovery = _gf_false; /* temporarily */
if (attempt_lock_recovery) {
ret = client_attempt_lock_recovery (frame->this, local->fdctx);
- if (ret < 0)
+ if (ret < 0) {
gf_log (frame->this->name, GF_LOG_DEBUG,
"No locks on fd to recover");
- else {
- fd_count = decrement_reopen_fd_count (frame->this, conf);
+ } else {
gf_log (frame->this->name, GF_LOG_DEBUG,
"Need to attempt lock recovery on %lld open fds",
(unsigned long long) fd_count);
-
}
+ } else {
+ fd_count = decrement_reopen_fd_count (frame->this, conf);
}
+
out:
if (fdctx)
client_fdctx_destroy (frame->this, fdctx);
@@ -2140,7 +2148,7 @@ client3_1_reopendir_cbk (struct rpc_req *req, struct iovec *iov, int count,
local = frame->local;
frame->local = NULL;
conf = frame->this->private;
-
+
if (-1 == req->rpc_status) {
rsp.op_ret = -1;
rsp.op_errno = ENOTCONN;
@@ -2172,7 +2180,7 @@ client3_1_reopendir_cbk (struct rpc_req *req, struct iovec *iov, int count,
}
}
pthread_mutex_unlock (&conf->lock);
-
+
}
}
@@ -5049,5 +5057,3 @@ rpc_clnt_prog_t clnt3_1_fop_prog = {
.proctable = clnt3_1_fop_actors,
.procnames = clnt3_1_fop_names,
};
-
-