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]