diff options
Diffstat (limited to 'glusterfsd/src/glusterfsd.c')
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 188 |
1 files changed, 103 insertions, 85 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 253b6b8393e..d784e0d877e 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -111,8 +111,6 @@ static struct argp_option gf_options[] = { "File to use as VOLUME_FILE"}, {"spec-file", ARGP_VOLUME_FILE_KEY, "VOLFILE", OPTION_HIDDEN, "File to use as VOLUME FILE"}, - {"log-server", ARGP_LOG_SERVER_KEY, "LOGSERVER", 0, - "Server to use as the central log server"}, {"log-level", ARGP_LOG_LEVEL_KEY, "LOGLEVEL", 0, "Logging severity. Valid options are DEBUG, NORMAL, WARNING, ERROR, " @@ -129,8 +127,6 @@ static struct argp_option gf_options[] = { "Transport type to get volfile from server [default: socket]"}, {"volfile-id", ARGP_VOLFILE_ID_KEY, "KEY", 0, "'key' of the volfile to be fetched from server"}, - {"log-server-port", ARGP_LOG_SERVER_PORT_KEY, "PORT", 0, - "Listening port number of log server"}, {"pid-file", ARGP_PID_FILE_KEY, "PIDFILE", 0, "File to use as pid file"}, {"socket-file", ARGP_SOCK_FILE_KEY, "SOCKFILE", 0, @@ -200,8 +196,11 @@ create_fuse_mount (glusterfs_ctx_t *ctx) cmd_args = &ctx->cmd_args; - if (!cmd_args->mount_point) + if (!cmd_args->mount_point) { + gf_log ("", GF_LOG_TRACE, + "mount point not found, not a client process"); return 0; + } master = GF_CALLOC (1, sizeof (*master), gfd_mt_xlator_t); @@ -221,6 +220,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) master->ctx = ctx; master->options = get_new_dict (); + if (!master->options) + goto err; ret = dict_set_static_ptr (master->options, ZR_MOUNTPOINT_OPT, cmd_args->mount_point); @@ -236,7 +237,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set dict value for key %s", + ZR_ATTR_TIMEOUT_OPT); goto err; } } @@ -246,7 +248,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) cmd_args->fuse_entry_timeout); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set dict value for key %s", + ZR_ENTRY_TIMEOUT_OPT); goto err; } } @@ -256,7 +259,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) cmd_args->client_pid); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set dict value for key %s", + "client-pid"); goto err; } } @@ -266,7 +270,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) cmd_args->volfile_check); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set dict value for key %s", + ZR_STRICT_VOLFILE_CHECK); goto err; } } @@ -276,7 +281,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) cmd_args->dump_fuse); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set dict value for key %s", + ZR_DUMP_FUSE); goto err; } } @@ -287,7 +293,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) "disable"); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set 'disable' for key %s", + ZR_DIRECT_IO_OPT); goto err; } break; @@ -296,18 +303,23 @@ create_fuse_mount (glusterfs_ctx_t *ctx) "enable"); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, - "failed to set dict value."); + "failed to set 'enable' for key %s", + ZR_DIRECT_IO_OPT); goto err; } break; case GF_OPTION_DEFERRED: /* default */ default: + gf_log ("", GF_LOG_DEBUG, "fuse direct io type %d", + cmd_args->fuse_direct_io_mode); break; } ret = xlator_init (master); - if (ret) + if (ret) { + gf_log ("", GF_LOG_DEBUG, "failed to initialize fuse translator"); goto err; + } ctx->master = master; @@ -375,16 +387,25 @@ gf_remember_xlator_option (struct list_head *options, char *arg) INIT_LIST_HEAD (&option->cmd_args); dot = strchr (arg, '.'); - if (!dot) + if (!dot) { + gf_log ("", GF_LOG_WARNING, + "xlator option %s is invalid", arg); goto out; + } option->volume = GF_CALLOC ((dot - arg) + 1, sizeof (char), gfd_mt_char); + if (!option->volume) + goto out; + strncpy (option->volume, arg, (dot - arg)); equals = strchr (arg, '='); - if (!equals) + if (!equals) { + gf_log ("", GF_LOG_WARNING, + "xlator option %s is invalid", arg); goto out; + } option->key = GF_CALLOC ((equals - dot) + 1, sizeof (char), gfd_mt_char); @@ -393,8 +414,11 @@ gf_remember_xlator_option (struct list_head *options, char *arg) strncpy (option->key, dot + 1, (equals - dot - 1)); - if (!*(equals + 1)) + if (!*(equals + 1)) { + gf_log ("", GF_LOG_WARNING, + "xlator option %s is invalid", arg); goto out; + } option->value = gf_strdup (equals + 1); @@ -488,13 +512,6 @@ parse_opts (int key, char *arg, struct argp_state *state) break; - case ARGP_LOG_SERVER_KEY: - if (cmd_args->log_server) - GF_FREE (cmd_args->log_server); - - cmd_args->log_server = gf_strdup (arg); - break; - case ARGP_LOG_LEVEL_KEY: if (strcasecmp (arg, ARGP_LOG_LEVEL_NONE_OPTION) == 0) { cmd_args->log_level = GF_LOG_NONE; @@ -544,18 +561,6 @@ parse_opts (int key, char *arg, struct argp_state *state) "unknown volfile server port %s", arg); break; - case ARGP_LOG_SERVER_PORT_KEY: - n = 0; - - if (gf_string2uint_base10 (arg, &n) == 0) { - cmd_args->log_server_port = n; - break; - } - - argp_failure (state, -1, 0, - "unknown log server port %s", arg); - break; - case ARGP_VOLFILE_SERVER_TRANSPORT_KEY: cmd_args->volfile_server_transport = gf_strdup (arg); break; @@ -642,7 +647,9 @@ parse_opts (int key, char *arg, struct argp_state *state) break; case ARGP_XLATOR_OPTION_KEY: - gf_remember_xlator_option (&cmd_args->xlator_options, arg); + if (gf_remember_xlator_option (&cmd_args->xlator_options, arg)) + argp_failure (state, -1, 0, "invalid xlator option %s", arg); + break; case ARGP_KEY_NO_ARGS: @@ -686,9 +693,12 @@ cleanup_and_exit (int signum) ctx = glusterfs_ctx_get (); - /* TODO: is this the right place? */ if (!ctx) return; + + gf_log_callingfn ("", GF_LOG_WARNING, + "received signum (%d), shutting down", signum); + if (ctx->cleanup_started) return; @@ -707,8 +717,6 @@ cleanup_and_exit (int signum) trav->fini (trav); } - gf_log ("glusterfsd", GF_LOG_NORMAL, "shutting down"); - glusterfs_pidfile_cleanup (ctx); exit (0); @@ -742,24 +750,23 @@ reincarnate (int signum) ctx = glusterfs_ctx_get (); cmd_args = &ctx->cmd_args; - if (cmd_args->volfile_server) { - gf_log ("glusterfsd", GF_LOG_NORMAL, + gf_log ("glusterfsd", GF_LOG_INFO, "Fetching the volume file from server..."); ret = glusterfs_volfile_fetch (ctx); } else { - gf_log ("glusterfsd", GF_LOG_NORMAL, + gf_log ("glusterfsd", GF_LOG_INFO, "Reloading volfile ..."); ret = glusterfs_volumes_init (ctx); } + /* Also, SIGHUP should do logroate */ + gf_log_logrotate (1); + if (ret < 0) gf_log ("glusterfsd", GF_LOG_ERROR, "volume initialization failed."); - /* Also, SIGHUP should do logroate */ - gf_log_logrotate (1); - return; } @@ -845,10 +852,6 @@ set_log_file_path (cmd_args_t *cmd_args) ret = gf_asprintf (&cmd_args->log_file, DEFAULT_LOG_FILE_DIRECTORY "/%s.log", tmp_str); - if (ret == -1) { - gf_log ("glusterfsd", GF_LOG_ERROR, - "asprintf failed while setting up log-file"); - } goto done; } @@ -865,10 +868,6 @@ set_log_file_path (cmd_args_t *cmd_args) ret = gf_asprintf (&cmd_args->log_file, DEFAULT_LOG_FILE_DIRECTORY "/%s.log", tmp_str); - if (ret == -1) { - gf_log ("glusterfsd", GF_LOG_ERROR, - "asprintf failed while setting up log-file"); - } goto done; } @@ -884,10 +883,6 @@ set_log_file_path (cmd_args_t *cmd_args) ret = gf_asprintf (&cmd_args->log_file, DEFAULT_LOG_FILE_DIRECTORY "/%s-%s-%d.log", cmd_args->volfile_server, tmp_ptr, port); - if (-1 == ret) { - gf_log ("glusterfsd", GF_LOG_ERROR, - "asprintf failed while setting up log-file"); - } } done: return ret; @@ -904,39 +899,59 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx) xlator_mem_acct_init (THIS, gfd_mt_end); ctx->process_uuid = generate_uuid (); - if (!ctx->process_uuid) + if (!ctx->process_uuid) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs uuid generation failed"); return -1; + } ctx->page_size = 128 * GF_UNIT_KB; ctx->iobuf_pool = iobuf_pool_new (8 * GF_UNIT_MB, ctx->page_size); - if (!ctx->iobuf_pool) + if (!ctx->iobuf_pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs iobuf pool creation failed"); return -1; + } ctx->event_pool = event_pool_new (DEFAULT_EVENT_POOL_SIZE); - if (!ctx->event_pool) + if (!ctx->event_pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs event pool creation failed"); return -1; + } pool = GF_CALLOC (1, sizeof (call_pool_t), gfd_mt_call_pool_t); - if (!pool) + if (!pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs call pool creation failed"); return -1; + } /* frame_mem_pool size 112 * 16k */ pool->frame_mem_pool = mem_pool_new (call_frame_t, 16384); - if (!pool->frame_mem_pool) + if (!pool->frame_mem_pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs frame pool creation failed"); return -1; - + } /* stack_mem_pool size 256 * 8k */ pool->stack_mem_pool = mem_pool_new (call_stack_t, 8192); - if (!pool->stack_mem_pool) + if (!pool->stack_mem_pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs stack pool creation failed"); return -1; + } ctx->stub_mem_pool = mem_pool_new (call_stub_t, 1024); - if (!ctx->stub_mem_pool) + if (!ctx->stub_mem_pool) { + gf_log ("", GF_LOG_CRITICAL, + "ERROR: glusterfs stub pool creation failed"); return -1; + } INIT_LIST_HEAD (&pool->all_frames); LOCK_INIT (&pool->lock); @@ -982,15 +997,13 @@ logging_init (glusterfs_ctx_t *ctx) if (cmd_args->log_file == NULL) { ret = set_log_file_path (cmd_args); if (ret == -1) { - fprintf (stderr, "failed to set the log file path.. " - "exiting\n"); + fprintf (stderr, "ERROR: failed to set the log file path\n"); return -1; } } if (gf_log_init (cmd_args->log_file) == -1) { - fprintf (stderr, - "failed to open logfile %s. exiting\n", + fprintf (stderr, "ERROR: failed to open logfile %s\n", cmd_args->log_file); return -1; } @@ -1059,7 +1072,7 @@ parse_cmdline (int argc, char *argv[], glusterfs_ctx_t *ctx) ret = sys_symlink (tmp_logfilebase, cmd_args->log_file); if (ret == -1) { - fprintf (stderr, "symlink of logfile failed"); + fprintf (stderr, "ERROR: symlink of logfile failed\n"); } else { GF_FREE (cmd_args->log_file); cmd_args->log_file = gf_strdup (tmp_logfile); @@ -1267,8 +1280,12 @@ glusterfs_signals_setup (glusterfs_ctx_t *ctx) sigaddset (&set, SIGUSR2); /* gf_latency_toggle */ ret = pthread_sigmask (SIG_BLOCK, &set, NULL); - if (ret) + if (ret) { + gf_log ("", GF_LOG_WARNING, + "failed to execute pthread_signmask %s", + strerror (errno)); return ret; + } ret = pthread_create (&ctx->sigwaiter, NULL, glusterfs_sigwaiter, (void *) &set); @@ -1278,6 +1295,9 @@ glusterfs_signals_setup (glusterfs_ctx_t *ctx) fallback to signals getting handled by other threads. setup the signal handlers */ + gf_log ("", GF_LOG_WARNING, + "failed to create pthread %s", + strerror (errno)); return ret; } @@ -1288,15 +1308,14 @@ glusterfs_signals_setup (glusterfs_ctx_t *ctx) int daemonize (glusterfs_ctx_t *ctx) { - int ret = 0; + int ret = -1; cmd_args_t *cmd_args = NULL; - cmd_args = &ctx->cmd_args; ret = glusterfs_pidfile_setup (ctx); if (ret) - return ret; + goto out; if (cmd_args->no_daemon_mode) goto postfork; @@ -1308,16 +1327,16 @@ daemonize (glusterfs_ctx_t *ctx) if (ret == -1) { gf_log ("daemonize", GF_LOG_ERROR, "Daemonization failed: %s", strerror(errno)); - return ret; + goto out; } postfork: ret = glusterfs_pidfile_update (ctx); if (ret) - return ret; + goto out; glusterfs_signals_setup (ctx); - +out: return ret; } @@ -1326,13 +1345,12 @@ int glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp) { glusterfs_graph_t *graph = NULL; - int ret = 0; + int ret = -1; xlator_t *trav = NULL; graph = glusterfs_graph_construct (fp); - if (!graph) { - ret = -1; + gf_log ("", GF_LOG_ERROR, "failed to construct the graph"); goto out; } @@ -1341,16 +1359,13 @@ glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp) gf_log ("glusterfsd", GF_LOG_ERROR, "fuse xlator cannot be specified " "in volume file"); - ret = -1; goto out; } } ret = glusterfs_graph_prepare (graph, ctx); - if (ret) { glusterfs_graph_destroy (graph); - ret = -1; goto out; } @@ -1358,12 +1373,12 @@ glusterfs_process_volfp (glusterfs_ctx_t *ctx, FILE *fp) if (ret) { glusterfs_graph_destroy (graph); - ret = -1; goto out; } gf_log_volume_file (fp); + ret = 0; out: if (fp) fclose (fp); @@ -1426,8 +1441,11 @@ main (int argc, char *argv[]) return ret; ctx = glusterfs_ctx_get (); - if (!ctx) + if (!ctx) { + gf_log ("glusterfs", GF_LOG_CRITICAL, + "ERROR: glusterfs context not initialized"); return ENOMEM; + } ret = glusterfs_ctx_defaults_init (ctx); if (ret) |