diff options
Diffstat (limited to 'xlators')
| -rw-r--r-- | xlators/cluster/afr/src/afr-transaction.c | 14 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.c | 11 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 1 | ||||
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 5 | 
4 files changed, 28 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr-transaction.c b/xlators/cluster/afr/src/afr-transaction.c index dbc74ceba..d307d5b3e 100644 --- a/xlators/cluster/afr/src/afr-transaction.c +++ b/xlators/cluster/afr/src/afr-transaction.c @@ -1495,8 +1495,10 @@ int  afr_changelog_post_op_safe (call_frame_t *frame, xlator_t *this)  {  	afr_local_t    *local = NULL; +        afr_private_t  *priv = NULL;  	local = frame->local; +        priv = this->private;  	if (!local->fd || local->transaction.type != AFR_DATA_TRANSACTION) {  		afr_changelog_post_op_now (frame, this); @@ -1548,9 +1550,15 @@ afr_changelog_post_op_safe (call_frame_t *frame, xlator_t *this)  		return 0;  	} -	/* Time to fsync() */ - -	afr_changelog_fsync (frame, this); +        /* Check whether users want durability and perform fsync/post-op +         * accordingly. +         */ +        if (priv->ensure_durability) { +                /* Time to fsync() */ +                afr_changelog_fsync (frame, this); +        } else { +                afr_changelog_post_op_now (frame, this); +        }  	return 0;  } diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 6fabc0017..9a13fbdac 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -191,6 +191,8 @@ reconfigure (xlator_t *this, dict_t *options)          /* Reset this so we re-discover in case the topology changed.  */          GF_OPTION_RECONF ("readdir-failover", priv->readdir_failover, options,                            bool, out); +        GF_OPTION_RECONF ("ensure-durability", priv->ensure_durability, options, +                          bool, out);          priv->did_discovery = _gf_false;          ret = 0; @@ -335,6 +337,8 @@ init (xlator_t *this)  	GF_OPTION_INIT ("post-op-delay-secs", priv->post_op_delay_secs, uint32, out);          GF_OPTION_INIT ("readdir-failover", priv->readdir_failover, bool, out); +        GF_OPTION_INIT ("ensure-durability", priv->ensure_durability, bool, +                        out);          priv->wait_count = 1; @@ -767,5 +771,12 @@ struct volume_options options[] = {            .description = "readdir(p) will not failover if this option is off",            .default_value = "on",          }, +        { .key = {"ensure-durability"}, +          .type = GF_OPTION_TYPE_BOOL, +          .description = "Afr performs fsyncs for transactions if this " +                         "option is on to make sure the changelogs/data is " +                         "written to the disk", +          .default_value = "on", +        },          { .key  = {NULL} },  }; diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 836a64d0a..e72398a62 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -170,6 +170,7 @@ typedef struct _afr_private {          gf_boolean_t           did_discovery;          gf_boolean_t           readdir_failover;          uint64_t               sh_readdir_size; +        gf_boolean_t           ensure_durability;  } afr_private_t;  typedef enum { diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index 6c4af6e3e..f57f49f42 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -524,6 +524,11 @@ struct volopt_map_entry glusterd_volopt_map[] = {            .op_version = 2,            .flags      = OPT_FLAG_CLIENT_OPT          }, +        { .key        = "cluster.ensure-durability", +          .voltype    = "cluster/replicate", +          .op_version = 2, +          .flags      = OPT_FLAG_CLIENT_OPT +        },          /* Stripe xlator options */          { .key         = "cluster.stripe-block-size",  | 
