diff options
author | Anand Avati <avati@gluster.com> | 2010-10-07 05:58:06 +0000 |
---|---|---|
committer | Vijay Bellur <vijay@dev.gluster.com> | 2010-10-07 05:08:56 -0700 |
commit | 32b62dd42fc479d19211a3c223b665d28d2207f2 (patch) | |
tree | 34bb31209e792aaf574a3594b8902ee2e1b43a8a /xlators | |
parent | 0c0c82729b947256beefcd3999d230302faef1fd (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')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 9 | ||||
-rw-r--r-- | xlators/protocol/client/src/client-lk.c | 1 | ||||
-rw-r--r-- | xlators/protocol/client/src/client3_1-fops.c | 50 |
3 files changed, 34 insertions, 26 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index bd4e9d66d..8d2a4f997 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -2329,7 +2329,7 @@ afr_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, { afr_local_t *local = NULL; afr_private_t *priv = NULL; - int ret = 0; +/* int ret = 0; */ int child_index = -1; @@ -2369,6 +2369,7 @@ afr_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, } else { /* locking has succeeded on all nodes that are up */ + /* temporarily ret = afr_mark_locked_nodes (this, local->fd, local->cont.lk.locked_nodes); if (ret) @@ -2380,6 +2381,7 @@ afr_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this, gf_log (this->name, GF_LOG_DEBUG, "Could not save locked fd"); + */ AFR_STACK_UNWIND (lk, frame, local->op_ret, local->op_errno, &local->cont.lk.ret_flock); } @@ -2539,10 +2541,9 @@ afr_notify (xlator_t *this, int32_t event, case GF_EVENT_CHILD_UP: i = find_child_index (this, data); - gf_log (this->name, GF_LOG_DEBUG, - "child=%d up", i); - + /* temporarily afr_attempt_lock_recovery (this, i); + */ child_up[i] = 1; 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, }; - - |