diff options
author | Amar Tumballi <amar@gluster.com> | 2010-03-24 04:04:51 +0000 |
---|---|---|
committer | Anand V. Avati <avati@dev.gluster.com> | 2010-03-24 05:42:20 -0700 |
commit | 3f8dc989b71977c2e3f94482b21be92b8562ea83 (patch) | |
tree | 9be6b5912d884a2a83271ad041cff3aa497be1a7 /glusterfsd/src/glusterfsd.c | |
parent | 1a15248382e53e5c04cb6235144001d697f6b09b (diff) |
added '--read-only' command line option for glusterfs
Signed-off-by: Amar Tumballi <amar@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 712 (mount.glusterfs script doesn't handle 'ro' option)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=712
Diffstat (limited to 'glusterfsd/src/glusterfsd.c')
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 072422fe46e..aa90f351314 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -144,6 +144,8 @@ static struct argp_option gf_options[] = { "in VOLFILE]"}, {"xlator-option", ARGP_XLATOR_OPTION_KEY,"VOLUME-NAME.OPTION=VALUE", 0, "Add/override a translator option for a volume with specified value"}, + {"read-only", ARGP_READ_ONLY_KEY, 0, 0, + "Mount the filesystem in 'read-only' mode"}, {0, 0, 0, 0, "Fuse options:"}, {"disable-direct-io-mode", ARGP_DISABLE_DIRECT_IO_MODE_KEY, 0, 0, @@ -363,6 +365,43 @@ _add_fuse_mount (xlator_t *graph) return top; } +static xlator_t * +_add_ro_volume (xlator_t *graph) +{ + cmd_args_t *cmd_args = NULL; + xlator_t *top = NULL; + glusterfs_ctx_t *ctx = NULL; + xlator_list_t *xlchild = NULL; + + ctx = graph->ctx; + cmd_args = &ctx->cmd_args; + + xlchild = CALLOC (sizeof (*xlchild), 1); + if (!xlchild) { + return NULL; + } + xlchild->xlator = graph; + + top = CALLOC (1, sizeof (*top)); + top->name = strdup ("read-only"); + if (xlator_set_type (top, ZR_XLATOR_READ_ONLY) == -1) { + fprintf (stderr, + "read-only volume initialization failed"); + gf_log ("glusterfs", GF_LOG_ERROR, + "read-only initialization failed"); + return NULL; + } + top->children = xlchild; + top->ctx = graph->ctx; + top->next = gf_get_first_xlator (graph); + top->options = get_new_dict (); + + graph->parents = CALLOC (1, sizeof (xlator_list_t)); + graph->parents->xlator = top; + + return top; +} + static FILE * _get_specfp (glusterfs_ctx_t *ctx) @@ -786,6 +825,10 @@ parse_opts (int key, char *arg, struct argp_state *state) "Invalid limit on connect attempts %s", arg); break; + case ARGP_READ_ONLY_KEY: + cmd_args->read_only = 1; + break; + case ARGP_VOLUME_FILE_KEY: cmd_args->volume_file = strdup (arg); break; @@ -1287,7 +1330,27 @@ main (int argc, char *argv[]) ctx->xl_count = xl_count + 1; + if (cmd_args->read_only && !fuse_volume_found && + (cmd_args->mount_point == NULL)) { + gf_log ("glusterfs", GF_LOG_ERROR, + "'--read-only' option is valid only on client side"); + fprintf (stderr, "'--read-only' option is valid only " + "on client side, exiting\n"); + return -1; + } if (!fuse_volume_found && (cmd_args->mount_point != NULL)) { + /* Check for read-only option and add a read-only translator */ + if (cmd_args->read_only) { + if ((graph = _add_ro_volume (graph)) == NULL) { + /* _add_fuse_mount() prints necessary + * error message + */ + fprintf (stderr, + "failed to load 'ro' option. exiting\n"); + gf_log ("glusterfs", GF_LOG_ERROR, "exiting"); + return -1; + } + } if ((graph = _add_fuse_mount (graph)) == NULL) { /* _add_fuse_mount() prints necessary * error message |