Changeset: af106ece7dcc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=af106ece7dcc
Added Files:
MonetDB5/modules/mal/mal_mapi.h
Modified Files:
MonetDB5/modules/mal/mal_mapi.c
gdk/gdk_tracer.c
gdk/gdk_tracer.h
gdk/gdk_utils.c
gdk/gdk_utils.h
tools/mserver/mserver5.c
Branch: gdk-tracer
Log Message:
Show log level per component on startup of mserver5 and fixed a bug with
fill_tracer
diffs (283 lines):
diff --git a/MonetDB5/modules/mal/mal_mapi.c b/MonetDB5/modules/mal/mal_mapi.c
--- a/MonetDB5/modules/mal/mal_mapi.c
+++ b/MonetDB5/modules/mal/mal_mapi.c
@@ -551,9 +551,6 @@ SERVERlisten(int port, const char *usock
str buf;
char host[128];
const char *listenaddr;
-#ifdef DEBUG_SERVER
- char msg[512], host[512];
-#endif
accept_any = GDKgetenv_istrue("mapi_open");
bind_ipv6 = GDKgetenv_istrue("mapi_ipv6");
diff --git a/MonetDB5/modules/mal/mal_mapi.h b/MonetDB5/modules/mal/mal_mapi.h
new file mode 100644
--- /dev/null
+++ b/MonetDB5/modules/mal/mal_mapi.h
@@ -0,0 +1,85 @@
+/*
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V.
+ */
+
+#ifndef SERVER_H
+#define SERVER_H
+#ifdef HAVE_MAPI
+
+#include "mal_client.h"
+#include "mal_session.h"
+#include "mal_exception.h"
+#include "mal_interpreter.h"
+#include "mal_authorize.h"
+#include "msabaoth.h"
+#include "mcrypt.h"
+#include "stream.h"
+#include "streams.h" /* for Stream */
+
+
+#define NEW_ARRAY( type, size ) (type*)GDKmalloc((size)*sizeof(type))
+#define STREQ(a, b) (strcmp(a, b)==0)
+
+#define SERVERPORT 50000
+#define SERVERMAXUSERS 5
+
+mal_export str SERVERlisten_default(int *ret);
+mal_export str SERVERlisten_port(int *ret, int *pid);
+mal_export str SERVERlisten_usock(int *ret, str *usock);
+mal_export str SERVERstop(void *ret);
+mal_export str SERVERsuspend(void *ret);
+mal_export str SERVERresume(void *ret);
+
+mal_export str SERVERconnect(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pc);
+mal_export str SERVERdisconnectWithAlias(int *ret, str *db_alias);
+mal_export str SERVERdisconnectALL(int *ret);
+mal_export str SERVERreconnectAlias(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pc);
+mal_export str SERVERreconnectWithoutAlias(Client cntxt, MalBlkPtr mb,
MalStkPtr stk, InstrPtr pc);
+mal_export str SERVERtrace(void *ret, int *mid, int *flag);
+mal_export str SERVERdisconnect(void *ret, int *mid);
+mal_export str SERVERsetAlias(void *ret, int *mid, str *dbalias);
+mal_export str SERVERlookup(int *ret, str *dbalias);
+mal_export str SERVERdestroy(void *ret, int *mid);
+mal_export str SERVERreconnect(void *ret, int *mid);
+mal_export str SERVERping(int *ret, int *mid);
+mal_export str SERVERquery(int *ret, int *mid, str *qry);
+mal_export str SERVERquery_handle(int *ret, int *mid, str *qry);
+mal_export str SERVERquery_array(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pc);
+mal_export str SERVERprepare(int *ret, int *key, str *qry);
+mal_export str SERVERfinish(int *ret, int *idx);
+mal_export str SERVERrows_affected(lng *ret, int *idx);
+mal_export str SERVERget_row_count(lng *ret, int *idx);
+mal_export str SERVERget_field_count(int *ret, int *idx);
+mal_export str SERVERfetch_row(int *ret, int *idx);
+mal_export str SERVERfetch_all_rows(lng *ret, int *idx);
+mal_export str SERVERfetch_field_str(str *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_field_int(int *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_field_lng(lng *ret, int *idx, int *fnr);
+#ifdef HAVE_HGE
+mal_export str SERVERfetch_field_hge(hge *ret, int *idx, int *fnr);
+#endif
+mal_export str SERVERfetch_field_sht(sht *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_field_void(void *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_field_oid(oid *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_field_bte(bte *ret, int *idx, int *fnr);
+mal_export str SERVERfetch_line(str *ret, int *key);
+mal_export str SERVERnext_result(int *ret, int *key);
+mal_export str SERVERfetch_reset(int *ret, int *key);
+mal_export str SERVERfetch_field_bat(bat *bid, int *idx);
+mal_export str SERVERerror(int *ret, int *idx);
+mal_export str SERVERgetError(str *ret, int *idx);
+mal_export str SERVERexplain(str *ret, int *idx);
+mal_export str SERVERmapi_rpc_single_row(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
+mal_export str SERVERmapi_rpc_single_bat(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
+mal_export str SERVERput(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
+mal_export str SERVERputLocal(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+mal_export str SERVERbindBAT(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+mal_export str SERVERclient(void *res, const Stream *In, const Stream *Out);
+mal_export str SERVERmapi_rpc_bat(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+
+#endif /* HAVE_MAPI */
+#endif /* SERVER_H */
diff --git a/gdk/gdk_tracer.c b/gdk/gdk_tracer.c
--- a/gdk/gdk_tracer.c
+++ b/gdk/gdk_tracer.c
@@ -105,26 +105,6 @@ static void
}
-static void
-_GDKtracer_show_log_level_per_component(void)
-{
- // Find max width from components
- int max_width = 0;
- for(int i = 0; i < COMPONENTS_COUNT; i++)
- {
- int comp_width = strlen(COMPONENT_STR[i]);
- if(comp_width > max_width)
- max_width = comp_width;
- }
-
- for(int i = 0; i < COMPONENTS_COUNT; i++)
- {
- int space = (int) (max_width - strlen(COMPONENT_STR[i]) + 30);
- fprintf(stderr, "# %s %*s\n", COMPONENT_STR[i], space,
LEVEL_STR[LOG_LEVELS_LIST[i]]);
- }
-}
-
-
// Prepares a file in order to write the contents of the buffer
// when necessary. The file name each time is merovingian_{int}.log
static void
@@ -144,30 +124,38 @@ static void
// Candidate for 'gnu_printf' format attribute
[-Werror=suggest-attribute=format]
static int
-_GDKtracer_fill_tracer(gdk_tracer *sel_tracer, const char *fmt, va_list va)
__attribute__ ((format (printf, 2, 0)));
+_GDKtracer_fill_tracer(gdk_tracer *sel_tracer, char *fmt, va_list va)
__attribute__ ((format (printf, 2, 0)));
static int
-_GDKtracer_fill_tracer(gdk_tracer *sel_tracer, const char *fmt, va_list va)
+_GDKtracer_fill_tracer(gdk_tracer *sel_tracer, char *fmt, va_list va)
{
- const char *msg;
+ char *tmp = NULL;
+ const char* msg = NULL;
size_t fmt_len = strlen(fmt);
+ int bytes_written = 0;
- // Check if the message contains at the end \n - if not add it
if(fmt[fmt_len - 1] != NEW_LINE)
{
- char *tmp = malloc(sizeof(char) * (fmt_len + 1));
+ tmp = GDKmalloc(sizeof(char) * (fmt_len + 2));
strcpy(tmp, fmt);
tmp[fmt_len] = NEW_LINE;
+ tmp[fmt_len + 1] = '\0';
msg = tmp;
- free(tmp);
}
else
{
msg = fmt;
}
- // vsnprintf(char *str, size_t count, ...) -> including null terminating
character
- int bytes_written = vsnprintf(sel_tracer->buffer +
sel_tracer->allocated_size, BUFFER_SIZE - sel_tracer->allocated_size, msg, va);
+ if(msg)
+ {
+ // vsnprintf(char *str, size_t count, ...) -> including null
terminating character
+ bytes_written = vsnprintf(sel_tracer->buffer +
sel_tracer->allocated_size, BUFFER_SIZE - sel_tracer->allocated_size, msg, va);
+
+ if(tmp)
+ GDKfree(tmp);
+ }
+
_GDKtracer_log_output_error(bytes_written);
// vsnprintf returned value -> does not include the null terminating
character
@@ -197,7 +185,6 @@ gdk_return
GDKtracer_init(void)
{
_GDKtracer_init_log_level_per_component();
- _GDKtracer_show_log_level_per_component();
_GDKtracer_create_file();
return GDK_SUCCEED;
}
@@ -304,7 +291,7 @@ GDKtracer_reset_adapter(void)
gdk_return
-GDKtracer_log(LOG_LEVEL level, const char *fmt, ...)
+GDKtracer_log(LOG_LEVEL level, char *fmt, ...)
{
// Select a tracer
gdk_tracer *fill_tracer;
@@ -421,3 +408,26 @@ GDKtracer_flush_buffer(void)
return GDK_SUCCEED;
}
+
+
+gdk_return
+GDKtracer_show_log_levels(void)
+{
+ // Find max width from components
+ int max_width = 0;
+ for(int i = 0; i < COMPONENTS_COUNT; i++)
+ {
+ int comp_width = strlen(COMPONENT_STR[i]);
+ if(comp_width > max_width)
+ max_width = comp_width;
+ }
+
+ fprintf(stderr, "# LOG level per component\n");
+ for(int i = 0; i < COMPONENTS_COUNT; i++)
+ {
+ int space = (int) (max_width - strlen(COMPONENT_STR[i]) + 30);
+ fprintf(stderr, "# %s %*s\n", COMPONENT_STR[i], space,
LEVEL_STR[LOG_LEVELS_LIST[i]]);
+ }
+
+ return GDK_SUCCEED;
+}
diff --git a/gdk/gdk_tracer.h b/gdk/gdk_tracer.h
--- a/gdk/gdk_tracer.h
+++ b/gdk/gdk_tracer.h
@@ -263,11 +263,14 @@ gdk_return GDKtracer_reset_adapter(void)
// Candidate for 'gnu_printf' format attribute
[-Werror=suggest-attribute=format]
-gdk_return GDKtracer_log(LOG_LEVEL level, const char *fmt, ...) __attribute__
((format (printf, 2, 3)));
+gdk_return GDKtracer_log(LOG_LEVEL level, char *fmt, ...) __attribute__
((format (printf, 2, 3)));
// Flush the buffer to the file. If after flushing the buffer, the file is
greater
// or equal to 1 GB, then we close the current one and we swap to a new one
increasing the ID
gdk_return GDKtracer_flush_buffer(void);
+
+gdk_return GDKtracer_show_log_levels(void);
+
#endif
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1692,6 +1692,12 @@ GDKversion(void)
return (_gdk_version_string);
}
+void
+GDKloglevels(void)
+{
+ GDKtracer_show_log_levels();
+}
+
size_t
GDKmem_cursize(void)
{
diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h
--- a/gdk/gdk_utils.h
+++ b/gdk/gdk_utils.h
@@ -92,6 +92,7 @@ gdk_export bool GDKexiting(void);
gdk_export void GDKprepareExit(void);
gdk_export void GDKreset(int status);
gdk_export const char *GDKversion(void);
+gdk_export void GDKloglevels(void);
// these are used in embedded mode to jump out of GDKfatal
gdk_export jmp_buf GDKfataljump;
diff --git a/tools/mserver/mserver5.c b/tools/mserver/mserver5.c
--- a/tools/mserver/mserver5.c
+++ b/tools/mserver/mserver5.c
@@ -675,6 +675,9 @@ main(int argc, char **av)
return 0;
}
+ /* Show the log level per component */
+ GDKloglevels();
+
emergencyBreakpoint();
if (!GDKinmemory() && (err = msab_registerStarted()) != NULL) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list