Changeset: 31ee834dc17e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31ee834dc17e Modified Files: gdk/gdk_tracer.c gdk/gdk_tracer.h gdk/gdk_utils.c monetdb5/optimizer/opt_inline.c monetdb5/scheduler/run_memo.c sql/storage/store.c Branch: gdk_tracer Log Message:
Added conditional logging macros and compilation fixes diffs (239 lines): diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c --- a/gdk/gdk_tracer.c +++ b/gdk/gdk_tracer.c @@ -424,9 +424,8 @@ GDKtracer_log(LOG_LEVEL level, char *fmt { MT_lock_unset(&lock); - // GDK_TRACER_OSTREAM("Failed to write to the buffer (bytes_written = %d)\n", bytes_written); - // Fallback logging mechanism - GDK_TRACER_OSTREAM("FALLBACK MECHANISM\n"); + // Failed to write to the buffer - bytes_written < 0 + // Fallback logging mechanism va_list va; va_start(va, fmt); GDK_TRACER_OSTREAM(fmt, va); @@ -438,12 +437,12 @@ GDKtracer_log(LOG_LEVEL level, char *fmt { MT_lock_unset(&lock); - GDK_TRACER_OSTREAM("Failed to write to the buffer (bytes_written = %d)\n", bytes_written); - // Fallback logging mechanism - // va_list va; - // va_start(va, fmt); - // GDK_TRACER_OSTREAM("%s", fmt); - // va_end(va); + // Failed to write to the buffer - bytes_written < 0 + // Fallback logging mechanism + va_list va; + va_start(va, fmt); + GDK_TRACER_OSTREAM(fmt, va); + va_end(va); } // Flush the current buffer in case the event is diff --git a/gdk/gdk_tracer.h b/gdk/gdk_tracer.h --- a/gdk/gdk_tracer.h +++ b/gdk/gdk_tracer.h @@ -219,43 +219,100 @@ extern LOG_LEVEL LVL_PER_COMPONENT[]; // If the LOG_LEVEL of the message is one of the following: CRITICAL, ERROR or WARNING // it is logged no matter the component. In any other case the component is taken into account -#define GDK_TRACER_LOG(LOG_LEVEL, COMP, MSG, ...) \ - if(LOG_LEVEL == M_CRITICAL || \ - LOG_LEVEL == M_ERROR || \ - LOG_LEVEL == M_WARNING || \ - (LVL_PER_COMPONENT[COMP] >= LOG_LEVEL)) \ - { \ - GDKtracer_log(LOG_LEVEL, \ - "[%s] " \ - "%-"MXW"s " \ - "%"MXW"s:%d " \ - "%"MXW"s " \ - "%-"MXW"s " \ - "%-"MXW"s # "MSG, \ - GDKtracer_get_timestamp("%Y-%m-%d %H:%M:%S"), \ - __FILENAME__, \ - __FUNCTION__, \ - __LINE__, \ - LEVEL_STR[LOG_LEVEL], \ - COMPONENT_STR[COMP], \ - MT_thread_getname(), \ - ## __VA_ARGS__); \ - } \ +#define IF_GDK_TRACER_LOG(LOG_LEVEL, COMP) \ + if(LOG_LEVEL == M_CRITICAL || \ + LOG_LEVEL == M_ERROR || \ + LOG_LEVEL == M_WARNING || \ + (LVL_PER_COMPONENT[COMP] >= LOG_LEVEL)) \ + +#define GDK_TRACER_LOG_BODY(LOG_LEVEL, COMP, MSG, ...) \ + GDKtracer_log(LOG_LEVEL, \ + "[%s] " \ + "%-"MXW"s " \ + "%"MXW"s:%d " \ + "%"MXW"s " \ + "%-"MXW"s " \ + "%-"MXW"s # "MSG, \ + GDKtracer_get_timestamp("%Y-%m-%d %H:%M:%S"), \ + __FILENAME__, \ + __FUNCTION__, \ + __LINE__, \ + LEVEL_STR[LOG_LEVEL], \ + COMPONENT_STR[COMP], \ + MT_thread_getname(), \ + ## __VA_ARGS__); \ + +#define GDK_TRACER_LOG(LOG_LEVEL, COMP, MSG, ...) \ + do { \ + IF_GDK_TRACER_LOG(LOG_LEVEL, COMP) \ + { \ + GDK_TRACER_LOG_BODY(LOG_LEVEL, COMP, MSG, ## __VA_ARGS__) \ + } \ + } while (0) \ + + +#define TRC_CRITICAL(COMP, MSG, ...) \ + GDK_TRACER_LOG(M_CRITICAL, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_ERROR(COMP, MSG, ...) \ + GDK_TRACER_LOG(M_ERROR, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_WARNING(COMP, MSG, ...) \ + GDK_TRACER_LOG(M_WARNING, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_INFO(COMP, MSG, ...) \ + GDK_TRACER_LOG(M_INFO, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_DEBUG(COMP, MSG, ...) \ + GDK_TRACER_LOG(M_DEBUG, COMP, MSG, ## __VA_ARGS__) \ -#define TRC_CRITICAL(COMP, MSG, ...) \ - GDK_TRACER_LOG(M_CRITICAL, COMP, MSG, ## __VA_ARGS__) \ + + -#define TRC_ERROR(COMP, MSG, ...) \ - GDK_TRACER_LOG(M_ERROR, COMP, MSG, ## __VA_ARGS__) \ +// Conditional logging - Example usage +// NOTE: When using the macro with *_IF always use the macro with *_ENDIF for +// logging. Avoiding to do that will result into checking the LOG_LEVEL of the +// the COMPONENT 2 times. Also NEVER use the *_ENDIF macro without before +// performing a check with *_IF macro. Such an action will have as a consequence +// logging everything without taking into account the LOG_LEVEL of the COMPONENT. +/* + TRC_CRITICAL_IF(SQL_STORE) + { + TRC_CRITICAL_ENDIF(SQL_STORE, "Test\n") + } +*/ + +#define TRC_CRITICAL_IF(COMP) \ + IF_GDK_TRACER_LOG(M_CRITICAL, COMP) \ + +#define TRC_ERROR_IF(COMP) \ + IF_GDK_TRACER_LOG(M_ERROR, COMP) \ -#define TRC_WARNING(COMP, MSG, ...) \ - GDK_TRACER_LOG(M_WARNING, COMP, MSG, ## __VA_ARGS__) \ +#define TRC_WARNING_IF(COMP) \ + IF_GDK_TRACER_LOG(M_WARNING, COMP) \ + +#define TRC_INFO_IF(COMP) \ + IF_GDK_TRACER_LOG(M_INFO, COMP) \ + +#define TRC_DEBUG_IF(COMP) \ + IF_GDK_TRACER_LOG(M_DEBUG, COMP) \ + + +#define TRC_CRITICAL_ENDIF(COMP, MSG, ...) \ + GDK_TRACER_LOG_BODY(M_CRITICAL, COMP, MSG, ## __VA_ARGS__) \ -#define TRC_INFO(COMP, MSG, ...) \ - GDK_TRACER_LOG(M_INFO, COMP, MSG, ## __VA_ARGS__) \ +#define TRC_ERROR_ENDIF(COMP, MSG, ...) \ + GDK_TRACER_LOG_BODY(M_ERROR, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_WARNING_ENDIF(COMP, MSG, ...) \ + GDK_TRACER_LOG_BODY(M_WARNING, COMP, MSG, ## __VA_ARGS__) \ -#define TRC_DEBUG(COMP, MSG, ...) \ - GDK_TRACER_LOG(M_DEBUG, COMP, MSG, ## __VA_ARGS__) \ +#define TRC_INFO_ENDIF(COMP, MSG, ...) \ + GDK_TRACER_LOG_BODY(M_INFO, COMP, MSG, ## __VA_ARGS__) \ + +#define TRC_DEBUG_ENDIF(COMP, MSG, ...) \ + GDK_TRACER_LOG_BODY(M_DEBUG, COMP, MSG, ## __VA_ARGS__) \ + // GDKtracer Buffer @@ -291,10 +348,11 @@ gdk_tracer; ## __VA_ARGS__); \ +// mnstr_printf(GDKstdout, MSG, ## __VA_ARGS__); \ // Produces messages to the output stream. It is also used as a fallback mechanism // in case GDKtracer fails to log for whatever reason. #define GDK_TRACER_OSTREAM(MSG, ...) \ - mnstr_printf(GDKstdout, MSG, ## __VA_ARGS__); \ + fprintf(stderr, MSG, ## __VA_ARGS__); \ diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -84,7 +84,7 @@ GDKenvironment(const char *dbpath) return false; } if (strlen(dbpath) >= FILENAME_MAX) { - TRC_ERROR(GDK_UTILS, "Database name too long.\n") + TRC_ERROR(GDK_UTILS, "Database name too long.\n"); return false; } if (!MT_path_absolute(dbpath)) { diff --git a/monetdb5/optimizer/opt_inline.c b/monetdb5/optimizer/opt_inline.c --- a/monetdb5/optimizer/opt_inline.c +++ b/monetdb5/optimizer/opt_inline.c @@ -73,7 +73,7 @@ OPTinlineImplementation(Client cntxt, Ma */ if (isMultiplex(q)) { if (OPTinlineMultiplex(cntxt,mb,q)) { - TRC_DEBUG(MAL_OPT_INLINE, "Multiplex inline function\n") + TRC_DEBUG(MAL_OPT_INLINE, "Multiplex inline function\n"); debugInstruction(MAL_OPT_INLINE, mb, 0, q, LIST_MAL_ALL); } } else diff --git a/monetdb5/scheduler/run_memo.c b/monetdb5/scheduler/run_memo.c --- a/monetdb5/scheduler/run_memo.c +++ b/monetdb5/scheduler/run_memo.c @@ -130,6 +130,7 @@ RUNchoice(Client cntxt, MalBlkPtr mb, Ma char *nme; InstrPtr q; + mincost = 0; pc = getPC(mb, p); for (i = pc + 1; i < mb->stop; i++) { q = getInstrPtr(mb, i); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -4356,7 +4356,7 @@ reset_changeset(sql_trans *tr, changeset node *t = n->next; sql_base *b = n->data; - TRC_DEBUG(SQL_STORE, "Free: %s\n", (b->name) ? b->name : "help") + TRC_DEBUG(SQL_STORE, "Free: %s\n", (b->name) ? b->name : "help"); cs_remove_node(fs, n); n = t; } else { /* a new id */ @@ -4377,7 +4377,7 @@ reset_changeset(sql_trans *tr, changeset while ( ok == LOG_OK && n) { /* remove remaining old stuff */ node *t = n->next; sql_base *b = n->data; - TRC_DEBUG(SQL_STORE, "Free: %s\n", (b->name) ? b->name : "help") + TRC_DEBUG(SQL_STORE, "Free: %s\n", (b->name) ? b->name : "help"); cs_remove_node(fs, n); n = t; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list