Changeset: 232b3cb292a3 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/232b3cb292a3 Modified Files: monetdb5/mal/mal_client.c monetdb5/mal/mal_profiler.c monetdb5/mal/mal_profiler.h sql/server/sql_mvc.c Branch: Jul2021_prof_ext Log Message:
Final fixes. diffs (122 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) lng Tend = GDKusec(); profilerEvent((struct MalEvent) {0}, (struct NonMalEvent) - {CLIENT_CONNECTION, c, Tend, NULL, NULL, 0, Tend-(c->session)}); + {CLIENT_END, c, Tend, NULL, NULL, 0, Tend-(c->session)}); } setClientContext(NULL); } @@ -308,6 +308,10 @@ MCinitClient(oid user, bstream *fin, str c = MCinitClientRecord(c, user, fin, fout); } MT_lock_unset(&mal_contextLock); + + profilerEvent((struct MalEvent) {0}, + (struct NonMalEvent) + {CLIENT_START, c, c->session, NULL, NULL, 0, 0}); return c; } 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 @@ -166,17 +166,17 @@ logadd(struct logbuf *logbuf, const char } static str phase_descriptions[] = { - [CLIENT_CONNECTION] = "client_connection", + [CLIENT_START] = "session_start", + [CLIENT_END] = "session_end", [TEXT_TO_SQL] = "text_to_sql", [SQL_TO_REL] = "sql_to_rel", [REL_OPT] = "rel_opt", [REL_TO_MAL] = "rel_to_mal", [MAL_OPT] = "mal_opt", [MAL_ENGINE] = "mal_engine", - // [TRANSACTION_START] = "trans_start", - // [COMMIT] = "trans_commit", - // [ROLLBACK] = "trans_rollback", - [TRANSACTION_END] = "transaction" + [COMMIT] = "trans_commit", + [ROLLBACK] = "trans_rollback", + [CONFLICT] = "trans_conflict" }; static str 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,16 +23,16 @@ typedef struct rusage Rusage; enum event_phase { MAL_ENGINE = 0, - CLIENT_CONNECTION, + CLIENT_START, + CLIENT_END, TEXT_TO_SQL, SQL_TO_REL, REL_OPT, REL_TO_MAL, MAL_OPT, - // TRANSACTION_START, - // COMMIT, - // ROLLBACK, - TRANSACTION_END + COMMIT, + ROLLBACK, + CONFLICT }; typedef struct NonMalEvent { 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 @@ -544,7 +544,7 @@ mvc_commit(mvc *m, int chain, const char Client c = getClientContext(); profilerEvent((struct MalEvent) {0}, (struct NonMalEvent) - {TRANSACTION_END, c, Tend, &ts_start, &m->session->tr->ts, state == SQL_OK ? 0 : 1, log_usec?Tend-Tbegin:0}); + { state == SQL_CONFLICT ? CONFLICT : COMMIT , c, Tend, &ts_start, &m->session->tr->ts, state == SQL_ERR, log_usec?Tend-Tbegin:0}); } switch (state) { case SQL_ERR: @@ -649,9 +649,32 @@ mvc_rollback(mvc *m, int chain, const ch /* make sure we do not reuse changed data */ if (!list_empty(tr->changes)) tr->status = 1; - (void)sql_trans_end(m->session, SQL_ERR); - if (chain && sql_trans_begin(m->session) < 0) - msg = createException(SQL, "sql.rollback", SQLSTATE(40000) "ROLLBACK: finished successfully, but the session's schema could not be found while starting the next transaction"); + + + lng Tbegin = 0; + ulng ts_start = 0; + bool log_usec = profilerMode == 0 || m->session->auto_commit; + if(profilerStatus > 0) { + if (log_usec) Tbegin = GDKusec(); + ts_start = m->session->tr->ts; + } + (void) sql_trans_end(m->session, SQL_ERR); + + if(profilerStatus > 0) { + lng Tend = GDKusec(); + Client c = getClientContext(); + profilerEvent((struct MalEvent) {0}, + (struct NonMalEvent) + { ROLLBACK , c, Tend, &ts_start, &m->session->tr->ts, 0, log_usec?Tend-Tbegin:0}); + } + if (chain) { + if (sql_trans_begin(m->session) < 0) { + msg = createException(SQL, "sql.rollback", SQLSTATE(40000) "ROLLBACK: finished successfully, but the session's schema could not be found while starting the next transaction"); + m->session->status = -1; + return msg; + } + m->session->auto_commit = 0; /* disable auto-commit while chaining */ + } } if (msg == MAL_SUCCEED) msg = WLCrollback(m->clientid); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org