diff options
Diffstat (limited to 'xlators/features/read-only')
-rw-r--r-- | xlators/features/read-only/src/read-only.h | 1 | ||||
-rw-r--r-- | xlators/features/read-only/src/worm-helper.c | 2 | ||||
-rw-r--r-- | xlators/features/read-only/src/worm.c | 10 |
3 files changed, 12 insertions, 1 deletions
diff --git a/xlators/features/read-only/src/read-only.h b/xlators/features/read-only/src/read-only.h index d0263e74179..aae625f5eaf 100644 --- a/xlators/features/read-only/src/read-only.h +++ b/xlators/features/read-only/src/read-only.h @@ -28,6 +28,7 @@ typedef struct { typedef struct { gf_boolean_t readonly_or_worm_enabled; gf_boolean_t worm_file; + gf_boolean_t worm_files_deletable; uint64_t reten_period; uint64_t com_period; char *reten_mode; diff --git a/xlators/features/read-only/src/worm-helper.c b/xlators/features/read-only/src/worm-helper.c index 425e48123b1..0770f9d77c4 100644 --- a/xlators/features/read-only/src/worm-helper.c +++ b/xlators/features/read-only/src/worm-helper.c @@ -379,7 +379,7 @@ gf_worm_state_transition (xlator_t *this, gf_boolean_t fop_with_fd, &reten_state, &stbuf); } if (reten_state.worm && !reten_state.retain && - op == GF_FOP_UNLINK) { + priv->worm_files_deletable && op == GF_FOP_UNLINK) { op_errno = 0; goto out; } diff --git a/xlators/features/read-only/src/worm.c b/xlators/features/read-only/src/worm.c index a1474b6bc27..cbe7df8e798 100644 --- a/xlators/features/read-only/src/worm.c +++ b/xlators/features/read-only/src/worm.c @@ -542,6 +542,8 @@ init (xlator_t *this) 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 ("worm-files-deletable", priv->worm_files_deletable, + bool, out); this->private = priv; ret = 0; @@ -569,6 +571,8 @@ reconfigure (xlator_t *this, dict_t *options) out); GF_OPTION_RECONF ("auto-commit-period", priv->com_period, options, uint64, out); + GF_OPTION_RECONF ("worm-files-deletable", priv->worm_files_deletable, + options, bool, out); ret = 0; out: gf_log (this->name, GF_LOG_DEBUG, "returning %d", ret); @@ -632,6 +636,12 @@ struct volume_options options[] = { .description = "When \"on\", activates the file level worm. " "It is turned \"off\" by default." }, + { .key = {"worm-files-deletable"}, + .type = GF_OPTION_TYPE_BOOL, + .default_value = "on", + .description = "When \"off\", doesn't allow the Worm files" + "to be deleted. It is turned \"on\" by default." + }, { .key = {"default-retention-period"}, .type = GF_OPTION_TYPE_TIME, .default_value = "120", |