Changeset: e3fcf43110df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e3fcf43110df
Added Files:
gdk/gdk_tracer.c
gdk/gdk_tracer.h
monetdb5/modules/mal/Tests/tracer00.malC
monetdb5/modules/mal/tracer.c
monetdb5/modules/mal/tracer.h
monetdb5/modules/mal/tracer.mal
sql/scripts/81_tracer.sql
Removed Files:
gdk/gdk_stalker.c
gdk/gdk_stalker.h
monetdb5/modules/mal/Tests/stalker00.malC
monetdb5/modules/mal/stalker.c
monetdb5/modules/mal/stalker.h
monetdb5/modules/mal/stalker.mal
sql/scripts/81_stalker.sql
Modified Files:
gdk/Makefile.ag
gdk/gdk_utils.c
monetdb5/mal/mal_exception.c
monetdb5/mal/mal_exception.h
monetdb5/modules/mal/Makefile.ag
monetdb5/modules/mal/Tests/All
monetdb5/modules/mal/mal_init.mal
sql/scripts/Makefile.ag
tools/mserver/mserver5.c
Branch: mlogger
Log Message:
Replaced calls in mserver5
- Renamed stalker to tracer
- Added macro for tracing logs Tracer()
diffs (truncated from 1724 to 300 lines):
diff --git a/gdk/Makefile.ag b/gdk/Makefile.ag
--- a/gdk/Makefile.ag
+++ b/gdk/Makefile.ag
@@ -8,8 +8,8 @@ MTSAFE
INCLUDES = ../common/options ../common/stream ../common/utils
$(valgrind_CFLAGS)
-lib_gdkstalker = {
- SOURCES = gdk_stalker.c gdk_stalker.h
+lib_gdktracer = {
+ SOURCES = gdk_tracer.c gdk_tracer.h
}
lib_gdk = {
@@ -44,7 +44,7 @@ lib_gdk = {
libbat.rc
LIBS = ../common/options/libmoptions \
../common/utils/libmutils \
- libgdkstalker \
+ libgdktracer \
WIN32?../common/stream/libstream \
WIN32?$(MATH_LIBS) \
WIN32?$(SOCKET_LIBS) \
@@ -70,7 +70,7 @@ headers_h = {
gdk_hash.h \
gdk_system.h \
gdk_utils.h \
- gdk_stalker.h
+ gdk_tracer.h
}
headers_pc = {
diff --git a/gdk/gdk_stalker.c b/gdk/gdk_stalker.c
deleted file mode 100644
--- a/gdk/gdk_stalker.c
+++ /dev/null
@@ -1,341 +0,0 @@
-/*
- * 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.
- *
- * The stalker is the general logging system for the MonetDB stack.
- * It is modelled after well-known logging schems, eg. Python
- *
- * Internally, the logger uses a dual buffer to capture log messages
- * before they are written to a file. This way we avoid serial execution.
- *
- * The logger files come in two as well, where we switch them
- * once the logger is full.
- * The logger file format is "stalker_YY-MM-DDTHH:MM:SS_number.log"
- * An option to consider is we need a rotating scheme over 2 files only,
- * Moreover, old log files might be sent in the background to long term
storage as well.
- */
-
-#include <assert.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include "monetdb_config.h"
-#include "gdk.h"
-#include "gdk_stalker.h"
-
-// 0 -> stalker
-// 1 -> secondary_stalker
-static gdk_stalker stalker = { .allocated_size = 0, .id = 0, .lock =
MT_LOCK_INITIALIZER("GDKstalkerL") };
-static gdk_stalker secondary_stalker = { .allocated_size = 0, .id = 1, .lock =
MT_LOCK_INITIALIZER("GDKstalkerL2") };
-static ATOMIC_TYPE SELECTED_STALKER_ID = 0;
-
-static bool GDK_STALKER_STOP = false;
-
-static FILE *output_file;
-static int file_size = 0;
-static int file_id = 1;
-
-static ATOMIC_TYPE CUR_LOG_LEVEL = DEFAULT_LOG_LEVEL;
-static ATOMIC_TYPE CUR_FLUSH_LEVEL = DEFAULT_FLUSH_LEVEL;
-
-
-
-// Output error from snprintf of vsnprintf
-static void
-_GDKstalker_log_output_error(int bytes_written)
-{
- assert(bytes_written >= 0);
-}
-
-
-// Check if log file is open
-static void
-_GDKstalker_file_is_open(FILE *file)
-{
- assert(file);
-}
-
-
-// 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
-_GDKstalker_create_file(void)
-{
- char id[INT_MAX_LEN];
- snprintf(id, INT_MAX_LEN, "%d", file_id);
-
- char file_name[FILENAME_MAX];
- sprintf(file_name, "%s%c%s%c%s%c%s%s", GDKgetenv("gdk_dbpath"), DIR_SEP,
FILE_NAME, NAME_SEP, GDKstalker_timestamp(), NAME_SEP, id, ".log");
-
- output_file = fopen(file_name, "w");
-
- _GDKstalker_file_is_open(output_file);
-}
-
-
-
-// Candidate for 'gnu_printf'â' format attribute
[-Werror=suggest-attribute=format]
-static int
-_GDKstalker_fill_stalker(gdk_stalker *sel_stalker, const char *fmt, va_list
va) __attribute__ ((format (printf, 2, 0)));
-
-static int
-_GDKstalker_fill_stalker(gdk_stalker *sel_stalker, const char *fmt, va_list va)
-{
- // vsnprintf(char *str, size_t count, ...) -> including null terminating
character
- int bytes_written = vsnprintf(sel_stalker->buffer +
sel_stalker->allocated_size, BUFFER_SIZE - sel_stalker->allocated_size, fmt,
va);
- _GDKstalker_log_output_error(bytes_written);
-
- // vsnprintf returned value -> does not include the null terminating
character
- return bytes_written++;
-}
-
-
-
-/**
- *
- * API CALLS
- *
- */
-char*
-GDKstalker_timestamp(void)
-{
- static char datetime[20];
- time_t now = time(NULL);
- struct tm *tmp = localtime(&now);
- strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", tmp);
-
- return datetime;
-}
-
-
-gdk_return
-GDKstalker_init(void)
-{
- _GDKstalker_create_file();
- return GDK_SUCCEED;
-}
-
-
-gdk_return
-GDKstalker_stop(void)
-{
- GDK_STALKER_STOP = true;
- return GDKstalker_flush_buffer();
-}
-
-
-gdk_return
-GDKstalker_set_log_level(int *level)
-{
- if((int) ATOMIC_GET(&CUR_LOG_LEVEL) == *level)
- return GDK_SUCCEED;
-
- if(*level == M_NONE && (int) ATOMIC_GET(&CUR_LOG_LEVEL) != M_NONE)
- {
- int GDK_result = GDKstalker_flush_buffer();
- if(GDK_result == GDK_FAIL)
- return GDK_FAIL;
- }
-
- ATOMIC_SET(&CUR_LOG_LEVEL, *level);
-
- return GDK_SUCCEED;
-}
-
-
-gdk_return
-GDKstalker_reset_log_level(void)
-{
- if((int) ATOMIC_GET(&CUR_LOG_LEVEL) == M_NONE)
- return GDK_SUCCEED;
-
- int GDK_result = GDKstalker_flush_buffer();
- if(GDK_result == GDK_FAIL)
- return GDK_FAIL;
-
- ATOMIC_SET(&CUR_LOG_LEVEL, M_NONE);
-
- return GDK_SUCCEED;
-}
-
-
-gdk_return
-GDKstalker_set_flush_level(int *level)
-{
- if((int) ATOMIC_GET(&CUR_FLUSH_LEVEL) == *level)
- return GDK_SUCCEED;
-
- ATOMIC_SET(&CUR_FLUSH_LEVEL, *level);
-
- return GDK_SUCCEED;
-}
-
-
-gdk_return
-GDKstalker_reset_flush_level(void)
-{
- if((int) ATOMIC_GET(&CUR_FLUSH_LEVEL) == M_ERROR)
- return GDK_SUCCEED;
-
- ATOMIC_SET(&CUR_FLUSH_LEVEL, M_ERROR);
-
- return GDK_SUCCEED;
-}
-
-
-gdk_return
-GDKstalker_log(LOG_LEVEL level, int event_id, const char *fmt, ...)
-{
- if((int) level >= (int) ATOMIC_GET(&CUR_LOG_LEVEL) && (int)
ATOMIC_GET(&CUR_LOG_LEVEL) > M_NONE)
- {
- // Select a stalker
- gdk_stalker *fill_stalker;
- MT_Lock lock;
- int GDK_result;
- bool SWITCH_STALKER = true;
- int bytes_written = 0;
-
- if((int) ATOMIC_GET(&SELECTED_STALKER_ID) == stalker.id)
- {
- fill_stalker = &stalker;
- lock = stalker.lock;
- }
- else
- {
- fill_stalker = &secondary_stalker;
- lock = secondary_stalker.lock;
- }
-
- MT_lock_set(&lock);
- {
- va_list va;
- va_start(va, fmt);
- bytes_written = _GDKstalker_fill_stalker(fill_stalker, fmt, va);
- va_end(va);
-
- // The message fits the buffer OR the buffer is empty (we don't
care if it fits - just cut it off)
- if(bytes_written < (BUFFER_SIZE - fill_stalker->allocated_size) ||
- fill_stalker->allocated_size == 0)
- {
- fill_stalker->allocated_size += bytes_written;
- SWITCH_STALKER = false;
- }
- }
- MT_lock_unset(&lock);
-
- if(SWITCH_STALKER)
- {
- // Switch stalker
- if((int) ATOMIC_GET(&SELECTED_STALKER_ID) == stalker.id)
- {
- fill_stalker = &secondary_stalker;
- lock = secondary_stalker.lock;
- }
- else
- {
- fill_stalker = &stalker;
- lock = stalker.lock;
- }
-
- MT_lock_set(&lock);
- {
- // Flush current stalker
- MT_Id tid;
-
- if(MT_create_thread(&tid, (void(*) (void*))
GDKstalker_flush_buffer, NULL, MT_THR_JOINABLE, "GDKstalkerFlush") < 0)
- return GDK_FAIL;
-
- va_list va;
- va_start(va, fmt);
- bytes_written = _GDKstalker_fill_stalker(fill_stalker, fmt,
va);
- va_end(va);
-
- // The second buffer will always be empty at start
- // So if the message does not fit we cut it off
- // message might be > BUFFER_SIZE
- fill_stalker->allocated_size += bytes_written;
-
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list