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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list