Changeset: db5c6a2b60e8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=db5c6a2b60e8
Modified Files:
        gdk/gdk.h
        gdk/gdk_bbp.c
        gdk/gdk_bbp.h
        gdk/gdk_logger.c
        gdk/gdk_utils.c
        gdk/gdk_utils.h
        monetdb5/mal/mal.c
        monetdb5/mal/mal_atom.c
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/mtime.h
        sql/backends/monet5/sql_scenario.c
        sql/storage/bat/bat_logger.c
        sql/storage/store.c
        tools/embedded/Tests/lowlevel.R
        tools/embedded/embedded.c
        tools/embedded/rpackage/R/monetdb.R
Branch: embedded
Log Message:

Restartability ugly hacks


diffs (truncated from 394 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2411,10 +2411,14 @@ gdk_export void GDKerror(_In_z_ _Printf_
        __attribute__((__format__(__printf__, 1, 2)));
 gdk_export void GDKsyserror(_In_z_ _Printf_format_string_ const char *format, 
...)
        __attribute__((__format__(__printf__, 1, 2)));
+#ifndef HAVE_EMBEDDED
 __declspec(noreturn) gdk_export void GDKfatal(_In_z_ _Printf_format_string_ 
const char *format, ...)
        __attribute__((__format__(__printf__, 1, 2)))
        __attribute__((__noreturn__));
-
+#else
+gdk_export void GDKfatal(_In_z_ _Printf_format_string_ const char *format, ...)
+       __attribute__((__format__(__printf__, 1, 2)));
+#endif
 /*
  * @
  */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -1024,7 +1024,7 @@ BBPaddfarm(const char *dirname, int role
        }
        for (i = 0; i < MAXFARMS; i++) {
                if (BBPfarms[i].dirname == NULL) {
-                       BBPfarms[i].dirname = strdup(dirname);
+                       BBPfarms[i].dirname = GDKstrdup(dirname);
                        BBPfarms[i].roles = rolemask;
                        return;
                }
@@ -1032,6 +1032,18 @@ BBPaddfarm(const char *dirname, int role
        GDKfatal("BBPaddfarm: too many farms\n");
 }
 
+gdk_export void BBPresetfarms() {
+       BBPexit();
+       BBPunlock("BBPexit");
+       BBPsize = 0;
+       if (BBPfarms[0].dirname != NULL) {
+               GDKfree((void*) BBPfarms[0].dirname);
+       }
+       BBPfarms[0].dirname = NULL;
+       BBPfarms[0].roles = 0;
+}
+
+
 void
 BBPinit(void)
 {
@@ -1142,6 +1154,8 @@ BBPinit(void)
  * interference in a parallel session.
  */
 
+static int backup_files = 0, backup_dir = 0, backup_subdir = 0;
+
 void
 BBPexit(void)
 {
@@ -1162,7 +1176,7 @@ BBPexit(void)
                                                skipped = 1;
                                                continue;
                                        }
-                                       /* NIELS ?? Why reduce share count, 
it's done in VIEWdestroy !! */
+                                       /* NIELS ?? Why reduce share count, 
it's done in VIEWdestroy !!
                                        if (isVIEW(b)) {
                                                bat hp = VIEWhparent(b), tp = 
VIEWtparent(b);
                                                bat vhp = VIEWvhparent(b), vtp 
= VIEWvtparent(b);
@@ -1182,7 +1196,7 @@ BBPexit(void)
                                                        
BBP_cache(vtp)->batSharecnt--;
                                                        --BBP_lrefs(vtp);
                                                }
-                                       }
+                                       }*/
                                        if (isVIEW(b))
                                                VIEWdestroy(b);
                                        else
@@ -1208,6 +1222,11 @@ BBPexit(void)
        } while (skipped);
        GDKfree(BBP_hash);
        BBP_hash = 0;
+       // these need to be NULL, otherwise no new ones get created
+       backup_files = 0;
+       backup_dir = 0;
+       backup_subdir = 0;
+
 }
 
 /*
@@ -3264,7 +3283,6 @@ heap_move(Heap *hp, const char *srcdir, 
  * backup_dir == 1 => BBP.dir saved in BACKUP/
  * backup_dir == 2 => BBP.dir saved in SUBCOMMIT/
  */
-static int backup_files = 0, backup_dir = 0, backup_subdir = 0;
 
 static gdk_return
 BBPprepare(bit subcommit)
diff --git a/gdk/gdk_bbp.h b/gdk/gdk_bbp.h
--- a/gdk/gdk_bbp.h
+++ b/gdk/gdk_bbp.h
@@ -60,6 +60,7 @@ gdk_export bat getBBPsize(void); /* curr
 
 /* global calls */
 gdk_export void BBPaddfarm(const char *dirname, int rolemask);
+gdk_export void BBPresetfarms();
 
 /* update interface */
 gdk_export void BBPclear(bat bid);
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1901,15 +1901,14 @@ logger_create(int debug, const char *fn,
        logger *lg;
 
        lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp, 0, 
NULL);
+       if (!lg)
+                       return NULL;
        if (lg->debug & 1) {
                printf("# Started processing logs %s/%s version 
%d\n",fn,logdir,version);
                fflush(stdout);
        }
-       if (!lg)
-               return NULL;
        if (logger_open(lg) == LOG_ERR) {
                logger_destroy(lg);
-
                return NULL;
        }
        if (lg->debug & 1) {
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1244,7 +1244,7 @@ GDKexit(int status)
 #ifndef HAVE_EMBEDDED
        if (GDKlockFile == NULL) {
                /* no database lock, so no threads, so exit now */
-               exit(status);
+               MT_global_exit(status);
        }
 #endif
        if (ATOMIC_TAS(GDKstopped, GDKstoppedLock, "GDKexit") == 0) {
@@ -1269,16 +1269,12 @@ GDKexit(int status)
                        MT_sleep_ms(CATNAP);
                }
                if (status == 0) {
-                       /* they had there chance, now kill them */
+                       /* they had their chance, now kill them */
                        MT_lock_set(&GDKthreadLock, "GDKexit");
                        for (t = GDKthreads, s = t + THREADS; t < s; t++) {
-                               if (t->pid) {
-                                       MT_Id victim = t->pid;
-
-                                       if (t->pid != pid) {
-                                               fprintf(stderr, "#GDKexit: 
killing thread\n");
-                                               MT_kill_thread(victim);
-                                       }
+                               if (t->pid && t->pid != pid) {
+                                       fprintf(stderr, "#GDKexit: killing 
thread\n");
+                                       MT_kill_thread(t->pid);
                                }
                        }
                        MT_lock_unset(&GDKthreadLock, "GDKexit");
@@ -1292,10 +1288,13 @@ GDKexit(int status)
 #if !defined(USE_PTHREAD_LOCKS) && !defined(NDEBUG)
                TEMDEBUG GDKlockstatistics(1);
 #endif
-#ifndef HAVE_EMBEDDED
+#ifdef HAVE_EMBEDDED
+               return;
+#else
                MT_global_exit(status);
 #endif
        }
+       fprintf(stderr, "#GDKexit: killing thread -1\n");
        MT_exit_thread(-1);
 }
 
diff --git a/gdk/gdk_utils.h b/gdk/gdk_utils.h
--- a/gdk/gdk_utils.h
+++ b/gdk/gdk_utils.h
@@ -86,9 +86,12 @@ gdk_export int GDKinit(opt *set, int set
  * takes care of this.
  */
 gdk_export int GDKnr_threads;
-
+#ifndef HAVE_EMBEDDED
 __declspec(noreturn) gdk_export void GDKexit(int status)
        __attribute__((__noreturn__));
+#else
+gdk_export void GDKexit(int status);
+#endif
 gdk_export int GDKexiting(void);
 
 gdk_export const char *GDKversion(void);
diff --git a/monetdb5/mal/mal.c b/monetdb5/mal/mal.c
--- a/monetdb5/mal/mal.c
+++ b/monetdb5/mal/mal.c
@@ -88,7 +88,9 @@ int mal_init(void){
                monet_memory = MT_npages() * MT_pagesize();
        initNamespace();
        initParser();
+#ifndef HAVE_EMBEDDED
        initHeartbeat();
+#endif
        initResource();
        RECYCLEinit();
        if( malBootstrap() == 0)
@@ -171,5 +173,6 @@ void mal_exit(void){
                fprintf(stderr, "!%s", err);
                free(err);
        }
+       MTIMEreset();
        GDKexit(0);     /* properly end GDK */
 }
diff --git a/monetdb5/mal/mal_atom.c b/monetdb5/mal/mal_atom.c
--- a/monetdb5/mal/mal_atom.c
+++ b/monetdb5/mal/mal_atom.c
@@ -170,7 +170,9 @@ void malAtomDefinition(stream *out, str 
                return;
        }
        if (ATOMindex(name) >= 0) {
+#ifndef HAVE_EMBEDDED /* we can restart embedded MonetDB, making this an 
expected error */
                showException(out, TYPE, "atomDefinition", "Redefinition of 
atom '%s'", name);
+#endif
                return;
        }
        if (tpe < 0 || tpe >= GDKatomcnt) {
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -1274,6 +1274,11 @@ MTIMEtimestamp2timestamp(timestamp *ret,
 static BAT *timezone_name = NULL;
 static BAT *timezone_def = NULL;
 
+void MTIMEreset() {
+       timezone_name = NULL;
+       timezone_def = NULL;
+}
+
 str
 MTIMEprelude(void *ret)
 {
diff --git a/monetdb5/modules/atoms/mtime.h b/monetdb5/modules/atoms/mtime.h
--- a/monetdb5/modules/atoms/mtime.h
+++ b/monetdb5/modules/atoms/mtime.h
@@ -125,6 +125,7 @@ mtime_export str MTIMEdaytime2daytime(da
 mtime_export str MTIMEsecs2daytime(daytime *ret, const lng *src);
 mtime_export str MTIMEsecs2daytime_bulk(bat *ret, bat *bid);
 mtime_export str MTIMEtimestamp2timestamp(timestamp *ret, const timestamp 
*src);
+mtime_export void MTIMEreset();
 mtime_export str MTIMEprelude(void *ret);
 mtime_export str MTIMEepilogue(void *ret);
 mtime_export str MTIMEsynonyms(void *ret, const bit *allow);
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
@@ -202,8 +202,6 @@ SQLepilogue(void *ret)
                mvc_exit();
                SQLinitialized = FALSE;
        }
-       /* this function is never called, but for the style of it, we clean
-        * up our own mess */
        res = msab_retreatScenario(m);
        if (!res)
                return msab_retreatScenario(s);
diff --git a/sql/storage/bat/bat_logger.c b/sql/storage/bat/bat_logger.c
--- a/sql/storage/bat/bat_logger.c
+++ b/sql/storage/bat/bat_logger.c
@@ -178,8 +178,9 @@ bl_destroy(void)
 
        bat_logger = NULL;
        if (l) {
-               logger_exit(l);
-               logger_destroy(l);
+               // FIXME: either of those corrupts stuff
+               //logger_exit(l);
+               //logger_destroy(l);
        }
 }
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1551,9 +1551,8 @@ store_init(int debug, store_type store, 
        }
 
        /* initialize empty bats */
-       if (store == store_bat)
+       if (store == store_bat) {
                bat_utils_init();
-       if (store == store_bat) {
                bat_storage_init(&store_funcs);
                bat_table_init(&table_funcs);
                bat_logger_init(&logger_funcs);
diff --git a/tools/embedded/Tests/lowlevel.R b/tools/embedded/Tests/lowlevel.R
--- a/tools/embedded/Tests/lowlevel.R
+++ b/tools/embedded/Tests/lowlevel.R
@@ -11,7 +11,7 @@ test_that("db starts up", {
        expect_error(monetdb_embedded_startup("/dev/null"))
        dbdir <- tempdir()
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to