diff options
| -rw-r--r-- | Makefile.am | 3 | ||||
| -rw-r--r-- | argp-standalone/configure.ac | 2 | ||||
| -rwxr-xr-x | autogen.sh | 19 | ||||
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | doc/logging.txt | 66 | ||||
| -rw-r--r-- | error-codes.json | 4 | ||||
| -rwxr-xr-x | gen-headers.py | 54 | ||||
| -rw-r--r-- | gf-error-codes.h.template | 33 | ||||
| -rw-r--r-- | libglusterfs/src/Makefile.am | 2 | ||||
| -rw-r--r-- | libglusterfs/src/logging.c | 61 | 
10 files changed, 12 insertions, 234 deletions
diff --git a/Makefile.am b/Makefile.am index 19f21fca8a2..0b65c68e778 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,8 +2,7 @@ EXTRA_DIST = autogen.sh \  	COPYING-GPLV2 COPYING-LGPLV3 \  	INSTALL README AUTHORS THANKS NEWS \  	glusterfs.spec glusterfs-api.pc.in libgfchangelog.pc.in \ -	error-codes.json gf-error-codes.h.template \ -	gen-headers.py run-tests.sh \ +	run-tests.sh \  	$(shell find $(top_srcdir)/tests -type f -print)  SUBDIRS = argp-standalone libglusterfs rpc api xlators glusterfsd \ diff --git a/argp-standalone/configure.ac b/argp-standalone/configure.ac index 2ecd2a801ab..8a892fc3cac 100644 --- a/argp-standalone/configure.ac +++ b/argp-standalone/configure.ac @@ -32,7 +32,7 @@ fi  # Checks for header files.  AC_HEADER_STDC -AC_CHECK_HEADERS(limits.h malloc.h unistd.h sysexits.h stdarg.h) +AC_CHECK_HEADERS(libintl.h limits.h malloc.h unistd.h sysexits.h stdarg.h)  # Checks for typedefs, structures, and compiler characteristics.  AC_C_CONST diff --git a/autogen.sh b/autogen.sh index cd8603b66d3..e870855169e 100755 --- a/autogen.sh +++ b/autogen.sh @@ -60,15 +60,6 @@ if [ $? -ne 0 ]; then    MISSING="$MISSING tar"  fi -# Check for python -if [ "x${PYTHONBIN}" = "x" ]; then -  PYTHONBIN=python -fi -env ${PYTHONBIN} -V > /dev/null 2>&1  -if [ $? -ne 0 ]; then -  MISSING="$MISSING python" -fi -  ## If dependencies are missing, warn the user and abort  if [ "x$MISSING" != "x" ]; then    echo "Aborting." @@ -84,16 +75,6 @@ if [ "x$MISSING" != "x" ]; then    exit 1  fi -## generate gf-error-codes.h from error-codes.json -echo "Generate gf-error-codes.h ..." -if ${PYTHONBIN} ./gen-headers.py; then -    if ! mv -fv gf-error-codes.h libglusterfs/src/gf-error-codes.h; then -	exit 1 -    fi -else -    exit 1 -fi -  ## Do the autogeneration  echo Running ${ACLOCAL}...  $ACLOCAL -I ./contrib/aclocal diff --git a/configure.ac b/configure.ac index 37998e60d77..06bd7a661a3 100644 --- a/configure.ac +++ b/configure.ac @@ -262,8 +262,6 @@ AC_CHECK_LIB([pthread], [pthread_mutex_init], , AC_MSG_ERROR([Posix threads libr  AC_CHECK_FUNC([dlopen], [has_dlopen=yes], AC_CHECK_LIB([dl], [dlopen], , AC_MSG_ERROR([Dynamic linking library required to build glusterfs]))) -AC_CHECK_FUNC([gettext], [has_gettext=yes], AC_CHECK_LIB([intl], [gettext], , AC_MSG_ERROR([gettext support is required to build glusterfs]))) -  AC_CHECK_HEADERS([sys/xattr.h])  AC_CHECK_HEADERS([sys/extattr.h]) diff --git a/doc/logging.txt b/doc/logging.txt deleted file mode 100644 index b4ee45996a5..00000000000 --- a/doc/logging.txt +++ /dev/null @@ -1,66 +0,0 @@ - -New logging framework in glusterfs is targeted for end users like -customers, community members, testers etc.  This aims to bring clear, -understandable logs called user logs whereas the current logging are -considered as developer logs.  The new framework brings with following -features - -* Each message is logged with proper well defined error code and each -  error code has well known error message. -* A logbook has defined error code and error messages.  It helps to -  keep track of possible causes and remedies -* Log are sent to syslog.  The syslog application can be configured to -  pass them to centralized logging system -* It brings -  - Remove repeated log messages -  - Send alerts to users on certain events -  - Run a program on events -  - Call home service on events - - -Log book: -========= -A log book is a JSON formatted file error-codes.json located in top -level of glusterfs source repository.  At compile time, gen-headers.py -generates libglusterfs/src/gf-error-codes.h using the log book and -gf-error-codes.h.template file.  libglusterfs/src/gf-error-codes.h -consists of header definitions and helper functions to get message by -code for given locale. Currently it has _gf_get_message() function -returns message for locale 'en'. - -New entry to log book is added like - -{ -    "IO_ERROR": {"code": 2233, -                 "message": {"en": "I/O error occurred"}}, -    "SETUP_ERROR": {"code": 2240, -                 "message": {"en": "Setup error"}}, -} - - -Logging: -======== -The framework provides two functions - -void gf_openlog (const char *ident, int option, int facility); -void gf_syslog (int error_code, int facility_priority, char *format, ...); - -Consumers need to call gf_openlog() prior to gf_syslog() like the way -traditional syslog function calls.  error_code is mandatory when using -gf_syslog().  For example, - -gf_openlog (NULL, -1, -1); -gf_syslog (GF_ERR_DEV, LOG_ERR, "error reading configuration file"); - -The logs are sent in CEE format (http://cee.mitre.org/) to syslog. -Its targeted to rsyslog syslog server. - -This log framework is enabled at compile time by default.  This can be -disabled by passing '--disable-syslog' to ./configure or '--without -syslog' to rpmbuild - -Even though its enabled at compile time, its required to have -/etc/glusterfs/logger.conf file to make it into effect before starting -gluster services - -Currently all gluster logs are sent with error code GF_ERR_DEV. diff --git a/error-codes.json b/error-codes.json deleted file mode 100644 index 5121049d309..00000000000 --- a/error-codes.json +++ /dev/null @@ -1,4 +0,0 @@ -{ -    "ERR_DEV": {"code": 9999, -		"message": {"en": "devel error"}} -} diff --git a/gen-headers.py b/gen-headers.py deleted file mode 100755 index ef9fa77117c..00000000000 --- a/gen-headers.py +++ /dev/null @@ -1,54 +0,0 @@ -#!/usr/bin/python - -import sys -try: -    import json -except ImportError: -    import simplejson as json -from string import Template - - -def getLogBook(logFile='error-codes.json'): -    fp = open(logFile) -    return json.load(fp) - - -def genCHeader(logBook, -               infile='gf-error-codes.h.template', -               outfile='gf-error-codes.h'): -    fp = open('gf-error-codes.h.template') -    s = fp.read() -    fp.close() -    template = Template(s) - -    defineLines = [] -    caseLines = [] -    for name, value in logBook.iteritems(): -        nameDef = "GF_%s" % (name.upper(),) -        code = value['code'] -        msgNameDef = "%s_MSG" % (nameDef,) -        msg = value['message']['en'] - -        defineLines.append("#define %-20s %d" % (nameDef, code)) -        defineLines.append("#define %-20s %s" % (msgNameDef, -                                                 json.dumps(msg))) -        caseLines.append("        case %s: return _(%s);" % \ -                             (nameDef, msgNameDef)) - -    d = {'DEFINES': "\n".join(defineLines), -         'CASES': "\n".join(caseLines)} -    #print template.substitute(d) - -    fp = open(outfile, 'w') -    fp.write(template.substitute(d)) -    fp.close() - - -if __name__ == "__main__": -    try: -        logBook = getLogBook() -        genCHeader(logBook) -        sys.exit(0) -    except IOError, e: -        print str(e) -        sys.exit(-1) diff --git a/gf-error-codes.h.template b/gf-error-codes.h.template deleted file mode 100644 index ab6020d640d..00000000000 --- a/gf-error-codes.h.template +++ /dev/null @@ -1,33 +0,0 @@ -/***************************************************************/ -/**                                                           **/ -/**                   DO NOT EDIT THIS FILE                   **/ -/**           THIS IS AUTO-GENERATED FROM LOG BOOK            **/ -/**         YOUR CHANGES WILL BE LOST IN NEXT BUILD           **/ -/**                                                           **/ -/***************************************************************/ - -#ifndef _GF_ERROR_CODES_H -#define _GF_ERROR_CODES_H - -#include <libintl.h> - -#define _(STRING)    gettext(STRING) - - -/** START: ERROR CODE DEFINITIONS **/ -$DEFINES -/** END: ERROR CODE DEFINITIONS **/ - - -/** START: FUNCTION RETURNS MESSAGE OF GIVEN ERROR CODE **/ -const char * -_gf_get_message (int code) { -        switch (code) { -$CASES -        default: return NULL; -        } -} -/** END: FUNCTION RETURNS MESSAGE OF GIVEN ERROR CODE **/ - - -#endif diff --git a/libglusterfs/src/Makefile.am b/libglusterfs/src/Makefile.am index 907399ae601..e7cbcbe8467 100644 --- a/libglusterfs/src/Makefile.am +++ b/libglusterfs/src/Makefile.am @@ -28,7 +28,7 @@ libglusterfs_la_SOURCES = dict.c xlator.c logging.c \  	$(CONTRIBDIR)/stdlib/gf_mkostemp.c -nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c gf-error-codes.h +nodist_libglusterfs_la_SOURCES = y.tab.c graph.lex.c  BUILT_SOURCES = graph.lex.c diff --git a/libglusterfs/src/logging.c b/libglusterfs/src/logging.c index 0058233a7cf..4a905a24def 100644 --- a/libglusterfs/src/logging.c +++ b/libglusterfs/src/logging.c @@ -23,14 +23,10 @@  #include <stdlib.h>  #ifdef GF_USE_SYSLOG -#include <libintl.h>  #include <syslog.h>  #include <sys/stat.h> -#include "gf-error-codes.h"  #define GF_JSON_MSG_LENGTH      8192 -#define GF_SYSLOG_CEE_FORMAT    \ -        "@cee: {\"msg\": \"%s\", \"gf_code\": \"%u\", \"gf_message\": \"%s\"}"  #define GF_LOG_CONTROL_FILE     "/etc/glusterfs/logger.conf"  #endif /* GF_USE_SYSLOG */ @@ -148,18 +144,6 @@ gf_log_fini (void *data)  }  #ifdef GF_USE_SYSLOG -/** - * gf_get_error_message -function to get error message for given error code - * @error_code: error code defined by log book - * - * @return: success: string - *          failure: NULL - */ -const char * -gf_get_error_message (int error_code) { -        return _gf_get_message (error_code); -} -  /**   * gf_openlog -function to open syslog specific to gluster based on @@ -186,8 +170,6 @@ gf_openlog (const char *ident, int option, int facility)          }          setlocale(LC_ALL, ""); -        bindtextdomain("gluster", "/usr/share/locale"); -        textdomain("gluster");          openlog(ident, _option, _facility);  } @@ -300,50 +282,28 @@ _json_escape(const char *str, char *buf, size_t len)  /**   * gf_syslog -function to submit message to syslog specific to gluster - * @error_code:        error code defined by log book   * @facility_priority: facility_priority of syslog()   * @format:            optional format string to syslog()   *   * @return: void   */  void -gf_syslog (int error_code, int facility_priority, char *format, ...) +gf_syslog (int facility_priority, char *format, ...)  {          char       *msg = NULL;          char        json_msg[GF_JSON_MSG_LENGTH];          GF_UNUSED char       *p = NULL; -        const char *error_message = NULL; -        char        json_error_message[GF_JSON_MSG_LENGTH];          va_list     ap; -        error_message = gf_get_error_message (error_code); +        GF_ASSERT (format);          va_start (ap, format); -        if (format) { -                vasprintf (&msg, format, ap); +        if (vasprintf (&msg, format, ap) != -1) {                  p = _json_escape (msg, json_msg, GF_JSON_MSG_LENGTH); -                if (error_message) { -                        p = _json_escape (error_message, json_error_message, -                                          GF_JSON_MSG_LENGTH); -                        syslog (facility_priority, GF_SYSLOG_CEE_FORMAT, -                                json_msg, error_code, json_error_message); -                } else { -                        /* ignore the error code because no error message for it -                           and use normal syslog */ -                        syslog (facility_priority, "%s", msg); -                } +                syslog (facility_priority, "%s", msg);                  free (msg); -        } else { -                if (error_message) { -                        /* no user message: treat error_message as msg */ -                        syslog (facility_priority, GF_SYSLOG_CEE_FORMAT, -                                json_error_message, error_code, -                                json_error_message); -                } else { -                        /* cannot produce log as neither error_message nor -                           msg available */ -                } -        } +        } else +                syslog (GF_LOG_CRITICAL, "vasprintf() failed, out of memory?");          va_end (ap);  }  #endif /* GF_USE_SYSLOG */ @@ -528,8 +488,7 @@ _gf_log_nomem (const char *domain, const char *file,                  } else {                          priority = level - 1;                  } -                gf_syslog (GF_ERR_DEV, priority, -                           "[%s:%d:%s] %s %s: no memory " +                gf_syslog (priority, "[%s:%d:%s] %s %s: no memory "                             "available for size (%"GF_PRI_SIZET")",                             basename, line, function, callstr, domain,                             size); @@ -668,8 +627,7 @@ _gf_log_callingfn (const char *domain, const char *file, const char *function,                  vasprintf (&str2, fmt, ap);                  va_end (ap); -                gf_syslog (GF_ERR_DEV, priority, -                           "[%s:%d:%s] %s %d-%s: %s", +                gf_syslog (priority, "[%s:%d:%s] %s %d-%s: %s",                             basename, line, function,                             callstr,                             ((this->graph) ? this->graph->id:0), domain, @@ -805,8 +763,7 @@ _gf_log (const char *domain, const char *file, const char *function, int line,                  vasprintf (&str2, fmt, ap);                  va_end (ap); -                gf_syslog (GF_ERR_DEV, priority, -                           "[%s:%d:%s] %d-%s: %s", +                gf_syslog (priority, "[%s:%d:%s] %d-%s: %s",                             basename, line, function,                             ((this->graph) ? this->graph->id:0), domain, str2);                  goto err;  | 
