Changeset: e7a6fa6da4d6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e7a6fa6da4d6
Modified Files:
        ctest/monetdb5/mal/test_malEmbeddedBoot.c
        monetdb5/mal/mal_embedded.c
        monetdb5/mal/mal_embedded.h
        tools/monetdbe/monetdbe.c
        tools/monetdbe/monetdbe.h
Branch: default
Log Message:

Add nr_threads, memorylimit, querytimeout, and sesiontimeout to
bootstrap, as they are client session specific.


diffs (129 lines):

diff --git a/ctest/monetdb5/mal/test_malEmbeddedBoot.c 
b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
--- a/ctest/monetdb5/mal/test_malEmbeddedBoot.c
+++ b/ctest/monetdb5/mal/test_malEmbeddedBoot.c
@@ -21,7 +21,7 @@ main(void)
        msg = createException(MAL, "embedded.monetdb_startup", "GDKinit() 
failed");
         return 1;
     }
-    if ((msg = malEmbeddedBoot()) != MAL_SUCCEED)
+    if ((msg = malEmbeddedBoot(0, 0, 0, 0)) != MAL_SUCCEED)
         return 1;
     return 0;
 }
diff --git a/monetdb5/mal/mal_embedded.c b/monetdb5/mal/mal_embedded.c
--- a/monetdb5/mal/mal_embedded.c
+++ b/monetdb5/mal/mal_embedded.c
@@ -40,7 +40,7 @@
 static bool embeddedinitialized = false;
 
 str
-malEmbeddedBoot(void)
+malEmbeddedBoot(int workerlimit, int memorylimit, int querytimeout, int 
sessiontimeout)
 {
        Client c;
        str msg = MAL_SUCCEED;
@@ -65,6 +65,10 @@ malEmbeddedBoot(void)
        c = MCinitClient((oid) 0, 0, 0);
        if(c == NULL)
                throw(MAL, "malEmbeddedBoot", "Failed to initialize client");
+       c->workerlimit = workerlimit;
+       c->memorylimit = memorylimit;
+       c->querytimeout = querytimeout * 1000000;       // from sec to usec
+       c->sessiontimeout = sessiontimeout * 1000000;
        c->curmodule = c->usermodule = userModule();
        if(c->usermodule == NULL) {
                MCcloseClient(c);
diff --git a/monetdb5/mal/mal_embedded.h b/monetdb5/mal/mal_embedded.h
--- a/monetdb5/mal/mal_embedded.h
+++ b/monetdb5/mal/mal_embedded.h
@@ -16,7 +16,7 @@
 
 #define MAXMODULES  128
 
-mal_export str malEmbeddedBoot(void);
+mal_export str malEmbeddedBoot(int workerlimit, int memorylimit, int 
querytimeout, int sessionlimit);
 mal_export str malExtraModulesBoot(Client c, str extraMalModules[], char* 
mal_scripts);
 mal_export void malEmbeddedReset(void);
 mal_export _Noreturn void malEmbeddedStop(int status);
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -421,6 +421,7 @@ monetdbe_startup(monetdbe_database_inter
        const char* mbedded = "MBEDDED";
        opt *set = NULL;
        int setlen;
+       int workers = 0, memory = 0, querytimeout = 0, sessiontimeout = 0;
        gdk_return gdk_res;
 
        GDKfataljumpenable = 1;
@@ -450,16 +451,43 @@ monetdbe_startup(monetdbe_database_inter
                setlen = mo_add_option(&set, setlen, opt_cmdline, 
"sql_optimizer", "sequential_pipe");
        else
                setlen = mo_add_option(&set, setlen, opt_cmdline, 
"sql_optimizer", "default_pipe");
+
        if (setlen == 0) {
                mo_free_options(set, setlen);
                mdbe->msg = createException(MAL, "monetdbe.monetdbe_startup", 
MAL_MALLOC_FAIL);
                goto cleanup;
        }
+
        if (opts && opts->nr_threads) {
-               GDKnr_threads = opts->nr_threads;
+               if( opts->nr_threads < 0){
+                       mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_startup", "Nr_threads should be positive");
+                       goto cleanup;
+               }
+               workers = GDKnr_threads = opts->nr_threads;
        }
        if (opts && opts->memorylimit) {
-               GDK_vm_maxsize = (size_t) opts->memorylimit;
+               if( opts->nr_threads < 0){
+                       mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_startup", "Memorylimit should be positive");
+                       goto cleanup;
+               }
+               // Memory limit is session specific
+               memory = GDK_vm_maxsize = (size_t) opts->memorylimit;
+       }
+       if (opts && opts->querytimeout) {
+               if( opts->querytimeout < 0){
+                       mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_startup", "Query timeout should be positive (in sec)");
+                       goto cleanup;
+               }
+               // Query time is session specific
+               querytimeout = opts->querytimeout;
+       }
+       if (opts && opts->sessiontimeout) {
+               if( opts->sessiontimeout < 0){
+                       mdbe->msg = createException(MAL, 
"monetdbe.monetdbe_startup", "Session timeout should be positive (in sec)");
+                       goto cleanup;
+               }
+               // Query time is session specific
+               sessiontimeout = opts->querytimeout;
        }
 
        GDKtracer_set_adapter(mbedded); /* set the output of GDKtracer logs */
@@ -495,7 +523,7 @@ monetdbe_startup(monetdbe_database_inter
        else
                have_hge = 0;
 #endif
-       if ((mdbe->msg = malEmbeddedBoot()) != MAL_SUCCEED)
+       if ((mdbe->msg = malEmbeddedBoot(workers, memory, querytimeout, 
sessiontimeout)) != MAL_SUCCEED)
                goto cleanup;
 
        monetdbe_embedded_initialized = true;
diff --git a/tools/monetdbe/monetdbe.h b/tools/monetdbe/monetdbe.h
--- a/tools/monetdbe/monetdbe.h
+++ b/tools/monetdbe/monetdbe.h
@@ -87,8 +87,10 @@ typedef struct {
 typedef void* monetdbe_database;
 
 typedef struct {
-       monetdbe_cnt memorylimit;
-       int nr_threads;
+       int memorylimit;  // top off the amount of RAM to be used, in MB
+       int querytimeout;  // graceful terminate query after a few seconds
+       int sessiontimeout;  // graceful terminate the session after a few 
seconds
+       int nr_threads;                         // maximum number of worker 
treads, limits level of parallalism
 #ifdef HAVE_HGE
        bool have_hge;
 #endif
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to