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

Reply via email to