diff options
| author | Amar Tumballi <amarts@redhat.com> | 2012-08-20 23:46:03 +0530 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-08-22 09:55:59 -0700 | 
| commit | 49ba15d599a8979d1d3df7a39204d52081d8719e (patch) | |
| tree | db7b1e85949155f574ef69115cbf35e324809953 /glusterfsd/src | |
| parent | 4dc4e4b770fc5fa1aeebc41223ede9195ede4965 (diff) | |
fuse: make background queue length configurable
* also make 'congestion_threshold' an option
* make 'congestion_threshold' as 75% of background queue length if
  not explicitely specified
* in glusterfsd.c, moved all the fuse option dictionary setting
  code to separate function
Change-Id: Ie1680eefaed9377720770a09222282321bd4132e
Signed-off-by: Amar Tumballi <amarts@redhat.com>
BUG: 845214
Reviewed-on: http://review.gluster.org/3830
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'glusterfsd/src')
| -rw-r--r-- | glusterfsd/src/glusterfsd.c | 161 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd.h | 2 | 
2 files changed, 110 insertions, 53 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 262ef15b..fd3fddfb 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -186,6 +186,12 @@ static struct argp_option gf_options[] = {  	{"gid-timeout", ARGP_GID_TIMEOUT_KEY, "SECONDS", 0,  	 "Set auxilary group list timeout to SECONDS for fuse translator "  	 "[default: 0]"}, +	{"background-qlen", ARGP_FUSE_BACKGROUND_QLEN_KEY, "N", 0, +	 "Set fuse module's background queue length to N " +	 "[default: 64]"}, +	{"congestion-threshold", ARGP_FUSE_CONGESTION_THRESHOLD_KEY, "N", 0, +	 "Set fuse module's congestion threshold to N " +	 "[default: 48]"},          {"client-pid", ARGP_CLIENT_PID_KEY, "PID", OPTION_HIDDEN,           "client will authenticate itself with process id PID to server"},          {"user-map-root", ARGP_USER_MAP_ROOT_KEY, "USER", OPTION_HIDDEN, @@ -209,50 +215,17 @@ int glusterfs_mgmt_init (glusterfs_ctx_t *ctx);  int glusterfs_listener_init (glusterfs_ctx_t *ctx);  int glusterfs_listener_stop (glusterfs_ctx_t *ctx); -int -create_fuse_mount (glusterfs_ctx_t *ctx) + +static int +set_fuse_mount_options (glusterfs_ctx_t *ctx, dict_t *options)  {          int              ret = 0;          cmd_args_t      *cmd_args = NULL; -        xlator_t        *master = NULL;          char            *mount_point = NULL;          char            cwd[PATH_MAX] = {0,};          cmd_args = &ctx->cmd_args; -        if (!cmd_args->mount_point) { -                gf_log ("", GF_LOG_TRACE, -                        "mount point not found, not a client process"); -                return 0; -        } - -        if (ctx->process_mode != GF_CLIENT_PROCESS) { -                gf_log("glusterfsd", GF_LOG_ERROR, -                       "Not a client process, not performing mount operation"); -                return -1; -        } - -        master = GF_CALLOC (1, sizeof (*master), -                            gfd_mt_xlator_t); -        if (!master) -                goto err; - -        master->name = gf_strdup ("fuse"); -        if (!master->name) -                goto err; - -        if (xlator_set_type (master, "mount/fuse") == -1) { -                gf_log ("glusterfsd", GF_LOG_ERROR, -                        "MOUNT-POINT %s initialization failed", -                        cmd_args->mount_point); -                goto err; -        } - -        master->ctx      = ctx; -        master->options  = get_new_dict (); -        if (!master->options) -                goto err; -          /* Check if mount-point is absolute path,           * if not convert to absolute path by concating with CWD           */ @@ -274,7 +247,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          } else                  mount_point = gf_strdup (cmd_args->mount_point); -        ret = dict_set_dynstr (master->options, ZR_MOUNTPOINT_OPT, mount_point); +        ret = dict_set_dynstr (options, ZR_MOUNTPOINT_OPT, mount_point);          if (ret < 0) {                  gf_log ("glusterfsd", GF_LOG_ERROR,                          "failed to set mount-point to options dictionary"); @@ -282,7 +255,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->fuse_attribute_timeout >= 0) { -                ret = dict_set_double (master->options, ZR_ATTR_TIMEOUT_OPT, +                ret = dict_set_double (options, ZR_ATTR_TIMEOUT_OPT,                                         cmd_args->fuse_attribute_timeout);                  if (ret < 0) { @@ -294,7 +267,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->fuse_entry_timeout >= 0) { -                ret = dict_set_double (master->options, ZR_ENTRY_TIMEOUT_OPT, +                ret = dict_set_double (options, ZR_ENTRY_TIMEOUT_OPT,                                         cmd_args->fuse_entry_timeout);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -305,7 +278,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->fuse_negative_timeout >= 0) { -                ret = dict_set_double (master->options, ZR_NEGATIVE_TIMEOUT_OPT, +                ret = dict_set_double (options, ZR_NEGATIVE_TIMEOUT_OPT,                                         cmd_args->fuse_negative_timeout);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -316,7 +289,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->client_pid_set) { -                ret = dict_set_int32 (master->options, "client-pid", +                ret = dict_set_int32 (options, "client-pid",                                        cmd_args->client_pid);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -327,7 +300,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->uid_map_root) { -                ret = dict_set_int32 (master->options, "uid-map-root", +                ret = dict_set_int32 (options, "uid-map-root",                                        cmd_args->uid_map_root);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -338,7 +311,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->volfile_check) { -                ret = dict_set_int32 (master->options, ZR_STRICT_VOLFILE_CHECK, +                ret = dict_set_int32 (options, ZR_STRICT_VOLFILE_CHECK,                                        cmd_args->volfile_check);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -349,7 +322,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->dump_fuse) { -                ret = dict_set_static_ptr (master->options, ZR_DUMP_FUSE, +                ret = dict_set_static_ptr (options, ZR_DUMP_FUSE,                                             cmd_args->dump_fuse);                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -360,7 +333,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->acl) { -                ret = dict_set_static_ptr (master->options, "acl", "on"); +                ret = dict_set_static_ptr (options, "acl", "on");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR,                                  "failed to set dict value for key acl"); @@ -369,7 +342,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->selinux) { -                ret = dict_set_static_ptr (master->options, "selinux", "on"); +                ret = dict_set_static_ptr (options, "selinux", "on");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR,                                  "failed to set dict value for key selinux"); @@ -378,7 +351,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (cmd_args->read_only) { -                ret = dict_set_static_ptr (master->options, "read-only", "on"); +                ret = dict_set_static_ptr (options, "read-only", "on");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR,                                  "failed to set dict value for key read-only"); @@ -387,7 +360,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }  	if (cmd_args->fopen_keep_cache) { -		ret = dict_set_static_ptr(master->options, "fopen-keep-cache", +		ret = dict_set_static_ptr(options, "fopen-keep-cache",  			"on");  		if (ret < 0) {  			gf_log("glusterfsd", GF_LOG_ERROR, @@ -398,7 +371,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)  	}  	if (cmd_args->gid_timeout) { -		ret = dict_set_int32(master->options, "gid-timeout", +		ret = dict_set_int32(options, "gid-timeout",  			cmd_args->gid_timeout);  		if (ret < 0) {  			gf_log("glusterfsd", GF_LOG_ERROR, "failed to set dict " @@ -406,10 +379,28 @@ create_fuse_mount (glusterfs_ctx_t *ctx)  			goto err;  		}  	} +	if (cmd_args->background_qlen) { +		ret = dict_set_int32 (options, "background-qlen", +                                      cmd_args->background_qlen); +		if (ret < 0) { +			gf_log("glusterfsd", GF_LOG_ERROR, "failed to set dict " +                               "value for key background-qlen"); +			goto err; +		} +	} +	if (cmd_args->congestion_threshold) { +		ret = dict_set_int32 (options, "congestion-threshold", +                                      cmd_args->congestion_threshold); +		if (ret < 0) { +			gf_log("glusterfsd", GF_LOG_ERROR, "failed to set dict " +                               "value for key congestion-threshold"); +			goto err; +		} +	}          switch (cmd_args->fuse_direct_io_mode) {          case GF_OPTION_DISABLE: /* disable */ -                ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT, +                ret = dict_set_static_ptr (options, ZR_DIRECT_IO_OPT,                                             "disable");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -419,7 +410,7 @@ create_fuse_mount (glusterfs_ctx_t *ctx)                  }                  break;          case GF_OPTION_ENABLE: /* enable */ -                ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT, +                ret = dict_set_static_ptr (options, ZR_DIRECT_IO_OPT,                                             "enable");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR, @@ -436,14 +427,64 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          }          if (!cmd_args->no_daemon_mode) { -                 ret = dict_set_static_ptr (master->options, "sync-to-mount", -                                            "enable"); +                ret = dict_set_static_ptr (options, "sync-to-mount", +                                           "enable");                  if (ret < 0) {                          gf_log ("glusterfsd", GF_LOG_ERROR,                                  "failed to set dict value for key sync-mtab");                          goto err;                  }          } +        ret = 0; +err: +        return ret; +} + +int +create_fuse_mount (glusterfs_ctx_t *ctx) +{ +        int              ret = 0; +        cmd_args_t      *cmd_args = NULL; +        xlator_t        *master = NULL; + +        cmd_args = &ctx->cmd_args; + +        if (!cmd_args->mount_point) { +                gf_log ("", GF_LOG_TRACE, +                        "mount point not found, not a client process"); +                return 0; +        } + +        if (ctx->process_mode != GF_CLIENT_PROCESS) { +                gf_log("glusterfsd", GF_LOG_ERROR, +                       "Not a client process, not performing mount operation"); +                return -1; +        } + +        master = GF_CALLOC (1, sizeof (*master), +                            gfd_mt_xlator_t); +        if (!master) +                goto err; + +        master->name = gf_strdup ("fuse"); +        if (!master->name) +                goto err; + +        if (xlator_set_type (master, "mount/fuse") == -1) { +                gf_log ("glusterfsd", GF_LOG_ERROR, +                        "MOUNT-POINT %s initialization failed", +                        cmd_args->mount_point); +                goto err; +        } + +        master->ctx      = ctx; +        master->options  = get_new_dict (); +        if (!master->options) +                goto err; + +        ret = set_fuse_mount_options (ctx, master->options); +        if (ret) +                goto err;          ret = xlator_init (master);          if (ret) { @@ -870,6 +911,20 @@ parse_opts (int key, char *arg, struct argp_state *state)  		argp_failure(state, -1, 0, "unknown group list timeout %s", arg);  		break; +        case ARGP_FUSE_BACKGROUND_QLEN_KEY: +                if (!gf_string2int (arg, &cmd_args->background_qlen)) +                        break; + +                argp_failure (state, -1, 0, +                              "unknown background qlen option %s", arg); +                break; +        case ARGP_FUSE_CONGESTION_THRESHOLD_KEY: +                if (!gf_string2int (arg, &cmd_args->congestion_threshold)) +                        break; + +                argp_failure (state, -1, 0, +                              "unknown congestion threshold option %s", arg); +                break;  	}          return 0; diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 4f08cd31..05851160 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -90,6 +90,8 @@ enum argp_option_keys {          ARGP_SELINUX_KEY                  = 158,  	ARGP_FOPEN_KEEP_CACHE_KEY	  = 159,  	ARGP_GID_TIMEOUT_KEY		  = 160, +	ARGP_FUSE_BACKGROUND_QLEN_KEY     = 161, +	ARGP_FUSE_CONGESTION_THRESHOLD_KEY = 162,  };  struct _gfd_vol_top_priv_t {  | 
