Changeset: 3aa591c5683b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3aa591c5683b
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/gdk_utils.c
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/manual.c
        monetdb5/modules/mal/oltp.c
        monetdb5/modules/mal/querylog.c
        monetdb5/modules/mal/querylog.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql_rank.mal
        sql/common/sql_types.c
        sql/server/rel_select.c
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
Branch: default
Log Message:

Merge with Jul2017 branch.


diffs (truncated from 614 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -94,6 +94,8 @@ Ready.
 [ "aggr",      "covar",        "function aggr.covar(e1:bat[:lng], 
e2:bat[:lng]):lng;", "",     ""      ]
 [ "aggr",      "covar",        "function aggr.covar(e1:bat[:sht], 
e2:bat[:sht]):sht;", "",     ""      ]
 [ "aggr",      "exist",        "command aggr.exist(b:bat[:any_2], h:any_1):bit 
",      "ALGexist;",    ""      ]
+[ "aggr",      "exist",        "command aggr.exist(b:bat[:any_2]):bit ",       
"SQLexist;",    ""      ]
+[ "aggr",      "exist",        "command aggr.exist(v:any_2):bit ",     
"SQLexist_val;",        ""      ]
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:dbl]):str ",    
"JSONgroupStr;",        "Aggregate the double values to array." ]
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:str]):str ",    
"JSONgroupStr;",        "Aggregate the string values to array." ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmax3;",    ""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -102,6 +102,8 @@ Ready.
 [ "aggr",      "covar",        "function aggr.covar(e1:bat[:lng], 
e2:bat[:lng]):lng;", "",     ""      ]
 [ "aggr",      "covar",        "function aggr.covar(e1:bat[:sht], 
e2:bat[:sht]):sht;", "",     ""      ]
 [ "aggr",      "exist",        "command aggr.exist(b:bat[:any_2], h:any_1):bit 
",      "ALGexist;",    ""      ]
+[ "aggr",      "exist",        "command aggr.exist(b:bat[:any_2]):bit ",       
"SQLexist;",    ""      ]
+[ "aggr",      "exist",        "command aggr.exist(v:any_2):bit ",     
"SQLexist_val;",        ""      ]
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:dbl]):str ",    
"JSONgroupStr;",        "Aggregate the double values to array." ]
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:str]):str ",    
"JSONgroupStr;",        "Aggregate the string values to array." ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmax3;",    ""      ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1603,8 +1603,8 @@ str PROFexitClient(Client c);
 str PROFinitClient(Client c);
 str QLOGappend(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
 str QLOGcall(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
-void QLOGcalls(BAT **r);
-void QLOGcatalog(BAT **r);
+str QLOGcalls(BAT **r);
+str QLOGcatalog(BAT **r);
 str QLOGdefineNaive(void *ret, str *qry, str *opt, int *nr);
 str QLOGdisable(void *ret);
 str QLOGempty(void *ret);
@@ -2178,7 +2178,7 @@ void initHeartbeat(void);
 void initNamespace(void);
 void initParser(void);
 void initProfiler(void);
-int initQlog(void);
+str initQlog(void);
 int initTrace(void);
 int inlineMALblock(MalBlkPtr mb, int pc, MalBlkPtr mc);
 str inplaceRef;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -20,8 +20,6 @@
 #include "gdk_private.h"
 #include "mutils.h"
 
-static char GDKdbpathStr[PATHLENGTH] = { "dbpath" };
-
 BAT *GDKkey = NULL;
 BAT *GDKval = NULL;
 int GDKdebug = 0;
@@ -87,9 +85,6 @@ GDKenvironment(const char *dbpath)
                fprintf(stderr, "!GDKenvironment: directory not an absolute 
path: %s.\n", dbpath);
                return 0;
        }
-       strncpy(GDKdbpathStr, dbpath, PATHLENGTH);
-       /* make coverity happy: */
-       GDKdbpathStr[PATHLENGTH - 1] = 0;
        return 1;
 }
 
@@ -437,7 +432,7 @@ GDKinit(opt *set, int setlen)
        char *p;
        opt *n;
        int i, nlen = 0;
-       int persistent_farmid, transient_farmid;
+       int farmid;
        char buf[16];
 
        /* some sanity checks (should also find if symbols are not defined) */
@@ -496,16 +491,25 @@ GDKinit(opt *set, int setlen)
        _set_error_mode(_OUT_TO_STDERR);
 #endif
 #endif
-       /* now try to lock the database */
-       /* type and hptype are unused for now */
-       persistent_farmid = BBPselectfarm(PERSISTENT, 0, 0);
-       GDKlockHome(persistent_farmid);
-       transient_farmid = BBPselectfarm(TRANSIENT, 0, 0);
-       if (persistent_farmid != transient_farmid) {
-               /* Only lock the transient farm if it is different than the
-                * persistent one.
-                */
-               GDKlockHome(transient_farmid);
+       MT_init();
+       BBPdirty(1);
+
+       /* now try to lock the database: go through all farms, and if
+        * we see a new directory, lock it */
+       for (farmid = 0; farmid < MAXFARMS; farmid++) {
+               if (BBPfarms[farmid].dirname != NULL) {
+                       int skip = 0;
+                       int j;
+                       for (j = 0; j < farmid; j++) {
+                               if (BBPfarms[j].dirname != NULL &&
+                                   strcmp(BBPfarms[farmid].dirname, 
BBPfarms[j].dirname) == 0) {
+                                       skip = 1;
+                                       break;
+                               }
+                       }
+                       if (!skip)
+                               GDKlockHome(farmid);
+               }
        }
 
        /* Mserver by default takes 80% of all memory as a default */
@@ -689,7 +693,7 @@ GDKreset(int status, int exit)
        MT_Id pid = MT_getpid();
        Thread t, s;
        struct serverthread *st;
-       int persistent_farmid, transient_farmid;
+       int farmid;
 
        if( GDKkey){
                BBPunfix(GDKkey->batCacheid);
@@ -737,19 +741,28 @@ GDKreset(int status, int exit)
                        /* we can't clean up after killing threads */
                        BBPexit();
                }
-               GDKlog(GET_GDKLOCK(PERSISTENT), GDKLOGOFF);
-               persistent_farmid = BBPselectfarm(PERSISTENT, 0, 0);
-               transient_farmid = BBPselectfarm(TRANSIENT, 0, 0);
-               if (persistent_farmid != transient_farmid) {
-                       GDKunlockHome(transient_farmid);
+               GDKlog(GET_GDKLOCK(0), GDKLOGOFF);
+
+               for (farmid = 0; farmid < MAXFARMS; farmid++) {
+                       if (BBPfarms[farmid].dirname != NULL) {
+                               int skip = 0;
+                               int j;
+                               for (j = 0; j < farmid; j++) {
+                                       if (BBPfarms[j].dirname != NULL &&
+                                           strcmp(BBPfarms[farmid].dirname, 
BBPfarms[j].dirname) == 0) {
+                                               skip = 1;
+                                               break;
+                                       }
+                               }
+                               if (!skip)
+                                       GDKunlockHome(farmid);
+                       }
                }
-               GDKunlockHome(persistent_farmid);
 
 #if !defined(USE_PTHREAD_LOCKS) && !defined(NDEBUG)
                TEMDEBUG GDKlockstatistics(1);
 #endif
                GDKdebug = 0;
-               strcpy(GDKdbpathStr,"dbpath");
                GDK_mmap_minsize_persistent = MMAP_MINSIZE_PERSISTENT;
                GDK_mmap_minsize_transient = MMAP_MINSIZE_TRANSIENT;
                GDK_mmap_pagesize = MMAP_PAGESIZE;
@@ -787,7 +800,7 @@ GDKreset(int status, int exit)
 void
 GDKexit(int status)
 {
-       if (GET_GDKLOCK(PERSISTENT) == NULL) {
+       if (GET_GDKLOCK(0) == NULL) {
 #ifdef HAVE_EMBEDDED
                return;
 #endif
@@ -829,42 +842,44 @@ GDKlockHome(int farmid)
 {
        int fd;
        struct stat st;
-       str gdklockpath = GDKfilepath(farmid, NULL, GDKLOCK, NULL);
-       char GDKdirStr[PATHLENGTH];
-       FILE *GDKlockFile = BBPfarms[farmid].lock_file;
+       char *gdklockpath;
+       FILE *GDKlockFile;
 
-       assert(GDKlockFile == NULL);
-       assert(GDKdbpathStr != NULL);
+       assert(BBPfarms[farmid].dirname != NULL);
+       assert(BBPfarms[farmid].lock_file == NULL);
 
-       snprintf(GDKdirStr, PATHLENGTH, "%s%c", GDKdbpathStr, DIR_SEP);
+       gdklockpath = GDKfilepath(farmid, NULL, GDKLOCK, NULL);
+
        /*
         * Obtain the global database lock.
         */
-       if (stat(GDKdbpathStr, &st) < 0 && GDKcreatedir(GDKdirStr) != 
GDK_SUCCEED) {
-               GDKfatal("GDKlockHome: could not create %s\n", GDKdbpathStr);
+       if (stat(BBPfarms[farmid].dirname, &st) < 0 &&
+           GDKcreatedir(gdklockpath) != GDK_SUCCEED) {
+               GDKfatal("GDKlockHome: could not create %s\n",
+                        BBPfarms[farmid].dirname);
        }
        if ((fd = MT_lockf(gdklockpath, F_TLOCK, 4, 1)) < 0) {
-               GDKfatal("GDKlockHome: Database lock '%s' denied\n", GDKLOCK);
+               GDKfatal("GDKlockHome: Database lock '%s' denied\n",
+                        gdklockpath);
        }
-       /* now we have the lock on the database */
+
+       /* now we have the lock on the database and are the only
+        * process allowed in this section */
+
        if ((GDKlockFile = fdopen(fd, "r+")) == NULL) {
                close(fd);
-               GDKfatal("GDKlockHome: Could not open %s\n", GDKLOCK);
+               GDKfatal("GDKlockHome: Could not fdopen %s\n", gdklockpath);
        }
-       /*
-        * We have the lock, are the only process currently allowed in
-        * this section.
-        */
-       MT_init();
-       BBPdirty(1);
+       BBPfarms[farmid].lock_file = GDKlockFile;
+
        /*
         * Print the new process list in the global lock file.
         */
        fseek(GDKlockFile, 0, SEEK_SET);
        if (ftruncate(fileno(GDKlockFile), 0) < 0)
-               GDKfatal("GDKlockHome: Could not truncate %s\n", GDKLOCK);
+               GDKfatal("GDKlockHome: Could not truncate %s\n", gdklockpath);
        fflush(GDKlockFile);
-       GDKlog(GET_GDKLOCK(PERSISTENT), GDKLOGON);
+       GDKlog(GDKlockFile, GDKLOGON);
        GDKfree(gdklockpath);
 }
 
@@ -872,12 +887,11 @@ GDKlockHome(int farmid)
 static void
 GDKunlockHome(int farmid)
 {
-       FILE *GDKlockFile = BBPfarms[farmid].lock_file;
-       if (GDKlockFile) {
-               str gdklockpath = GDKfilepath(0, NULL, GDKLOCK, NULL);
+       if (BBPfarms[farmid].lock_file) {
+               char *gdklockpath = GDKfilepath(farmid, NULL, GDKLOCK, NULL);
                MT_lockf(gdklockpath, F_ULOCK, 4, 1);
-               fclose(GDKlockFile);
-               GDKlockFile = 0;
+               fclose(BBPfarms[farmid].lock_file);
+               BBPfarms[farmid].lock_file = NULL;
                GDKfree(gdklockpath);
        }
 }
@@ -1133,7 +1147,7 @@ GDKfatal(const char *format, ...)
                        MT_exit_thread(1);
                        /* exit(1); */
                } else {
-                       GDKlog(GET_GDKLOCK(PERSISTENT), "%s", message);
+                       GDKlog(GET_GDKLOCK(0), "%s", message);
        #ifdef COREDUMP
                        abort();
        #else
diff --git a/monetdb5/modules/mal/batExtensions.c 
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -71,7 +71,7 @@ CMDBATsingle(Client cntxt, MalBlkPtr mb,
 
        b = COLnew(0,getArgType(mb,pci,1),0, TRANSIENT);
        if( b == 0)
-               throw(MAL,"bat.single","Could not create it");
+               throw(MAL,"bat.single",MAL_MALLOC_FAIL);
        if (ATOMextern(b->ttype))
                u = (ptr) *(str *)u;
        if (BUNappend(b, u, FALSE) != GDK_SUCCEED) {
diff --git a/monetdb5/modules/mal/manual.c b/monetdb5/modules/mal/manual.c
--- a/monetdb5/modules/mal/manual.c
+++ b/monetdb5/modules/mal/manual.c
@@ -42,6 +42,7 @@ MANUALcreateOverview(Client cntxt, MalBl
                BBPreclaim(sig);
                BBPreclaim(adr);
                BBPreclaim(com);
+               throw(MAL, "manual.functions", MAL_MALLOC_FAIL);
        }
 
        list[top++] = cntxt->nspace;
diff --git a/monetdb5/modules/mal/oltp.c b/monetdb5/modules/mal/oltp.c
--- a/monetdb5/modules/mal/oltp.c
+++ b/monetdb5/modules/mal/oltp.c
@@ -239,6 +239,7 @@ OLTPtable(Client cntxt, MalBlkPtr mb, Ma
                if( bu) BBPunfix(bu->batCacheid);
                if( bc) BBPunfix(bc->batCacheid);
                if( bq) BBPunfix(bq->batCacheid);
+               throw(MAL,"oltp.table",MAL_MALLOC_FAIL);
        }
        for( i = 0; msg ==  MAL_SUCCEED && i < MAXOLTPLOCKS; i++)
        if (oltp_locks[i].used ){
diff --git a/monetdb5/modules/mal/querylog.c b/monetdb5/modules/mal/querylog.c
--- a/monetdb5/modules/mal/querylog.c
+++ b/monetdb5/modules/mal/querylog.c
@@ -79,14 +79,17 @@ static BAT *QLOG_calls_result = 0;
 static BAT *QLOG_calls_cpuload = 0;
 static BAT *QLOG_calls_iowait = 0;
 
-void
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to