Changeset: ef251ffa8457 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ef251ffa8457
Added Files:
        sql/backends/monet5/Tests/dbextra_lock_test.py
        sql/backends/monet5/Tests/dbextra_lock_test.stable.err
        sql/backends/monet5/Tests/dbextra_lock_test.stable.out
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out.Darwin
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out.FreeBSD
        sql/test/BugTracker-2017/Tests/all_minus_count_star.Bug-6297.sql
        sql/test/BugTracker-2017/Tests/all_minus_count_star.Bug-6297.stable.err
        sql/test/BugTracker-2017/Tests/all_minus_count_star.Bug-6297.stable.out
        
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_not_in_select.Bug-6290.sql
        
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_not_in_select.Bug-6290.stable.err
        
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_not_in_select.Bug-6290.stable.out
        
sql/test/BugTracker-2017/Tests/crash_function_returning_sample.Bug-6291.sql
        
sql/test/BugTracker-2017/Tests/crash_function_returning_sample.Bug-6291.stable.err
        
sql/test/BugTracker-2017/Tests/crash_function_returning_sample.Bug-6291.stable.out
        
sql/test/BugTracker-2017/Tests/distinct_minus_count_distinct.Bug-6296.sql
        
sql/test/BugTracker-2017/Tests/distinct_minus_count_distinct.Bug-6296.stable.err
        
sql/test/BugTracker-2017/Tests/distinct_minus_count_distinct.Bug-6296.stable.out
        sql/test/BugTracker-2017/Tests/nestedoperators.Bug-6292.stable.err
        sql/test/BugTracker-2017/Tests/nestedoperators.Bug-6292.stable.out
        sql/test/BugTracker-2017/Tests/not_plus.Bug-6294.sql
        sql/test/BugTracker-2017/Tests/not_plus.Bug-6294.stable.err
        sql/test/BugTracker-2017/Tests/not_plus.Bug-6294.stable.out
        sql/test/orderidx/Tests/simpletable.stable.out.32bit.Windows
        sql/test/orderidx/Tests/smalltable.stable.out.32bit.Windows
Modified Files:
        clients/Tests/exports.stable.out
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        common/stream/stream.c
        common/stream/stream.h
        gdk/gdk_atoms.c
        gdk/gdk_logger.c
        gdk/gdk_posix.c
        gdk/gdk_private.h
        gdk/gdk_utils.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/25_debug.sql
        sql/scripts/51_sys_schema_extension.sql
        sql/test/BugTracker-2016/Tests/storagemodel.sql
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out.Windows
        sql/test/BugTracker-2017/Tests/All
        sql/test/BugTracker-2017/Tests/nestedoperators.Bug-6292.sql
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/check.stable.out
        sql/test/emptydb-upgrade-chain/Tests/check.stable.out.32bit
        sql/test/emptydb-upgrade-chain/Tests/check.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-hge/Tests/check.stable.out.int128
        sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade/Tests/check.stable.out
        sql/test/emptydb-upgrade/Tests/check.stable.out.32bit
        sql/test/emptydb-upgrade/Tests/check.stable.out.int128
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
        sql/test/emptydb/Tests/check.SQL.py
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/sys-schema/Tests/check_AlternateKey_uniqueness.sql
        sql/test/sys-schema/Tests/check_AlternateKey_uniqueness.stable.out
        sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql
        
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out
        sql/test/sys-schema/Tests/check_PrimaryKey_uniqueness.sql
        sql/test/sys-schema/Tests/check_PrimaryKey_uniqueness.stable.out
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
        testing/process.py
        tools/merovingian/ChangeLog.Jul2017
        tools/merovingian/daemon/forkmserver.c
Branch: default
Log Message:

Merge with Jul2017 branch.


diffs (truncated from 49796 to 300 lines):

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
@@ -2618,6 +2618,7 @@ stream *file_rstream(FILE *fp, const cha
 stream *file_wastream(FILE *fp, const char *name);
 stream *file_wstream(FILE *fp, const char *name);
 FILE *getFile(stream *s);
+int getFileNo(stream *s);
 size_t getFileSize(stream *s);
 stream *iconv_rstream(stream *ss, const char *charset, const char *name);
 stream *iconv_wstream(stream *ss, const char *charset, const char *name);
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -1231,7 +1231,7 @@ dump_functions(Mapi mid, stream *toConso
                      "s.id = f.schema_id "
                      "%s%s"
                      "%s%s%s%s%s%s"
-               "ORDER BY f.id";
+               "ORDER BY f.func";
        MapiHdl hdl;
        char *q;
        size_t l;
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -2208,7 +2208,7 @@ doFile(Mapi mid, stream *fp, int useinse
 #endif
 
        (void) save_history;    /* not used if no readline */
-       if (getFile(fp) && isatty(fileno(getFile(fp)))
+       if (isatty(getFileNo(fp)) /* fails if not a FILE* */
 #ifdef WIN32                   /* isatty may not give expected result */
            && formatter != TESTformatter
 #endif
diff --git a/common/stream/stream.c b/common/stream/stream.c
--- a/common/stream/stream.c
+++ b/common/stream/stream.c
@@ -129,6 +129,7 @@
 
 #ifdef NATIVE_WIN32
 #define pclose _pclose
+#define fileno(fd) _fileno(fd)
 #endif
 
 #define UTF8BOM                "\xEF\xBB\xBF" /* UTF-8 encoding of Unicode BOM 
*/
@@ -821,7 +822,7 @@ file_fsync(stream *s)
        if (fp == NULL ||
            (s->access == ST_WRITE
 #ifdef NATIVE_WIN32
-            && _commit(_fileno(fp)) < 0
+            && _commit(fileno(fp)) < 0
 #else
 #ifdef HAVE_FDATASYNC
             && fdatasync(fileno(fp)) < 0
@@ -877,10 +878,6 @@ file_fsetpos(stream *s, lng p)
        return res;
 }
 
-#ifdef NATIVE_WIN32
-#define fileno(fd) _fileno(fd)
-#endif
-
 size_t
 getFileSize(stream *s)
 {
@@ -2978,7 +2975,7 @@ file_rastream(FILE *fp, const char *name
                }
        }
 #ifdef _MSC_VER
-       if (_fileno(fp) == 0 && _isatty(0)) {
+       if (fileno(fp) == 0 && isatty(0)) {
                struct console *c = malloc(sizeof(struct console));
                s->stream_data.p = c;
                c->h = GetStdHandle(STD_INPUT_HANDLE);
@@ -3015,7 +3012,7 @@ file_wastream(FILE *fp, const char *name
        s->access = ST_WRITE;
        s->type = ST_ASCII;
 #ifdef _MSC_VER
-       if ((_fileno(fp) == 1 || _fileno(fp) == 2) && _isatty(_fileno(fp))) {
+       if ((fileno(fp) == 1 || fileno(fp) == 2) && isatty(fileno(fp))) {
                struct console *c = malloc(sizeof(struct console));
                s->stream_data.p = c;
                c->h = GetStdHandle(STD_OUTPUT_HANDLE);
@@ -5393,6 +5390,17 @@ getFile(stream *s)
        return (FILE *) s->stream_data.p;
 }
 
+int
+getFileNo(stream *s)
+{
+       FILE *f;
+
+       f = getFile(s);
+       if (f == NULL)
+               return -1;
+       return fileno(f);
+}
+
 static ssize_t
 stream_blackhole_write(stream *s, const void *buf, size_t elmsize, size_t cnt)
 {
diff --git a/common/stream/stream.h b/common/stream/stream.h
--- a/common/stream/stream.h
+++ b/common/stream/stream.h
@@ -189,6 +189,7 @@ stream_export stream *file_rastream(FILE
 stream_export stream *file_wastream(FILE *fp, const char *name);
 
 stream_export FILE *getFile(stream *s);
+stream_export int getFileNo(stream *s); /* fileno(getFile(s)) */
 stream_export size_t getFileSize(stream *s);
 
 stream_export stream *iconv_rstream(stream *ss, const char *charset, const 
char *name);
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -1131,7 +1131,13 @@ strCleanHash(Heap *h, int rebuild)
        }
 #endif
        /* only set dirty flag if the hash table actually changed */
-       h->dirty |= memcmp(oldhash, h->base, sizeof(oldhash)) != 0;
+       if (!h->dirty &&
+           memcmp(oldhash, h->base, sizeof(oldhash)) != 0) {
+               if (h->storage == STORE_MMAP)
+                       (void) MT_msync(h->base, GDK_STRHASHSIZE);
+               else
+                       h->dirty = 1;
+       }
 }
 
 /*
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -950,7 +950,7 @@ logger_readlog(logger *lg, char *filenam
                GDKdebug = dbg;
                return GDK_SUCCEED;
        }
-       if (fstat(fileno(getFile(lg->log)), &sb) < 0) {
+       if (fstat(getFileNo(lg->log), &sb) < 0) {
                fprintf(stderr, "!ERROR: logger_readlog: fstat on opened file 
%s failed\n", filename);
                mnstr_destroy(lg->log);
                lg->log = NULL;
@@ -2557,7 +2557,7 @@ pre_allocate(logger *lg)
        if (p + DBLKSZ > lg->end) {
                p &= ~(DBLKSZ - 1);
                p += SEGSZ;
-               if (GDKextendf(fileno(getFile(lg->log)), (size_t) p, "WAL 
file") != GDK_SUCCEED)
+               if (GDKextendf(getFileNo(lg->log), (size_t) p, "WAL file") != 
GDK_SUCCEED)
                        return GDK_FAIL;
                lg->end = p;
        }
diff --git a/gdk/gdk_posix.c b/gdk/gdk_posix.c
--- a/gdk/gdk_posix.c
+++ b/gdk/gdk_posix.c
@@ -891,15 +891,6 @@ MT_msync(void *p, size_t len)
        return 0;
 }
 
-#ifndef _HEAPOK                        /* MinGW */
-#define _HEAPEMPTY      (-1)
-#define _HEAPOK         (-2)
-#define _HEAPBADBEGIN   (-3)
-#define _HEAPBADNODE    (-4)
-#define _HEAPEND        (-5)
-#define _HEAPBADPTR     (-6)
-#endif
-
 int
 MT_path_absolute(const char *pathname)
 {
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -130,8 +130,8 @@ void BBPdump(void);         /* never called: fo
        __attribute__((__visibility__("hidden")));
 __hidden char *GDKload(int farmid, const char *nme, const char *ext, size_t 
size, size_t *maxsize, storage_t mode)
        __attribute__((__visibility__("hidden")));
-__hidden void GDKlog(_In_z_ _Printf_format_string_ const char *format, ...)
-       __attribute__((__format__(__printf__, 1, 2)))
+__hidden void GDKlog(_In_z_ _Printf_format_string_ FILE * fl, const char 
*format, ...)
+       __attribute__((__format__(__printf__, 2, 3)))
        __attribute__((__visibility__("hidden")));
 __hidden gdk_return GDKmove(int farmid, const char *dir1, const char *nme1, 
const char *ext1, const char *dir2, const char *nme2, const char *ext2)
        __attribute__ ((__warn_unused_result__))
@@ -267,6 +267,7 @@ typedef char long_str[IDLENGTH];    /* stan
 extern struct BBPfarm_t {
        unsigned int roles;     /* bitmask of allowed roles */
        const char *dirname;    /* farm directory */
+       FILE *lock_file;
 } BBPfarms[MAXFARMS];
 
 extern int BBP_dirty;  /* BBP table dirty? */
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -50,7 +50,7 @@ static char THRprintbuf[BUFSIZ];
 #endif
 
 static volatile ATOMIC_FLAG GDKstopped = ATOMIC_FLAG_INIT;
-static void GDKunlockHome(void);
+static void GDKunlockHome(int farmid);
 
 #undef malloc
 #undef calloc
@@ -164,7 +164,7 @@ GDKsetenv(const char *name, const char *
  */
 #define GDKLOCK        ".gdk_lock"
 
-static FILE *GDKlockFile = 0;
+#define GET_GDKLOCK(x) BBPfarms[BBPselectfarm((x), 0, offheap)].lock_file
 
 #define GDKLOGOFF      "LOGOFF"
 #define GDKFOUNDDEAD   "FOUND  DEAD"
@@ -176,7 +176,7 @@ static FILE *GDKlockFile = 0;
  * process, thread and user ID, and the current time.
  */
 void
-GDKlog(const char *format, ...)
+GDKlog(FILE *lockFile, const char *format, ...)
 {
        va_list ap;
        char *p = 0, buf[1024];
@@ -186,7 +186,7 @@ GDKlog(const char *format, ...)
 #endif
        char *ctm;
 
-       if (MT_pagesize() == 0 || GDKlockFile == NULL)
+       if (MT_pagesize() == 0 || lockFile == NULL)
                return;
 
        va_start(ap, format);
@@ -199,7 +199,7 @@ GDKlog(const char *format, ...)
        for (p = buf; (p = strchr(p, '@')) != NULL; *p = ' ')
                ;
 
-       fseek(GDKlockFile, 0, SEEK_END);
+       fseek(lockFile, 0, SEEK_END);
 #ifndef HAVE_GETUID
 #define getuid() 0
 #endif
@@ -212,8 +212,8 @@ GDKlog(const char *format, ...)
        ctm = ctime(&tm);
 #endif
 #endif
-       fprintf(GDKlockFile, "USR=%d PID=%d TIME=%.24s @ %s\n", (int) getuid(), 
(int) getpid(), ctm, buf);
-       fflush(GDKlockFile);
+       fprintf(lockFile, "USR=%d PID=%d TIME=%.24s @ %s\n", (int) getuid(), 
(int) getpid(), ctm, buf);
+       fflush(lockFile);
 }
 
 /*
@@ -424,7 +424,7 @@ MT_init(void)
 #define CATNAP         50      /* time to sleep in ms for catnaps */
 
 static void THRinit(void);
-static void GDKlockHome(void);
+static void GDKlockHome(int farmid);
 
 #ifndef NDEBUG
 static MT_Lock mallocsuccesslock MT_LOCK_INITIALIZER("mallocsuccesslock");
@@ -437,6 +437,7 @@ GDKinit(opt *set, int setlen)
        char *p;
        opt *n;
        int i, nlen = 0;
+       int persistent_farmid, transient_farmid;
        char buf[16];
 
        /* some sanity checks (should also find if symbols are not defined) */
@@ -496,7 +497,16 @@ GDKinit(opt *set, int setlen)
 #endif
 #endif
        /* now try to lock the database */
-       GDKlockHome();
+       /* 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);
+       }
 
        /* Mserver by default takes 80% of all memory as a default */
        GDK_mem_maxsize = (size_t) ((double) MT_npages() * (double) 
MT_pagesize() * 0.815);
@@ -679,6 +689,7 @@ GDKreset(int status, int exit)
        MT_Id pid = MT_getpid();
        Thread t, s;
        struct serverthread *st;
+       int persistent_farmid, transient_farmid;
 
        if( GDKkey){
                BBPunfix(GDKkey->batCacheid);
@@ -726,8 +737,14 @@ GDKreset(int status, int exit)
                        /* we can't clean up after killing threads */
                        BBPexit();
                }
-               GDKlog(GDKLOGOFF);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to