[Pvfs2-developers] patches: syslog and gossip messages
Sam Lang
slang at mcs.anl.gov
Wed Aug 15 14:43:42 EDT 2007
Hi Phil,
Committed these. Thanks!
-sam
On Jul 3, 2007, at 2:22 PM, Phil Carns wrote:
> pvfs2-error-cleanup.patch:
> --------------------------
> This patch updates a gossip_debug() message in trove to be a
> gossip_err() in order to help diagnose configuration problems that
> can happen if your configuration file is out of sync with your
> storage space. It also changes several gossip_lerr() calls in
> pvfs2-server.c to be gossip_err() calls instead. Most of those are
> generic startup/configuration problems that don't really need line
> or backtrace information.
>
> pvfs2-syslog.patch:
> ---------------------------
> This patch brings the syslog backend of gossip up to working order.
> There were a few bugs in the implementation. You can now enable
> syslog for servers by adding "LogType syslog" to the configuration
> file. You can also enable sylog for pvfs2-client by using the "--
> logtype syslog" command line argument. The default behavior has
> not changed.
>
> -Phil
> Index: pvfs2_src/src/apps/admin/module.mk.in
> ===================================================================
> --- pvfs2_src/src/apps/admin/module.mk.in (revision 3721)
> +++ pvfs2_src/src/apps/admin/module.mk.in (revision 3722)
> @@ -1,6 +1,7 @@
> DIR := src/apps/admin
>
> ADMINSRC := \
> + $(DIR)/truncater.c \
> $(DIR)/pvfs2-check-config.c \
> $(DIR)/pvfs2-set-debugmask.c \
> $(DIR)/pvfs2-set-mode.c \
> Index: pvfs2_src/src/server/pvfs2-server.c
> ===================================================================
> --- pvfs2_src/src/server/pvfs2-server.c (revision 3721)
> +++ pvfs2_src/src/server/pvfs2-server.c (revision 3722)
> @@ -844,7 +844,7 @@
>
> if (ret < 0)
> {
> - gossip_lerr("error opening log file %s\n",
> + gossip_err("error opening log file %s\n",
> server_config.logfile);
> return ret;
> }
> @@ -931,7 +931,7 @@
>
> if (chdir("/"))
> {
> - gossip_lerr("cannot change working directory to \"/\" "
> + gossip_err("cannot change working directory to \"/\" "
> "(errno = %x). aborting.\n", errno);
> return(-PVFS_EINVAL);
> }
> @@ -943,7 +943,7 @@
> new_pid = fork();
> if (new_pid < 0)
> {
> - gossip_lerr("error in fork() system call (errno = %x). "
> + gossip_err("error in fork() system call (errno = %x). "
> "aborting.\n", errno);
> return(-PVFS_EINVAL);
> }
> @@ -956,7 +956,7 @@
> new_pid = setsid();
> if (new_pid < 0)
> {
> - gossip_lerr("error in setsid() system call. aborting.
> \n");
> + gossip_err("error in setsid() system call. aborting.
> \n");
> return(-PVFS_EINVAL);
> }
> }
> @@ -1143,7 +1143,7 @@
>
> if (ret < 0)
> {
> - gossip_lerr("Error initializing filesystem %s\n",
> + gossip_err("Error initializing filesystem %s\n",
> cur_fs->file_system_name);
> return ret;
> }
> @@ -1177,7 +1177,7 @@
> */
> if (!cur_merged_handle_range)
> {
> - gossip_lerr("Error: Invalid handle range for host %s "
> + gossip_err("Error: Invalid handle range for host %s "
> "(alias %s) specified in file system %s\n",
> server_config.host_id,
> PINT_config_get_host_alias_ptr(
> @@ -1190,7 +1190,7 @@
> ret = trove_open_context(cur_fs->coll_id,
> &trove_context);
> if (ret < 0)
> {
> - gossip_lerr("Error initializing trove context\n");
> + gossip_err("Error initializing trove context\n");
> return ret;
> }
>
> @@ -1205,7 +1205,7 @@
> (void *)&cur_fs->handle_recycle_timeout_sec);
> if (ret < 0)
> {
> - gossip_lerr("Error setting handle timeout\n");
> + gossip_err("Error setting handle timeout\n");
> }
>
> if (cur_fs->attr_cache_keywords &&
> @@ -1218,7 +1218,7 @@
> (void *)cur_fs->attr_cache_keywords);
> if (ret < 0)
> {
> - gossip_lerr("Error setting attr cache keywords
> \n");
> + gossip_err("Error setting attr cache keywords
> \n");
> }
> ret = trove_collection_setinfo(
> cur_fs->coll_id, trove_context,
> @@ -1226,7 +1226,7 @@
> (void *)&cur_fs->attr_cache_size);
> if (ret < 0)
> {
> - gossip_lerr("Error setting attr cache size\n");
> + gossip_err("Error setting attr cache size\n");
> }
> ret = trove_collection_setinfo(
> cur_fs->coll_id, trove_context,
> @@ -1234,7 +1234,7 @@
> (void *)&cur_fs->attr_cache_max_num_elems);
> if (ret < 0)
> {
> - gossip_lerr("Error setting attr cache max num
> elems\n");
> + gossip_err("Error setting attr cache max num
> elems\n");
> }
> ret = trove_collection_setinfo(
> cur_fs->coll_id, trove_context,
> @@ -1242,7 +1242,7 @@
> (void *)0);
> if (ret < 0)
> {
> - gossip_lerr("Error initializing the attr cache
> \n");
> + gossip_err("Error initializing the attr cache
> \n");
> }
> }
>
> @@ -1258,7 +1258,7 @@
> (void *)cur_merged_handle_range);
> if (ret < 0)
> {
> - gossip_lerr("Error adding handle range %s to "
> + gossip_err("Error adding handle range %s to "
> "filesystem %s\n",
> cur_merged_handle_range,
> cur_fs->file_system_name);
> @@ -1271,7 +1271,7 @@
> (void *)&cur_fs->coalescing_high_watermark);
> if(ret < 0)
> {
> - gossip_lerr("Error setting coalescing high
> watermark\n");
> + gossip_err("Error setting coalescing high watermark
> \n");
> return ret;
> }
>
> @@ -1281,7 +1281,7 @@
> (void *)&cur_fs->coalescing_low_watermark);
> if(ret < 0)
> {
> - gossip_lerr("Error setting coalescing low watermark
> \n");
> + gossip_err("Error setting coalescing low watermark
> \n");
> return ret;
> }
>
> @@ -1291,7 +1291,7 @@
> (void *)&cur_fs->trove_sync_meta);
> if(ret < 0)
> {
> - gossip_lerr("Error setting coalescing low watermark
> \n");
> + gossip_err("Error setting coalescing low watermark
> \n");
> return ret;
> }
>
> @@ -1301,7 +1301,7 @@
> (void *)&cur_fs->immediate_completion);
> if(ret < 0)
> {
> - gossip_lerr("Error setting trove immediate
> completion\n");
> + gossip_err("Error setting trove immediate
> completion\n");
> return ret;
> }
>
> Index: pvfs2_src/src/io/trove/trove-handle-mgmt/trove-handle-mgmt.c
> ===================================================================
> --- pvfs2_src/src/io/trove/trove-handle-mgmt/trove-handle-mgmt.c
> (revision 3721)
> +++ pvfs2_src/src/io/trove/trove-handle-mgmt/trove-handle-mgmt.c
> (revision 3722)
> @@ -116,8 +116,8 @@
> if (!PINT_handle_in_extent_list(extent_list,
> handles[i]))
> {
> - gossip_debug(
> - GOSSIP_TROVE_DEBUG, "handle %llu is
> invalid "
> + gossip_err(
> + "Error: handle %llu is invalid "
> "(out of bounds)\n", llu(handles[i]));
> return -1;
> }
> Index: pvfs2_src/src/apps/admin/module.mk.in
> ===================================================================
> --- pvfs2_src/src/apps/admin/module.mk.in (revision 3722)
> +++ pvfs2_src/src/apps/admin/module.mk.in (revision 3723)
> @@ -1,7 +1,6 @@
> DIR := src/apps/admin
>
> ADMINSRC := \
> - $(DIR)/truncater.c \
> $(DIR)/pvfs2-check-config.c \
> $(DIR)/pvfs2-set-debugmask.c \
> $(DIR)/pvfs2-set-mode.c \
> Index: pvfs2_src/src/server/pvfs2-server.c
> ===================================================================
> --- pvfs2_src/src/server/pvfs2-server.c (revision 3654)
> +++ pvfs2_src/src/server/pvfs2-server.c (revision 3655)
> @@ -825,7 +825,15 @@
> freopen("/dev/null", "w", stdout);
> freopen("/dev/null", "w", stderr);
>
> - ret = gossip_enable_file(server_config.logfile, "a");
> + if(!strcmp(server_config.logtype, "syslog"))
> + {
> + ret = gossip_enable_syslog(LOG_INFO);
> + }
> + else
> + {
> + ret = gossip_enable_file(server_config.logfile, "a");
> + }
> +
> if (ret < 0)
> {
> gossip_lerr("error opening log file %s\n",
> Index: pvfs2_src/src/common/gossip/gossip.c
> ===================================================================
> --- pvfs2_src/src/common/gossip/gossip.c (revision 3654)
> +++ pvfs2_src/src/common/gossip/gossip.c (revision 3655)
> @@ -49,7 +49,7 @@
> static FILE *internal_log_file = NULL;
>
> /* syslog priority setting */
> -static int internal_syslog_priority = LOG_USER;
> +static int internal_syslog_priority = LOG_INFO;
>
> /* what type of timestamp to put on logs */
> static enum gossip_logstamp internal_logstamp =
> GOSSIP_LOGSTAMP_DEFAULT;
> @@ -97,6 +97,8 @@
> internal_syslog_priority = priority;
> gossip_facility = GOSSIP_SYSLOG;
>
> + openlog("PVFS2", 0, LOG_DAEMON);
> +
> /* restore the logging settings */
> gossip_debug_on = tmp_debug_on;
> gossip_debug_mask = tmp_debug_mask;
> Index: pvfs2_src/src/common/misc/server-config.c
> ===================================================================
> --- pvfs2_src/src/common/misc/server-config.c (revision 3654)
> +++ pvfs2_src/src/common/misc/server-config.c (revision 3655)
> @@ -64,6 +64,7 @@
> static DOTCONF_CB(get_root_handle);
> static DOTCONF_CB(get_name);
> static DOTCONF_CB(get_logfile);
> +static DOTCONF_CB(get_logtype);
> static DOTCONF_CB(get_event_logging_list);
> static DOTCONF_CB(get_filesystem_collid);
> static DOTCONF_CB(get_alias_list);
> @@ -475,6 +476,15 @@
> {"LogFile",ARG_STR, get_logfile,NULL,
> CTX_DEFAULTS|CTX_GLOBAL,"/tmp/pvfs2-server.log"},
>
> + /* The LogType option can be used to control the destination
> of log
> + * messages from PVFS2 server. The default value is "file",
> which causes
> + * all log messages to be written to the file specified by the
> LogFile
> + * parameter. Another option is "syslog", which causes all
> log messages
> + * to be written to syslog.
> + */
> + {"LogType",ARG_STR, get_logtype,NULL,
> + CTX_DEFAULTS|CTX_GLOBAL,"file"},
> +
> /* The gossip interface in pvfs allows users to specify different
> * levels of logging for the pvfs server. This option sets
> that level for
> * either all servers (by being defined in the Defaults
> context) or for
> @@ -1380,6 +1390,18 @@
> return NULL;
> }
>
> +DOTCONF_CB(get_logtype)
> +{
> + struct server_configuration_s *config_s =
> + (struct server_configuration_s *)cmd->context;
> + /* free whatever was added in set_defaults phase */
> + if (config_s->logtype)
> + free(config_s->logtype);
> + config_s->logtype = (cmd->data.str ? strdup(cmd->data.str) :
> NULL);
> + return NULL;
> +}
> +
> +
> DOTCONF_CB(get_event_logging_list)
> {
> struct server_configuration_s *config_s =
> @@ -2540,6 +2562,12 @@
> config_s->logfile = NULL;
> }
>
> + if (config_s->logtype)
> + {
> + free(config_s->logtype);
> + config_s->logtype = NULL;
> + }
> +
> if (config_s->event_logging)
> {
> free(config_s->event_logging);
> Index: pvfs2_src/src/common/misc/server-config.h
> ===================================================================
> --- pvfs2_src/src/common/misc/server-config.h (revision 3654)
> +++ pvfs2_src/src/common/misc/server-config.h (revision 3655)
> @@ -147,7 +147,8 @@
> int client_retry_delay_ms; /* delay between retries */
> int perf_update_interval; /* how quickly (in msecs) to
> update perf
> monitor */
> - char *logfile;
> + char *logfile; /* what log file to write to */
> + char *logtype; /* "file" or "syslog"
> destination */
> enum gossip_logstamp logstamp_type; /* how to timestamp logs */
> char *event_logging;
> char *bmi_modules; /* BMI
> modules */
> Index: pvfs2_src/src/apps/kernel/linux/pvfs2-client-core.c
> ===================================================================
> --- pvfs2_src/src/apps/kernel/linux/pvfs2-client-core.c (revision
> 3662)
> +++ pvfs2_src/src/apps/kernel/linux/pvfs2-client-core.c (revision
> 3663)
> @@ -76,6 +76,7 @@
> int acache_timeout;
> int ncache_timeout;
> char* logfile;
> + char* logtype;
> unsigned int acache_hard_limit;
> int acache_hard_limit_set;
> unsigned int acache_soft_limit;
> @@ -3127,12 +3128,30 @@
> return ret;
> }
>
> - ret = gossip_enable_file(s_opts.logfile, "a");
> - if(ret < 0)
> + if(!strcmp(s_opts.logtype, "file"))
> {
> - fprintf(stderr, "Error opening logfile: %s\n",
> s_opts.logfile);
> - return(ret);
> + ret = gossip_enable_file(s_opts.logfile, "a");
> + if(ret < 0)
> + {
> + fprintf(stderr, "Error opening logfile: %s\n",
> s_opts.logfile);
> + return(ret);
> + }
> }
> + else if(!strcmp(s_opts.logtype, "syslog"))
> + {
> + ret = gossip_enable_syslog(LOG_INFO);
> + if(ret < 0)
> + {
> + fprintf(stderr, "Error opening syslog\n");
> + return(ret);
> + }
> + }
> + else
> + {
> + fprintf(stderr, "Error: unsupported log type.\n");
> + return(-PVFS_EINVAL);
> + }
> +
> /* get rid of stdout/stderr/stdin */
> freopen("/dev/null", "r", stdin);
> freopen("/dev/null", "w", stdout);
> @@ -3342,6 +3361,7 @@
> printf("--perf-time-interval-secs=SECONDS length of perf
> counter intervals\n");
> printf("--perf-history-size=VALUE number of perf counter
> intervals to maintain\n");
> printf("--logfile=VALUE override the default log
> file\n");
> + printf("--logtype=file|syslog specify writing logs to
> file or syslog\n");
> printf("--logstamp=none|usec|datetime overrides the default
> log message's time stamp\n");
> printf("--gossip-mask=MASK_LIST gossip logging mask\n");
> printf("--desc-count=VALUE overrides the default #
> of kernel buffer descriptors\n");
> @@ -3369,6 +3389,7 @@
> {"desc-count",1,0,0},
> {"desc-size",1,0,0},
> {"logfile",1,0,0},
> + {"logtype",1,0,0},
> {"logstamp",1,0,0},
> {"standalone",0,0,0},
> {0,0,0,0}
> @@ -3424,6 +3445,10 @@
> {
> goto do_logfile;
> }
> + else if (strcmp("logtype", cur_option) == 0)
> + {
> + opts->logtype = optarg;
> + }
> else if (strcmp("logstamp", cur_option) == 0)
> {
> if(strcmp(optarg, "none") == 0)
> @@ -3586,6 +3611,10 @@
> {
> opts->logfile = DEFAULT_LOGFILE;
> }
> + if (!opts->logtype)
> + {
> + opts->logtype = "file";
> + }
> }
>
> static void reset_acache_timeout(void)
> Index: pvfs2_src/src/apps/kernel/linux/pvfs2-client.c
> ===================================================================
> --- pvfs2_src/src/apps/kernel/linux/pvfs2-client.c (revision 3662)
> +++ pvfs2_src/src/apps/kernel/linux/pvfs2-client.c (revision 3663)
> @@ -60,6 +60,7 @@
> char *dev_buffer_count;
> char *dev_buffer_size;
> int threaded;
> + char *logtype;
> } options_t;
>
> static void client_sig_handler(int signum);
> @@ -202,7 +203,18 @@
>
> if (WIFEXITED(ret))
> {
> - gossip_enable_file(opts->logfile, "a");
> + if(!strcmp(opts->logtype, "file"))
> + {
> + gossip_enable_file(opts->logfile, "a");
> + }
> + else if(!strcmp(opts->logtype, "syslog"))
> + {
> + gossip_enable_syslog(LOG_INFO);
> + }
> + else
> + {
> + gossip_enable_stderr();
> + }
> gossip_err("pvfs2-client-core with pid %d exited
> with "
> "value %d\n", core_pid, (int)WEXITSTATUS
> (ret));
> gossip_disable();
> @@ -286,6 +298,12 @@
> arg_list[arg_index++] = opts->ncache_timeout;
> arg_list[arg_index++] = "-L";
> arg_list[arg_index++] = opts->logfile;
> + if(opts->logtype)
> + {
> + arg_list[arg_index] = "--logtype";
> + arg_list[arg_index+1] = opts->logtype;
> + arg_index+=2;
> + }
> if(opts->acache_hard_limit)
> {
> arg_list[arg_index] = "--acache-hard-limit";
> @@ -407,6 +425,7 @@
> printf("-p PATH, --path PATH execute pvfs2-client at "
> "PATH\n");
> printf("--logstamp=none|usec|datetime override default log
> message time stamp format\n");
> + printf("--logtype=file|syslog specify writing logs to
> file or syslog\n");
> printf("--threaded use threaded client\n");
> }
>
> @@ -422,6 +441,7 @@
> {"verbose",0,0,0},
> {"foreground",0,0,0},
> {"logfile",1,0,0},
> + {"logtype",1,0,0},
> {"acache-timeout",1,0,0},
> {"acache-soft-limit",1,0,0},
> {"acache-hard-limit",1,0,0},
> @@ -483,6 +503,10 @@
> {
> goto do_logfile;
> }
> + else if (strcmp("logtype", cur_option) == 0)
> + {
> + opts->logtype = optarg;
> + }
> else if (strcmp("logstamp", cur_option) == 0)
> {
> opts->logstamp = optarg;
> @@ -599,14 +623,21 @@
> {
> opts->logfile = DEFAULT_LOGFILE;
> }
> - /* make sure that log file location is writable before
> proceeding */
> - ret = open(opts->logfile, O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
> - if(ret < 0)
> + if (!opts->logtype)
> {
> - fprintf(stderr, "Error: logfile (%s) isn't writable.\n",
> - opts->logfile);
> - exit(1);
> - }
> + opts->logtype = "file";
> + }
> + if(!strcmp(opts->logtype, "file"))
> + {
> + /* make sure that log file location is writable before
> proceeding */
> + ret = open(opts->logfile, O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR);
> + if(ret < 0)
> + {
> + fprintf(stderr, "Error: logfile (%s) isn't writable.\n",
> + opts->logfile);
> + exit(1);
> + }
> + }
>
> if (!opts->path)
> {
> Index: pvfs2_src/src/server/pvfs2-server.c
> ===================================================================
> --- pvfs2_src/src/server/pvfs2-server.c (revision 3662)
> +++ pvfs2_src/src/server/pvfs2-server.c (revision 3663)
> @@ -808,15 +808,19 @@
> uint64_t debug_mask = 0;
>
> assert(server_config.logfile != NULL);
> - dummy = fopen(server_config.logfile, "a");
> - if (dummy == NULL)
> +
> + if(!strcmp(server_config.logtype, "file"))
> {
> - int tmp_errno = errno;
> - gossip_err("error opening log file %s\n",
> - server_config.logfile);
> - return -tmp_errno;
> + dummy = fopen(server_config.logfile, "a");
> + if (dummy == NULL)
> + {
> + int tmp_errno = errno;
> + gossip_err("error opening log file %s\n",
> + server_config.logfile);
> + return -tmp_errno;
> + }
> + fclose(dummy);
> }
> - fclose(dummy);
>
> /* redirect gossip to specified target if backgrounded */
> if (s_server_options.server_background)
> @@ -829,10 +833,14 @@
> {
> ret = gossip_enable_syslog(LOG_INFO);
> }
> - else
> + else if(!strcmp(server_config.logtype, "file"))
> {
> ret = gossip_enable_file(server_config.logfile, "a");
> }
> + else
> + {
> + ret = gossip_enable_stderr();
> + }
>
> if (ret < 0)
> {
> Index: pvfs2_src/src/apps/kernel/linux/pvfs2-client.c
> ===================================================================
> --- pvfs2_src/src/apps/kernel/linux/pvfs2-client.c (revision 3663)
> +++ pvfs2_src/src/apps/kernel/linux/pvfs2-client.c (revision 3664)
> @@ -296,13 +296,16 @@
> arg_list[arg_index++] = opts->acache_timeout;
> arg_list[arg_index++] = "-n";
> arg_list[arg_index++] = opts->ncache_timeout;
> - arg_list[arg_index++] = "-L";
> - arg_list[arg_index++] = opts->logfile;
> if(opts->logtype)
> {
> arg_list[arg_index] = "--logtype";
> arg_list[arg_index+1] = opts->logtype;
> arg_index+=2;
> + if(!strcmp(opts->logtype, "file"))
> + {
> + arg_list[arg_index++] = "-L";
> + arg_list[arg_index++] = opts->logfile;
> + }
> }
> if(opts->acache_hard_limit)
> {
> _______________________________________________
> Pvfs2-developers mailing list
> Pvfs2-developers at beowulf-underground.org
> http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers
More information about the Pvfs2-developers
mailing list