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
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers