Changeset: a8157bb84501 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/a8157bb84501
Modified Files:
        monetdb5/mal/mal_client.c
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_profiler.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/server/sql_mvc.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: sql_profiler
Log Message:

Transaction events done.


diffs (truncated from 344 to 300 lines):

diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -209,7 +209,7 @@ MCexitClient(Client c)
        }
 
        if(malProfileMode > 0)
-               genericEvent("client_connection",
+               generic_event("client_connection",
                                         (struct GenericEvent)
                                         { &c->idx,
                                           (oid)NULL,
@@ -313,7 +313,7 @@ MCinitClient(oid user, bstream *fin, str
                assert(NULL == setClientContext(c));
                c = MCinitClientRecord(c, user, fin, fout);
                if(malProfileMode > 0)
-                       genericEvent("client_connection",
+                       generic_event("client_connection",
                                                 (struct GenericEvent)
                                                 { &c->idx,
                                                   (oid)NULL,
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -184,7 +184,7 @@ logadd(struct logbuf *logbuf, const char
  * Profiling a generic event follows the same implementation of ProfilerEvent.
  */
 static str
-prepareGenericEvent(str face, struct GenericEvent e, int state)
+prepare_generic_event(str face, struct GenericEvent e, int state)
 {
        struct logbuf logbuf = {0};
        lng clk = GDKusec();
@@ -200,7 +200,7 @@ prepareGenericEvent(str face, struct Gen
                           ",\"face\":\"%s\""
                           ",\"state\":\"%s\""
                           ",\"client_id\":\"%d\""
-                          ",\"transaction_id\":\"%d\""
+                          ",\"transaction_id\":"ULLFMT
                           ",\"tag\":\""OIDFMT
                           ",\"query\":\"%s\""
                           ",\"error\":\"%s\""
@@ -224,11 +224,11 @@ prepareGenericEvent(str face, struct Gen
 }
 
 static void
-renderGenericEvent(str msg, struct GenericEvent e, int state)
+render_generic_event(str msg, struct GenericEvent e, int state)
 {
        str event;
        MT_lock_set(&mal_profileLock);
-       event = prepareGenericEvent(msg, e, state);
+       event = prepare_generic_event(msg, e, state);
        if( event ){
                logjsonInternal(event, true);
                free(event);
@@ -237,10 +237,10 @@ renderGenericEvent(str msg, struct Gener
 }
 
 void
-genericEvent(str msg, struct GenericEvent e, int state)
+generic_event(str msg, struct GenericEvent e, int state)
 {
        if( maleventstream ) {
-               renderGenericEvent(msg, e, state);
+               render_generic_event(msg, e, state);
        }
 }
 
diff --git a/monetdb5/mal/mal_profiler.h b/monetdb5/mal/mal_profiler.h
--- a/monetdb5/mal/mal_profiler.h
+++ b/monetdb5/mal/mal_profiler.h
@@ -23,7 +23,7 @@ typedef struct rusage Rusage;
 struct GenericEvent {
        int* client_id;
        oid tag;
-       int* transaction_id;
+       ulng* transaction_id;
        str query;
        int error;
 };
@@ -35,7 +35,7 @@ mal_export str openProfilerStream(Client
 mal_export str closeProfilerStream(Client cntxt);
 
 mal_export void profilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci, int start);
-mal_export void genericEvent(str msg, struct GenericEvent e, int state);
+mal_export void generic_event(str face, struct GenericEvent e, int state);
 mal_export void sqlProfilerEvent(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 
 mal_export str startProfiler(Client cntxt);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -130,7 +130,7 @@ sql_symbol2relation(backend *be, symbol 
        Client c = getClientContext();
 
        if(malProfileMode > 0 )
-               genericEvent("sql_to_rel",
+               generic_event("sql_to_rel",
                                         (struct GenericEvent)
                                         { &(c->idx),
                                           c->curprg->def->tag,
@@ -142,7 +142,7 @@ sql_symbol2relation(backend *be, symbol 
        rel = rel_semantic(query, sym);
 
        if(malProfileMode > 0 ) {
-               genericEvent("sql_to_rel",
+               generic_event("sql_to_rel",
                                         (struct GenericEvent)
                                         { &(c->idx),
                                           c->curprg->def->tag,
@@ -150,7 +150,7 @@ sql_symbol2relation(backend *be, symbol 
                                           NULL,
                                           rel ? 1 : 0 },
                                         1);
-               genericEvent("rel_opt",
+               generic_event("rel_opt",
                                         (struct GenericEvent)
                                         { &(c->idx),
                                           c->curprg->def->tag,
@@ -171,7 +171,7 @@ sql_symbol2relation(backend *be, symbol 
        be->reloptimizer = GDKusec() - Tbegin;
 
        if(malProfileMode > 0)
-               genericEvent("rel_opt",
+               generic_event("rel_opt",
                                         (struct GenericEvent)
                                         { &c->idx,
                                           c->curprg->def->tag,
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1111,7 +1111,7 @@ SQLparser(Client c)
        (void) tag;
 
        if(malProfileMode > 0)
-               genericEvent("sql_parse",
+               generic_event("sql_parse",
                                         (struct GenericEvent)
                                         { &c->idx,
                                           c->curprg->def->tag,
@@ -1147,7 +1147,7 @@ SQLparser(Client c)
        c->query = query_cleaned(m->sa, QUERY(m->scanner));
 
        if(malProfileMode > 0)
-               genericEvent("sql_parse",
+               generic_event("sql_parse",
                                         (struct GenericEvent)
                                         { &c->idx,
                                           c->curprg->def->tag,
@@ -1212,7 +1212,7 @@ SQLparser(Client c)
                        }
 
                        if(malProfileMode > 0)
-                               genericEvent("rel_to_mal",
+                               generic_event("rel_to_mal",
                                                         (struct GenericEvent)
                                                         { &c->idx,
                                                           c->curprg->def->tag,
@@ -1227,7 +1227,7 @@ SQLparser(Client c)
                                opt = (m->emod & mod_exec) == 0;//1;
 
                        if(malProfileMode > 0)
-                               genericEvent("rel_to_mal",
+                               generic_event("rel_to_mal",
                                                         (struct GenericEvent)
                                                         { &c->idx,
                                                           c->curprg->def->tag,
@@ -1314,7 +1314,7 @@ SQLparser(Client c)
                if (msg == MAL_SUCCEED && opt ) {
 
                        if(malProfileMode > 0)
-                               genericEvent("mal_opt",
+                               generic_event("mal_opt",
                                                         (struct GenericEvent)
                                                         { &c->idx,
                                                           c->curprg->def->tag,
@@ -1326,7 +1326,7 @@ SQLparser(Client c)
                        msg = SQLoptimizeQuery(c, c->curprg->def);
 
                        if(malProfileMode > 0)
-                               genericEvent("mal_opt",
+                               generic_event("mal_opt",
                                                         (struct GenericEvent)
                                                         { &c->idx,
                                                           c->curprg->def->tag,
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -28,6 +28,7 @@
 #include "wlc.h"
 
 #include "mal_authorize.h"
+#include "mal_profiler.h"
 
 static void
 sql_create_comments(mvc *m, sql_schema *s)
@@ -123,6 +124,22 @@ mvc_fix_depend(mvc *m, sql_column *depid
        }
 }
 
+static void
+generic_event_wrapper(str face, ulng transaction_id, int error, int state)
+{
+       int client_id = getClientContext()->idx;
+
+       if(malProfileMode > 0)
+               generic_event(face,
+                                         (struct GenericEvent)
+                                         { &client_id,
+                                               (oid)NULL,
+                                               &transaction_id,
+                                               NULL,
+                                               error },
+                                         state);
+}
+
 sql_store
 mvc_init(int debug, store_type store_tpe, int ro, int su)
 {
@@ -139,11 +156,12 @@ mvc_init(int debug, store_type store_tpe
                return NULL;
        }
 
-       if ((store = store_init(debug, store_tpe, ro, su)) == NULL) {
+       if ((store = store_init(debug, store_tpe, ro, su, 
&generic_event_wrapper)) == NULL) {
                keyword_exit();
                TRC_CRITICAL(SQL_TRANS, "Unable to create system tables\n");
                return NULL;
        }
+
        initialize_sql_functions_lookup(store->sa);
 
        m = mvc_create((sql_store)store, store->sa, 0, 0, NULL, NULL);
@@ -473,7 +491,17 @@ mvc_trans(mvc *m)
 
        TRC_INFO(SQL_TRANS, "Starting transaction\n");
        res = sql_trans_begin(m->session);
-       // TODO PROFILER: EVENT("start of transaction","client_id": TYPE_int, 
m->clientid, "tid": TYPE_int, m->session->tr->tid, "ts": TYPE_int, 
m->session->tr->ts)
+
+       if(malProfileMode > 0)
+               generic_event("transaction",
+                                        (struct GenericEvent)
+                                         { &(m->clientid),
+                                               (oid)NULL,
+                                               &(m->session->tr->tid),
+                                               NULL,
+                                               0 },
+                                         0);
+
        if (m->qc && (res || err)) {
                int seqnr = m->qc->id;
                if (m->qc)
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -331,7 +331,10 @@ extern res_table *res_tables_remove(res_
 sql_export void res_tables_destroy(res_table *results);
 extern res_table *res_tables_find(res_table *results, int res_id);
 
-extern struct sqlstore *store_init(int debug, store_type store, int readonly, 
int singleuser);
+/* callback to access generic_event in store.c */
+typedef void (*generic_event_wrapper_fptr) (str face, ulng transaction_id, int 
error, int state);
+
+extern struct sqlstore *store_init(int debug, store_type store, int readonly, 
int singleuser, generic_event_wrapper_fptr event_wrapper);
 extern void store_exit(struct sqlstore *store);
 
 extern void store_suspend_log(struct sqlstore *store);
@@ -507,6 +510,7 @@ typedef struct sqlstore {
        table_functions table_api;
        logger_functions logger_api;
        void *logger;                   /* space to keep logging structure of 
storage backend */
+       generic_event_wrapper_fptr generic_event_wrapper;
 } sqlstore;
 
 typedef enum sql_dependency_change_type {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -2061,7 +2061,7 @@ store_load(sqlstore *store, sql_allocato
 }
 
 sqlstore *
-store_init(int debug, store_type store_tpe, int readonly, int singleuser)
+store_init(int debug, store_type store_tpe, int readonly, int singleuser, 
generic_event_wrapper_fptr event_wrapper)
 {
        sql_allocator *pa;
        sqlstore *store = MNEW(sqlstore);
@@ -2104,6 +2104,8 @@ store_init(int debug, store_type store_t
        MT_lock_set(&store->flush);
        MT_lock_set(&store->lock);
 
+       store->generic_event_wrapper = event_wrapper;
+
        /* initialize empty bats */
        switch (store_tpe) {
        case store_bat:
@@ -3575,7 +3577,7 @@ sql_trans_rollback(sql_trans *tr, bool c
 {
        sqlstore *store = tr->store;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to