diff options
| -rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 22 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-common.c | 7 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr-self-heal-data.c | 13 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.c | 43 | ||||
| -rw-r--r-- | xlators/cluster/afr/src/afr.h | 12 | ||||
| -rw-r--r-- | xlators/debug/error-gen/src/error-gen.c | 16 | ||||
| -rw-r--r-- | xlators/debug/error-gen/src/error-gen.h | 1 | ||||
| -rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 22 | ||||
| -rw-r--r-- | xlators/features/read-only/src/read-only.h | 2 | ||||
| -rw-r--r-- | xlators/features/read-only/src/worm-helper.c | 5 | ||||
| -rw-r--r-- | xlators/features/read-only/src/worm.c | 17 | 
11 files changed, 93 insertions, 67 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 5656cec4226..40740814103 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -1156,18 +1156,12 @@ ret:  }  gf_boolean_t -afr_selfheal_enabled(xlator_t *this) +afr_selfheal_enabled(const xlator_t *this)  { -    afr_private_t *priv = NULL; -    gf_boolean_t data = _gf_false; -    int ret = 0; - -    priv = this->private; - -    ret = gf_string2boolean(priv->data_self_heal, &data); -    GF_ASSERT(!ret); +    const afr_private_t *priv = this->private; -    return data || priv->metadata_self_heal || priv->entry_self_heal; +    return priv->data_self_heal || priv->metadata_self_heal || +           priv->entry_self_heal;  }  int @@ -4876,7 +4870,7 @@ afr_priv_dump(xlator_t *this)          sprintf(key, "child_latency[%d]", i);          gf_proc_dump_write(key, "%" PRId64, priv->child_latency[i]);      } -    gf_proc_dump_write("data_self_heal", "%s", priv->data_self_heal); +    gf_proc_dump_write("data_self_heal", "%d", priv->data_self_heal);      gf_proc_dump_write("metadata_self_heal", "%d", priv->metadata_self_heal);      gf_proc_dump_write("entry_self_heal", "%d", priv->entry_self_heal);      gf_proc_dump_write("read_child", "%d", priv->read_child); @@ -6020,8 +6014,10 @@ afr_selfheal_locked_entry_inspect(call_frame_t *frame, xlator_t *this,      gf_boolean_t granular_locks = _gf_false;      priv = this->private; -    if (strcmp("granular", priv->locking_scheme) == 0) -        granular_locks = _gf_true; +    granular_locks = priv->granular_locks; /*Assign to local variable so that +                                             reconfigure doesn't change this +                                             value between locking and unlocking +                                             below*/      locked_on = alloca0(priv->child_count);      data_lock = alloca0(priv->child_count);      sources = alloca0(priv->child_count); diff --git a/xlators/cluster/afr/src/afr-self-heal-common.c b/xlators/cluster/afr/src/afr-self-heal-common.c index c137bf8934f..071ed1ccd32 100644 --- a/xlators/cluster/afr/src/afr-self-heal-common.c +++ b/xlators/cluster/afr/src/afr-self-heal-common.c @@ -2469,14 +2469,9 @@ afr_selfheal_do(call_frame_t *frame, xlator_t *this, uuid_t gfid)      gf_boolean_t metadata_selfheal = _gf_false;      gf_boolean_t entry_selfheal = _gf_false;      afr_private_t *priv = NULL; -    gf_boolean_t dataheal_enabled = _gf_false;      priv = this->private; -    ret = gf_string2boolean(priv->data_self_heal, &dataheal_enabled); -    if (ret) -        goto out; -      ret = afr_selfheal_unlocked_inspect(frame, this, gfid, &inode,                                          &data_selfheal, &metadata_selfheal,                                          &entry_selfheal); @@ -2496,7 +2491,7 @@ afr_selfheal_do(call_frame_t *frame, xlator_t *this, uuid_t gfid)          }      } -    if (data_selfheal && dataheal_enabled) +    if (data_selfheal && priv->data_self_heal)          data_ret = afr_selfheal_data(frame, this, fd);      if (metadata_selfheal && priv->metadata_self_heal) diff --git a/xlators/cluster/afr/src/afr-self-heal-data.c b/xlators/cluster/afr/src/afr-self-heal-data.c index 1dd18b363e0..6dd38ef633a 100644 --- a/xlators/cluster/afr/src/afr-self-heal-data.c +++ b/xlators/cluster/afr/src/afr-self-heal-data.c @@ -15,11 +15,6 @@  #include "afr-messages.h"  #include <glusterfs/events.h> -enum { -    AFR_SELFHEAL_DATA_FULL = 0, -    AFR_SELFHEAL_DATA_DIFF, -}; -  #define HAS_HOLES(i) ((i->ia_blocks * 512) < (i->ia_size))  static int  __checksum_cbk(call_frame_t *frame, void *cookie, xlator_t *this, int op_ret, @@ -301,7 +296,7 @@ afr_data_self_heal_type_get(afr_private_t *priv, unsigned char *healed_sinks,      int type = AFR_SELFHEAL_DATA_FULL;      int i = 0; -    if (priv->data_self_heal_algorithm == NULL) { +    if (priv->data_self_heal_algorithm == AFR_SELFHEAL_DATA_DYNAMIC) {          type = AFR_SELFHEAL_DATA_FULL;          for (i = 0; i < priv->child_count; i++) {              if (!healed_sinks[i] && i != source) @@ -311,10 +306,8 @@ afr_data_self_heal_type_get(afr_private_t *priv, unsigned char *healed_sinks,                  break;              }          } -    } else if (strcmp(priv->data_self_heal_algorithm, "full") == 0) { -        type = AFR_SELFHEAL_DATA_FULL; -    } else if (strcmp(priv->data_self_heal_algorithm, "diff") == 0) { -        type = AFR_SELFHEAL_DATA_DIFF; +    } else { +        type = priv->data_self_heal_algorithm;      }      return type;  } diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index c13ac8772f2..78eff154a80 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -120,6 +120,21 @@ afr_set_favorite_child_policy(afr_private_t *priv, char *policy)      return 0;  } + +static void +set_data_self_heal_algorithm(afr_private_t *priv, char *algo) +{ +    if (!algo) { +        priv->data_self_heal_algorithm = AFR_SELFHEAL_DATA_DYNAMIC; +    } else if (strcmp(algo, "full") == 0) { +        priv->data_self_heal_algorithm = AFR_SELFHEAL_DATA_FULL; +    } else if (strcmp(algo, "diff") == 0) { +        priv->data_self_heal_algorithm = AFR_SELFHEAL_DATA_DIFF; +    } else { +        priv->data_self_heal_algorithm = AFR_SELFHEAL_DATA_DYNAMIC; +    } +} +  int  reconfigure(xlator_t *this, dict_t *options)  { @@ -130,13 +145,14 @@ reconfigure(xlator_t *this, dict_t *options)      int index = -1;      char *qtype = NULL;      char *fav_child_policy = NULL; +    char *data_self_heal = NULL; +    char *data_self_heal_algorithm = NULL; +    char *locking_scheme = NULL;      gf_boolean_t consistent_io = _gf_false;      gf_boolean_t choose_local_old = _gf_false;      priv = this->private; -    GF_OPTION_RECONF("afr-dirty-xattr", priv->afr_dirty, options, str, out); -      GF_OPTION_RECONF("metadata-splitbrain-forced-heal",                       priv->metadata_splitbrain_forced_heal, options, bool, out); @@ -149,7 +165,8 @@ reconfigure(xlator_t *this, dict_t *options)      GF_OPTION_RECONF("metadata-self-heal", priv->metadata_self_heal, options,                       bool, out); -    GF_OPTION_RECONF("data-self-heal", priv->data_self_heal, options, str, out); +    GF_OPTION_RECONF("data-self-heal", data_self_heal, options, str, out); +    gf_string2boolean(data_self_heal, &priv->data_self_heal);      GF_OPTION_RECONF("entry-self-heal", priv->entry_self_heal, options, bool,                       out); @@ -157,8 +174,9 @@ reconfigure(xlator_t *this, dict_t *options)      GF_OPTION_RECONF("data-self-heal-window-size",                       priv->data_self_heal_window_size, options, uint32, out); -    GF_OPTION_RECONF("data-self-heal-algorithm", priv->data_self_heal_algorithm, +    GF_OPTION_RECONF("data-self-heal-algorithm", data_self_heal_algorithm,                       options, str, out); +    set_data_self_heal_algorithm(priv, data_self_heal_algorithm);      GF_OPTION_RECONF("halo-enabled", priv->halo_enabled, options, bool, out); @@ -214,7 +232,8 @@ reconfigure(xlator_t *this, dict_t *options)      }      GF_OPTION_RECONF("pre-op-compat", priv->pre_op_compat, options, bool, out); -    GF_OPTION_RECONF("locking-scheme", priv->locking_scheme, options, str, out); +    GF_OPTION_RECONF("locking-scheme", locking_scheme, options, str, out); +    priv->granular_locks = (strcmp(locking_scheme, "granular") == 0);      GF_OPTION_RECONF("full-lock", priv->full_lock, options, bool, out);      GF_OPTION_RECONF("granular-entry-heal", priv->esh_granular, options, bool,                       out); @@ -366,6 +385,9 @@ init(xlator_t *this)      char *qtype = NULL;      char *fav_child_policy = NULL;      char *thin_arbiter = NULL; +    char *data_self_heal = NULL; +    char *locking_scheme = NULL; +    char *data_self_heal_algorithm = NULL;      if (!this->children) {          gf_msg(this->name, GF_LOG_ERROR, 0, AFR_MSG_CHILD_MISCONFIGURED, @@ -448,10 +470,12 @@ init(xlator_t *this)      GF_OPTION_INIT("heal-wait-queue-length", priv->heal_wait_qlen, uint32, out); -    GF_OPTION_INIT("data-self-heal", priv->data_self_heal, str, out); +    GF_OPTION_INIT("data-self-heal", data_self_heal, str, out); +    gf_string2boolean(data_self_heal, &priv->data_self_heal); -    GF_OPTION_INIT("data-self-heal-algorithm", priv->data_self_heal_algorithm, -                   str, out); +    GF_OPTION_INIT("data-self-heal-algorithm", data_self_heal_algorithm, str, +                   out); +    set_data_self_heal_algorithm(priv, data_self_heal_algorithm);      GF_OPTION_INIT("data-self-heal-window-size",                     priv->data_self_heal_window_size, uint32, out); @@ -479,7 +503,8 @@ init(xlator_t *this)                     out);      GF_OPTION_INIT("pre-op-compat", priv->pre_op_compat, bool, out); -    GF_OPTION_INIT("locking-scheme", priv->locking_scheme, str, out); +    GF_OPTION_INIT("locking-scheme", locking_scheme, str, out); +    priv->granular_locks = (strcmp(locking_scheme, "granular") == 0);      GF_OPTION_INIT("full-lock", priv->full_lock, bool, out);      GF_OPTION_INIT("granular-entry-heal", priv->esh_granular, bool, out); diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 1a54d5d582c..489fdc738ab 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -105,6 +105,12 @@ typedef enum {  } afr_favorite_child_policy;  typedef enum { +    AFR_SELFHEAL_DATA_FULL = 0, +    AFR_SELFHEAL_DATA_DIFF, +    AFR_SELFHEAL_DATA_DYNAMIC, +} afr_data_self_heal_type_t; + +typedef enum {      AFR_CHILD_UNKNOWN = -1,      AFR_CHILD_ZERO,      AFR_CHILD_ONE, @@ -155,8 +161,7 @@ typedef struct _afr_private {      char **pending_key; -    char *data_self_heal;                    /* on/off/open */ -    char *data_self_heal_algorithm;          /* name of algorithm */ +    afr_data_self_heal_type_t data_self_heal_algorithm;      unsigned int data_self_heal_window_size; /* max number of pipelined                                                  read/writes */ @@ -230,10 +235,11 @@ typedef struct _afr_private {      /* pump dependencies */      void *pump_private;      gf_boolean_t use_afr_in_pump; -    char *locking_scheme; +    gf_boolean_t granular_locks;      gf_boolean_t full_lock;      gf_boolean_t esh_granular;      gf_boolean_t consistent_io; +    gf_boolean_t data_self_heal; /* on/off */  } afr_private_t;  typedef enum { diff --git a/xlators/debug/error-gen/src/error-gen.c b/xlators/debug/error-gen/src/error-gen.c index 3416d63fa20..8901e349e6f 100644 --- a/xlators/debug/error-gen/src/error-gen.c +++ b/xlators/debug/error-gen/src/error-gen.c @@ -1396,7 +1396,7 @@ error_gen_priv_dump(xlator_t *this)      gf_proc_dump_write("op_count", "%d", conf->op_count);      gf_proc_dump_write("failure_iter_no", "%d", conf->failure_iter_no); -    gf_proc_dump_write("error_no", "%s", conf->error_no); +    gf_proc_dump_write("error_no", "%d", conf->error_no_int);      gf_proc_dump_write("random_failure", "%d", conf->random_failure);      UNLOCK(&conf->lock); @@ -1430,6 +1430,7 @@ reconfigure(xlator_t *this, dict_t *options)      eg_t *pvt = NULL;      int32_t ret = 0;      char *error_enable_fops = NULL; +    char *error_no = NULL;      double failure_percent_dbl = 0.0;      if (!this || !this->private) @@ -1439,10 +1440,10 @@ reconfigure(xlator_t *this, dict_t *options)      ret = -1; -    GF_OPTION_RECONF("error-no", pvt->error_no, options, str, out); +    GF_OPTION_RECONF("error-no", error_no, options, str, out); -    if (pvt->error_no) -        pvt->error_no_int = conv_errno_to_int(&pvt->error_no); +    if (error_no) +        pvt->error_no_int = conv_errno_to_int(&error_no);      GF_OPTION_RECONF("failure", failure_percent_dbl, options, percent, out); @@ -1466,6 +1467,7 @@ init(xlator_t *this)      eg_t *pvt = NULL;      int32_t ret = 0;      char *error_enable_fops = NULL; +    char *error_no = NULL;      double failure_percent_dbl = 0.0;      if (!this->children || this->children->next) { @@ -1490,10 +1492,10 @@ init(xlator_t *this)      ret = -1; -    GF_OPTION_INIT("error-no", pvt->error_no, str, out); +    GF_OPTION_INIT("error-no", error_no, str, out); -    if (pvt->error_no) -        pvt->error_no_int = conv_errno_to_int(&pvt->error_no); +    if (error_no) +        pvt->error_no_int = conv_errno_to_int(&error_no);      GF_OPTION_INIT("failure", failure_percent_dbl, percent, out); diff --git a/xlators/debug/error-gen/src/error-gen.h b/xlators/debug/error-gen/src/error-gen.h index ffa09252d0f..2478cd5b21c 100644 --- a/xlators/debug/error-gen/src/error-gen.h +++ b/xlators/debug/error-gen/src/error-gen.h @@ -36,7 +36,6 @@ typedef struct {       * It's just not worth blowing up the diff by changing it.       */      int failure_iter_no; -    char *error_no;      int error_no_int;      gf_boolean_t random_failure;      gf_lock_t lock; diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index f40b00bba2d..f12191fb8df 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -173,7 +173,6 @@ struct ios_conf {       */      char *unique_id;      ios_dump_type_t dump_format; -    char *dump_format_str;  };  struct ios_fd { @@ -3680,15 +3679,15 @@ io_priv(xlator_t *this)  }  static void -ios_set_log_format_code(struct ios_conf *conf) +ios_set_log_format_code(struct ios_conf *conf, char *dump_format_str)  { -    if (strcmp(conf->dump_format_str, "json") == 0) +    if (strcmp(dump_format_str, "json") == 0)          conf->dump_format = IOS_DUMP_TYPE_JSON_FILE; -    else if (strcmp(conf->dump_format_str, "text") == 0) +    else if (strcmp(dump_format_str, "text") == 0)          conf->dump_format = IOS_DUMP_TYPE_FILE; -    else if (strcmp(conf->dump_format_str, "dict") == 0) +    else if (strcmp(dump_format_str, "dict") == 0)          conf->dump_format = IOS_DUMP_TYPE_DICT; -    else if (strcmp(conf->dump_format_str, "samples") == 0) +    else if (strcmp(dump_format_str, "samples") == 0)          conf->dump_format = IOS_DUMP_TYPE_SAMPLES;  } @@ -3729,6 +3728,7 @@ reconfigure(xlator_t *this, dict_t *options)      char *sys_log_str = NULL;      char *log_format_str = NULL;      char *logger_str = NULL; +    char *dump_format_str = NULL;      int sys_log_level = -1;      char *log_str = NULL;      int log_level = -1; @@ -3773,9 +3773,8 @@ reconfigure(xlator_t *this, dict_t *options)      GF_OPTION_RECONF("ios-sample-interval", conf->ios_sample_interval, options,                       int32, out); -    GF_OPTION_RECONF("ios-dump-format", conf->dump_format_str, options, str, -                     out); -    ios_set_log_format_code(conf); +    GF_OPTION_RECONF("ios-dump-format", dump_format_str, options, str, out); +    ios_set_log_format_code(conf, dump_format_str);      GF_OPTION_RECONF("ios-sample-buf-size", conf->ios_sample_buf_size, options,                       int32, out);      GF_OPTION_RECONF("sys-log-level", sys_log_str, options, str, out); @@ -3880,6 +3879,7 @@ init(xlator_t *this)      char *sys_log_str = NULL;      char *logger_str = NULL;      char *log_format_str = NULL; +    char *dump_format_str = NULL;      int logger = -1;      int log_format = -1;      int sys_log_level = -1; @@ -3940,8 +3940,8 @@ init(xlator_t *this)      GF_OPTION_INIT("ios-sample-interval", conf->ios_sample_interval, int32,                     out); -    GF_OPTION_INIT("ios-dump-format", conf->dump_format_str, str, out); -    ios_set_log_format_code(conf); +    GF_OPTION_INIT("ios-dump-format", dump_format_str, str, out); +    ios_set_log_format_code(conf, dump_format_str);      GF_OPTION_INIT("ios-sample-buf-size", conf->ios_sample_buf_size, int32,                     out); diff --git a/xlators/features/read-only/src/read-only.h b/xlators/features/read-only/src/read-only.h index 7cd09d37bc8..b959d2a44fb 100644 --- a/xlators/features/read-only/src/read-only.h +++ b/xlators/features/read-only/src/read-only.h @@ -29,7 +29,7 @@ typedef struct {      gf_boolean_t worm_files_deletable;      uint64_t reten_period;      uint64_t com_period; -    char *reten_mode; +    int reten_mode;      time_t start_time;  } read_only_priv_t; diff --git a/xlators/features/read-only/src/worm-helper.c b/xlators/features/read-only/src/worm-helper.c index 2cf6ba5d438..25fbd4aa748 100644 --- a/xlators/features/read-only/src/worm-helper.c +++ b/xlators/features/read-only/src/worm-helper.c @@ -84,10 +84,7 @@ worm_set_state(xlator_t *this, gf_boolean_t fop_with_fd, void *file_ptr,      retention_state->worm = 1;      retention_state->retain = 1;      retention_state->legal_hold = 0; -    if (strcmp(priv->reten_mode, "relax") == 0) -        retention_state->ret_mode = 0; -    else -        retention_state->ret_mode = 1; +    retention_state->ret_mode = priv->reten_mode;      retention_state->ret_period = priv->reten_period;      retention_state->auto_commit_period = priv->com_period;      if (fop_with_fd) diff --git a/xlators/features/read-only/src/worm.c b/xlators/features/read-only/src/worm.c index 8bbea21e6d3..24196f83931 100644 --- a/xlators/features/read-only/src/worm.c +++ b/xlators/features/read-only/src/worm.c @@ -475,11 +475,21 @@ worm_create(call_frame_t *frame, xlator_t *this, loc_t *loc, int32_t flags,      return 0;  } +static void +set_reten_mode(read_only_priv_t *priv, char *reten_mode) +{ +    if (strcmp(reten_mode, "relax") == 0) +        priv->reten_mode = 0; +    else +        priv->reten_mode = 1; +} +  int32_t  init(xlator_t *this)  {      int ret = -1;      read_only_priv_t *priv = NULL; +    char *reten_mode = NULL;      if (!this->children || this->children->next) {          gf_log(this->name, GF_LOG_ERROR, @@ -511,7 +521,8 @@ init(xlator_t *this)      GF_OPTION_INIT("worm-file-level", priv->worm_file, bool, out);      GF_OPTION_INIT("default-retention-period", priv->reten_period, uint64, out);      GF_OPTION_INIT("auto-commit-period", priv->com_period, uint64, out); -    GF_OPTION_INIT("retention-mode", priv->reten_mode, str, out); +    GF_OPTION_INIT("retention-mode", reten_mode, str, out); +    set_reten_mode(priv, reten_mode);      GF_OPTION_INIT("worm-files-deletable", priv->worm_files_deletable, bool,                     out); @@ -524,6 +535,7 @@ int  reconfigure(xlator_t *this, dict_t *options)  {      read_only_priv_t *priv = NULL; +    char *reten_mode = NULL;      int ret = -1;      priv = this->private; @@ -534,7 +546,8 @@ reconfigure(xlator_t *this, dict_t *options)      GF_OPTION_RECONF("worm-file-level", priv->worm_file, options, bool, out);      GF_OPTION_RECONF("default-retention-period", priv->reten_period, options,                       uint64, out); -    GF_OPTION_RECONF("retention-mode", priv->reten_mode, options, str, out); +    GF_OPTION_RECONF("retention-mode", reten_mode, options, str, out); +    set_reten_mode(priv, reten_mode);      GF_OPTION_RECONF("auto-commit-period", priv->com_period, options, uint64,                       out);      GF_OPTION_RECONF("worm-files-deletable", priv->worm_files_deletable,  | 
