[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH for-4.6] xenstored: log tdb message via xenstored's logging mechanisms



ping.

On Mon, 2014-12-15 at 13:18 +0000, Ian Campbell wrote:
> TDB provides us with a callback for this purpose. Use it in both
> xenstored and xs_tdb_dump.
> 
> While at it make the existing log() macro tollerate memory failures.
> 
> Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
> ---
>  tools/xenstore/xenstored_core.c |   39 
> +++++++++++++++++++++++++++++++++------
>  tools/xenstore/xs_tdb_dump.c    |   12 +++++++++++-
>  2 files changed, 44 insertions(+), 7 deletions(-)
> 
> diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
> index 4eaff57..3fd9a20 100644
> --- a/tools/xenstore/xenstored_core.c
> +++ b/tools/xenstore/xenstored_core.c
> @@ -89,9 +89,14 @@ static void check_store(void);
>  #define log(...)                                                     \
>       do {                                                            \
>               char *s = talloc_asprintf(NULL, __VA_ARGS__);           \
> -             trace("%s\n", s);                                       \
> -             syslog(LOG_ERR, "%s",  s);                              \
> -             talloc_free(s);                                         \
> +             if (s) {                                                \
> +                     trace("%s\n", s);                               \
> +                     syslog(LOG_ERR, "%s",  s);                      \
> +                     talloc_free(s);                                 \
> +             } else {                                                \
> +                     trace("talloc failure during logging\n");       \
> +                     syslog(LOG_ERR, "talloc failure during logging\n"); \
> +             }                                                       \
>       } while (0)
>  
> 
> @@ -1479,13 +1484,35 @@ static void manual_node(const char *name, const char 
> *child)
>       talloc_free(node);
>  }
>  
> +static void tdb_logger(TDB_CONTEXT *tdb, int level, const char * fmt, ...)
> +{
> +     va_list ap;
> +     char *s;
> +
> +     va_start(ap, fmt);
> +     s = talloc_vasprintf(NULL, fmt, ap);
> +     va_end(ap);
> +
> +     if (s) {
> +             trace("TDB: %s\n", s);
> +             syslog(LOG_ERR, "TDB: %s",  s);
> +             if (verbose)
> +                     xprintf("TDB: %s", s);
> +             talloc_free(s);
> +     } else {
> +             trace("talloc failure during logging\n");
> +             syslog(LOG_ERR, "talloc failure during logging\n");
> +     }
> +}
> +
>  static void setup_structure(void)
>  {
>       char *tdbname;
>       tdbname = talloc_strdup(talloc_autofree_context(), xs_daemon_tdb());
>  
>       if (!(tdb_flags & TDB_INTERNAL))
> -             tdb_ctx = tdb_open(tdbname, 0, tdb_flags, O_RDWR, 0);
> +             tdb_ctx = tdb_open_ex(tdbname, 0, tdb_flags, O_RDWR, 0,
> +                                   &tdb_logger, NULL);
>  
>       if (tdb_ctx) {
>               /* XXX When we make xenstored able to restart, this will have
> @@ -1516,8 +1543,8 @@ static void setup_structure(void)
>               talloc_free(tlocal);
>       }
>       else {
> -             tdb_ctx = tdb_open(tdbname, 7919, tdb_flags, O_RDWR|O_CREAT,
> -                                0640);
> +             tdb_ctx = tdb_open_ex(tdbname, 7919, tdb_flags, O_RDWR|O_CREAT,
> +                                   0640, &tdb_logger, NULL);
>               if (!tdb_ctx)
>                       barf_perror("Could not create tdb file %s", tdbname);
>  
> diff --git a/tools/xenstore/xs_tdb_dump.c b/tools/xenstore/xs_tdb_dump.c
> index b91cdef..7a034c0 100644
> --- a/tools/xenstore/xs_tdb_dump.c
> +++ b/tools/xenstore/xs_tdb_dump.c
> @@ -33,6 +33,15 @@ static char perm_to_char(enum xs_perm_type perm)
>               '?';
>  }
>  
> +static void tdb_logger(TDB_CONTEXT *tdb, int level, const char * fmt, ...)
> +{
> +     va_list ap;
> +
> +     va_start(ap, fmt);
> +     vfprintf(stderr, fmt, ap);
> +     va_end(ap);
> +}
> +
>  int main(int argc, char *argv[])
>  {
>       TDB_DATA key;
> @@ -41,7 +50,8 @@ int main(int argc, char *argv[])
>       if (argc != 2)
>               barf("Usage: xs_tdb_dump <tdbfile>");
>  
> -     tdb = tdb_open(talloc_strdup(NULL, argv[1]), 0, 0, O_RDONLY, 0);
> +     tdb = tdb_open_ex(talloc_strdup(NULL, argv[1]), 0, 0, O_RDONLY, 0,
> +                       tdb_logger, NULL);
>       if (!tdb)
>               barf_perror("Could not open %s", argv[1]);
>  



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.