diff options
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | xlators/cluster/nsr-server/src/all-templates.c | 10 | ||||
-rw-r--r-- | xlators/cluster/nsr-server/src/leader.c | 4 | ||||
-rw-r--r-- | xlators/cluster/nsr-server/src/nsr-internal.h | 2 | ||||
-rw-r--r-- | xlators/cluster/nsr-server/src/nsr.c | 2 | ||||
-rw-r--r-- | xlators/cluster/nsr-server/src/recon_notify.c | 1 |
5 files changed, 17 insertions, 2 deletions
diff --git a/xlators/cluster/nsr-server/src/all-templates.c b/xlators/cluster/nsr-server/src/all-templates.c index 5a62ae507..3403aed8c 100644 --- a/xlators/cluster/nsr-server/src/all-templates.c +++ b/xlators/cluster/nsr-server/src/all-templates.c @@ -58,6 +58,7 @@ nsr_$NAME$ (call_frame_t *frame, xlator_t *this, int op_errno = ENOMEM; int from_leader; int from_recon; + uint32_t ti = 0; local = mem_get0(this->local_pool); if (!local) { @@ -112,6 +113,15 @@ nsr_$NAME$ (call_frame_t *frame, xlator_t *this, goto err; } + LOCK(&priv->index_lock); + ti = ++(priv->index); + UNLOCK(&priv->index_lock); + if (dict_set_int32(xdata,NSR_INDEX_XATTR,ti) != 0) { + gf_log (this->name, GF_LOG_ERROR, + "failed to set index"); + goto err; + } + local->stub = fop_$NAME$_stub (frame,nsr_$NAME$_continue, $ARGS_SHORT$); if (!local->stub) { diff --git a/xlators/cluster/nsr-server/src/leader.c b/xlators/cluster/nsr-server/src/leader.c index 319f99317..645f68bf6 100644 --- a/xlators/cluster/nsr-server/src/leader.c +++ b/xlators/cluster/nsr-server/src/leader.c @@ -79,13 +79,13 @@ nsr_set_leader (xlator_t *this, etcd_session etcd) } priv->leader = _gf_true; + priv->current_term = term + 1; + if (priv->nsr_recon_start == _gf_false) { atomic_fetch_and(&(priv->fence_io), 0); return; } - priv->current_term = term + 1; - // Move this inside recon notify??? atomic_fetch_or(&(priv->fence_io), 1); diff --git a/xlators/cluster/nsr-server/src/nsr-internal.h b/xlators/cluster/nsr-server/src/nsr-internal.h index 4382f5426..7825973f7 100644 --- a/xlators/cluster/nsr-server/src/nsr-internal.h +++ b/xlators/cluster/nsr-server/src/nsr-internal.h @@ -56,6 +56,8 @@ typedef struct { gf_boolean_t nsr_recon_start; void * recon_ctx; volatile uint32_t ops_in_flight; + uint32_t index; + gf_lock_t index_lock; } nsr_private_t; typedef struct { diff --git a/xlators/cluster/nsr-server/src/nsr.c b/xlators/cluster/nsr-server/src/nsr.c index d4b78c218..b4618bb62 100644 --- a/xlators/cluster/nsr-server/src/nsr.c +++ b/xlators/cluster/nsr-server/src/nsr.c @@ -138,6 +138,7 @@ nsr_mark_fd_dirty (xlator_t *this, nsr_local_t *local) } #define NSR_TERM_XATTR "trusted.nsr.term" +#define NSR_INDEX_XATTR "trusted.nsr.index" #define RECON_TERM_XATTR "trusted.nsr.recon-term" #define RECON_INDEX_XATTR "trusted.nsr.recon-index" #define NSR_REP_COUNT_XATTR "trusted.nsr.rep-count" @@ -533,6 +534,7 @@ nsr_init (xlator_t *this) } LOCK_INIT(&priv->dirty_lock); + LOCK_INIT(&priv->index_lock); INIT_LIST_HEAD(&priv->dirty_fds); this->private = priv; diff --git a/xlators/cluster/nsr-server/src/recon_notify.c b/xlators/cluster/nsr-server/src/recon_notify.c index 9cf2fce5d..7a0de85b1 100644 --- a/xlators/cluster/nsr-server/src/recon_notify.c +++ b/xlators/cluster/nsr-server/src/recon_notify.c @@ -133,6 +133,7 @@ nsr_recon_set_leader (xlator_t *this) // TBD - error handling ctx->last_reconciled_term = priv->current_term; + priv->index = 0; // reset changelog index atomic_fetch_and(&(priv->fence_io), 0); return; |