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