Changeset: c951c44c3b0c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c951c44c3b0c
Added Files:
monetdb5/modules/mal/Tests/stalker00.malC
Modified Files:
gdk/gdk_stalker.c
monetdb5/modules/mal/Tests/All
monetdb5/modules/mal/stalker.c
monetdb5/modules/mal/stalker.h
monetdb5/modules/mal/stalker.mal
Branch: mlogger
Log Message:
Made the stalker interface more in line what we normally do.
At the MAL layed, patterns give you more debugging power
by providing access to the calls.
A simple test has been added for illustration
diffs (236 lines):
diff --git a/gdk/gdk_stalker.c b/gdk/gdk_stalker.c
--- a/gdk/gdk_stalker.c
+++ b/gdk/gdk_stalker.c
@@ -18,24 +18,24 @@
#include "gdk.h"
#include "gdk_stalker.h"
-pthread_t flushing_thread;
-pthread_mutex_t stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_mutex_t secondary_stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_t flushing_thread;
+static pthread_mutex_t stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_mutex_t secondary_stalker_mutex = PTHREAD_MUTEX_INITIALIZER;
// 0 -> stalker
// 1 -> secondary_stalker
-gdk_stalker stalker = { .allocated_size = 0, .id = 0 };
-gdk_stalker secondary_stalker = { .allocated_size = 0, .id = 1 };
+static gdk_stalker stalker = { .allocated_size = 0, .id = 0 };
+static gdk_stalker secondary_stalker = { .allocated_size = 0, .id = 1 };
ATOMIC_TYPE SELECTED_STALKER_ID = 0;
-bool GDK_STALKER_STOP = false;
+static bool GDK_STALKER_STOP = false;
-FILE *output_file;
-int file_size = 0;
-int file_id = 1;
+static FILE *output_file;
+static int file_size = 0;
+static int file_id = 1;
-ATOMIC_TYPE CUR_LOG_LEVEL = DEFAULT_LOG_LEVEL;
-ATOMIC_TYPE CUR_FLUSH_LEVEL = DEFAULT_FLUSH_LEVEL;
+static ATOMIC_TYPE CUR_LOG_LEVEL = DEFAULT_LOG_LEVEL;
+static ATOMIC_TYPE CUR_FLUSH_LEVEL = DEFAULT_FLUSH_LEVEL;
diff --git a/monetdb5/modules/mal/Tests/All b/monetdb5/modules/mal/Tests/All
--- a/monetdb5/modules/mal/Tests/All
+++ b/monetdb5/modules/mal/Tests/All
@@ -64,3 +64,5 @@ orderidx00
orderidx01
orderidx02
orderidx04
+
+stalker00
diff --git a/monetdb5/modules/mal/Tests/stalker00.malC
b/monetdb5/modules/mal/Tests/stalker00.malC
new file mode 100644
--- /dev/null
+++ b/monetdb5/modules/mal/Tests/stalker00.malC
@@ -0,0 +1,17 @@
+# a simple script to check the working of the stalker
+
+stalker.flush();
+
+stalker.setloglevel(-1); # should raise an error
+stalker.setloglevel(0);
+stalker.setloglevel(1);
+stalker.setloglevel(999); # should raise an error
+
+stalker.resetloglevel();
+
+stalker.setflushlevel(-1); # should raise an error
+stalker.setflushlevel(0);
+stalker.setflushlevel(1);
+stalker.setflushlevel(999); # should raise an error
+
+stalker.resetflushlevel();
diff --git a/monetdb5/modules/mal/stalker.c b/monetdb5/modules/mal/stalker.c
--- a/monetdb5/modules/mal/stalker.c
+++ b/monetdb5/modules/mal/stalker.c
@@ -4,6 +4,11 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
+ *
+ * This module contains the MAL primitives to control the logging system.
+ * If the stalker fails then there is no easy way to report this.
+ * This is marked with the STALKER marker.
+ *
*/
#include "monetdb_config.h"
@@ -11,36 +16,54 @@
#include "gdk_stalker.h"
-int GDK_result = 0;
+str
+STLKRflush_buffer(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ (void) cntxt;
+ (void) mb;
+ (void) stk;
+ (void) pci;
-str
-STLKRflush_buffer(void)
-{
- GDK_result = GDKstalker_flush_buffer();
- if(GDK_result == GDK_FAIL)
+ if ( GDKstalker_flush_buffer() == GDK_FAIL)
throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
-
return MAL_SUCCEED;
}
str
-STLKRset_log_level(void *ret, int *lvl)
-{
- (void) ret;
- GDK_result = GDKstalker_set_log_level(lvl);
- if(GDK_result == GDK_FAIL)
+STLKRset_log_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{ int *lvl;
+ (void) cntxt;
+ (void) mb;
+
+ lvl = (int*) getArgReference_str(stk,pci,1);
+ if( GDKstalker_set_log_level(lvl) == GDK_FAIL)
throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
-
return MAL_SUCCEED;
}
str
-STLKRreset_log_level(void)
+STLKRreset_log_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- GDK_result = GDKstalker_reset_log_level();
- if(GDK_result == GDK_FAIL)
+ (void) cntxt;
+ (void) mb;
+ (void) stk;
+ (void) pci;
+ if( GDKstalker_reset_log_level())
+ throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
+ return MAL_SUCCEED;
+}
+
+
+str
+STLKRset_flush_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{ int *lvl;
+ (void) cntxt;
+ (void) mb;
+
+ lvl = (int*) getArgReference_str(stk,pci,1);
+ if( GDKstalker_set_flush_level(lvl))
throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
return MAL_SUCCEED;
@@ -48,23 +71,14 @@ STLKRreset_log_level(void)
str
-STLKRset_flush_level(void *ret, int *lvl)
+STLKRreset_flush_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- (void) ret;
- GDK_result = GDKstalker_set_flush_level(lvl);
- if(GDK_result == GDK_FAIL)
+ (void) cntxt;
+ (void) mb;
+ (void) stk;
+ (void) pci;
+ if( GDKstalker_reset_flush_level() == GDK_FAIL)
throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
return MAL_SUCCEED;
}
-
-
-str
-STLKRreset_flush_level()
-{
- GDK_result = GDKstalker_reset_flush_level();
- if(GDK_result == GDK_FAIL)
- throw(STALKER, __FILE__, "%s:%s", __func__, OPERATION_FAILED);
-
- return MAL_SUCCEED;
-}
diff --git a/monetdb5/modules/mal/stalker.h b/monetdb5/modules/mal/stalker.h
--- a/monetdb5/modules/mal/stalker.h
+++ b/monetdb5/modules/mal/stalker.h
@@ -12,10 +12,10 @@
#include "mal.h"
#include "mal_interpreter.h"
-mal_export str STLKRflush_buffer(void);
-mal_export str STLKRset_log_level(void *ret, int *lvl);
-mal_export str STLKRreset_log_level(void);
-mal_export str STLKRset_flush_level(void *ret, int *lvl);
-mal_export str STLKRreset_flush_level(void);
+mal_export str STLKRflush_buffer(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+mal_export str STLKRset_log_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+mal_export str STLKRreset_log_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+mal_export str STLKRset_flush_level(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+mal_export str STLKRreset_flush_level(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr p);
#endif
diff --git a/monetdb5/modules/mal/stalker.mal b/monetdb5/modules/mal/stalker.mal
--- a/monetdb5/modules/mal/stalker.mal
+++ b/monetdb5/modules/mal/stalker.mal
@@ -6,22 +6,22 @@
module logging;
-command flush()
+pattern flush()
address STLKRflush_buffer
comment "Flush GDKstalker buffer";
-command setloglevel(lvl:int)
+pattern setloglevel(lvl:int)
address STLKRset_log_level
comment "Set GDKstalker log level";
-command resetloglevel()
+pattern resetloglevel()
address STLKRreset_log_level
comment "Reset the log level of GDKstalker";
-command setflushlevel(lvl:int)
+pattern setflushlevel(lvl:int)
address STLKRset_flush_level
comment "Set GDKstalker flush level";
-command resetflushlevel()
+pattern resetflushlevel()
address STLKRreset_flush_level
comment "Reset the flush level of GDKstalker";
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list