[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