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

Reply via email to