Changeset: dcb49a4352c8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dcb49a4352c8
Added Files:
        
sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.sql
        
sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.err
        
sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.out
Modified Files:
        gdk/gdk_hash.c
        gdk/gdk_hash.h
        gdk/gdk_heap.c
        gdk/gdk_private.h
        gdk/gdk_search.c
        gdk/gdk_storage.c
        sql/benchmarks/ssbm/Tests/load.SQL.py
        sql/benchmarks/tpch/LOCKED/Tests/load.SQL.py
        sql/benchmarks/tpch/Tests/load.SQL.py
        sql/benchmarks/tpch/fileleak/Tests/load.SQL.py
        sql/test/BugTracker-2016/Tests/All
Branch: Jun2016
Log Message:

Merge with Jul2015 branch.


diffs (truncated from 326 to 300 lines):

diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -251,6 +251,7 @@ BATcheckhash(BAT *b)
                                        h->Hash = (void *) ((char *) h->Link + 
h->lim * h->width);
                                        close(fd);
                                        hp->parentid = b->batCacheid;
+                                       hp->dirty = FALSE;
                                        b->T->hash = h;
                                        ALGODEBUG fprintf(stderr, 
"#BATcheckhash: reusing persisted hash %s\n", BATgetId(b));
                                        
MT_lock_unset(&GDKhashLock(abs(b->batCacheid)));
@@ -345,6 +346,7 @@ BAThash(BAT *b, BUN masksize)
                        GDKfree(hp);
                        return GDK_FAIL;
                }
+               hp->dirty = TRUE;
                sprintf(hp->filename, "%s.%s", nme, ext);
 
                /* cnt = 0, hopefully there is a proper capacity from
@@ -608,6 +610,17 @@ HASHfree(BAT *b)
                MT_lock_set(&GDKhashLock(abs(b->batCacheid)));
                if (b->T->hash && b->T->hash != (Hash *) -1) {
                        if (b->T->hash != (Hash *) 1) {
+                               if (b->T->hash->heap->storage == STORE_MEM &&
+                                   b->T->hash->heap->dirty) {
+                                       GDKsave(b->T->hash->heap->farmid,
+                                               b->T->hash->heap->filename,
+                                               NULL,
+                                               b->T->hash->heap->base,
+                                               b->T->hash->heap->free,
+                                               STORE_MEM,
+                                               FALSE);
+                                       b->T->hash->heap->dirty = FALSE;
+                               }
                                HEAPfree(b->T->hash->heap, 0);
                                GDKfree(b->T->hash->heap);
                                GDKfree(b->T->hash);
diff --git a/gdk/gdk_hash.h b/gdk/gdk_hash.h
--- a/gdk/gdk_hash.h
+++ b/gdk/gdk_hash.h
@@ -227,6 +227,7 @@ gdk_export BUN HASHlist(Hash *h, BUN i);
                } else {                                                \
                        BUN _c = HASHprobe((b)->T->hash, (v));          \
                        HASHputall((b)->T->hash, (i), _c);              \
+                       (b)->T->hash->heap->dirty = TRUE;               \
                }                                                       \
        } while (0)
 
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -713,7 +713,7 @@ HEAPsave_intern(Heap *h, const char *nme
        HEAPDEBUG {
                fprintf(stderr, "#HEAPsave(%s.%s,storage=%d,free=" SZFMT 
",size=" SZFMT ")\n", nme, ext, (int) h->newstorage, h->free, h->size);
        }
-       return GDKsave(h->farmid, nme, ext, h->base, h->free, store);
+       return GDKsave(h->farmid, nme, ext, h->base, h->free, store, TRUE);
 }
 
 gdk_return
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -130,7 +130,7 @@ void BBPdump(void);         /* never called: fo
        __attribute__((__visibility__("hidden")));
 __hidden gdk_return GDKremovedir(int farmid, const char *nme)
        __attribute__((__visibility__("hidden")));
-__hidden gdk_return GDKsave(int farmid, const char *nme, const char *ext, void 
*buf, size_t size, storage_t mode)
+__hidden gdk_return GDKsave(int farmid, const char *nme, const char *ext, void 
*buf, size_t size, storage_t mode, int dosync)
        __attribute__((__visibility__("hidden")));
 __hidden int GDKssort_rev(void *h, void *t, const void *base, size_t n, int 
hs, int ts, int tpe)
        __attribute__((__visibility__("hidden")));
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -392,14 +392,14 @@ GDKextend(const char *fn, size_t size)
  * The primary concern here is to handle STORE_MMAP and STORE_MEM.
  */
 gdk_return
-GDKsave(int farmid, const char *nme, const char *ext, void *buf, size_t size, 
storage_t mode)
+GDKsave(int farmid, const char *nme, const char *ext, void *buf, size_t size, 
storage_t mode, int dosync)
 {
        int err = 0;
 
-       IODEBUG fprintf(stderr, "#GDKsave: name=%s, ext=%s, mode %d\n", nme, 
ext ? ext : "", (int) mode);
+       IODEBUG fprintf(stderr, "#GDKsave: name=%s, ext=%s, mode %d, 
dosync=%d\n", nme, ext ? ext : "", (int) mode, dosync);
 
        if (mode == STORE_MMAP) {
-               if (size && MT_msync(buf, size) < 0)
+               if (dosync && size && MT_msync(buf, size) < 0)
                        err = -1;
                if (err)
                        GDKsyserror("GDKsave: error on: name=%s, ext=%s, "
@@ -441,7 +441,7 @@ GDKsave(int farmid, const char *nme, con
                                                (unsigned) MIN(1 << 30, size),
                                                ret);
                        }
-                       if (!(GDKdebug & FORCEMITOMASK) &&
+                       if (dosync && !(GDKdebug & FORCEMITOMASK) &&
 #if defined(NATIVE_WIN32)
                            _commit(fd) < 0
 #elif defined(HAVE_FDATASYNC)
diff --git a/sql/benchmarks/ssbm/Tests/load.SQL.py 
b/sql/benchmarks/ssbm/Tests/load.SQL.py
--- a/sql/benchmarks/ssbm/Tests/load.SQL.py
+++ b/sql/benchmarks/ssbm/Tests/load.SQL.py
@@ -5,7 +5,7 @@ except ImportError:
     import process
 
 TSTSRCDIR = os.environ['TSTSRCDIR']
-DATADIR = os.path.join(TSTSRCDIR,"SF-0.01") + os.sep.replace('\\', r'\\')
+DATADIR = (os.path.join(TSTSRCDIR,"SF-0.01") + os.sep).replace('\\', r'\\')
 
 c = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr 
= process.PIPE)
 for ln in open(os.path.join(TSTSRCDIR,"load-sf-0.01.sql")):
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/load.SQL.py 
b/sql/benchmarks/tpch/LOCKED/Tests/load.SQL.py
--- a/sql/benchmarks/tpch/LOCKED/Tests/load.SQL.py
+++ b/sql/benchmarks/tpch/LOCKED/Tests/load.SQL.py
@@ -7,7 +7,7 @@ except ImportError:
 TSTSRCBASE = os.environ['TSTSRCBASE']
 TSTDIR = os.environ['TSTDIR']
 SRCDIR = os.path.join(TSTSRCBASE,TSTDIR,os.pardir)
-DATADIR = os.path.join(SRCDIR,"SF-0.01") + os.sep.replace('\\', r'\\')
+DATADIR = (os.path.join(SRCDIR,"SF-0.01") + os.sep).replace('\\', r'\\')
 
 c = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr 
= process.PIPE)
 for ln in open(os.path.join(SRCDIR,"load-sf-0.01-LOCKED.sql")):
diff --git a/sql/benchmarks/tpch/Tests/load.SQL.py 
b/sql/benchmarks/tpch/Tests/load.SQL.py
--- a/sql/benchmarks/tpch/Tests/load.SQL.py
+++ b/sql/benchmarks/tpch/Tests/load.SQL.py
@@ -7,7 +7,7 @@ except ImportError:
 TSTSRCBASE = os.environ['TSTSRCBASE']
 TSTDIR = os.environ['TSTDIR']
 SRCDIR = os.path.join(TSTSRCBASE,TSTDIR)
-DATADIR = os.path.join(SRCDIR,"SF-0.01") + os.sep.replace('\\', r'\\')
+DATADIR = (os.path.join(SRCDIR,"SF-0.01") + os.sep).replace('\\', r'\\')
 
 c = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr 
= process.PIPE)
 for ln in open(os.path.join(SRCDIR,"load-sf-0.01.sql")):
diff --git a/sql/benchmarks/tpch/fileleak/Tests/load.SQL.py 
b/sql/benchmarks/tpch/fileleak/Tests/load.SQL.py
--- a/sql/benchmarks/tpch/fileleak/Tests/load.SQL.py
+++ b/sql/benchmarks/tpch/fileleak/Tests/load.SQL.py
@@ -7,7 +7,7 @@ except ImportError:
 TSTSRCBASE = os.environ['TSTSRCBASE']
 TSTDIR = os.environ['TSTDIR']
 SRCDIR = os.path.join(TSTSRCBASE,TSTDIR,os.pardir)
-DATADIR = os.path.join(SRCDIR,"SF-0.01") + os.sep.replace('\\', r'\\')
+DATADIR = (os.path.join(SRCDIR,"SF-0.01") + os.sep).replace('\\', r'\\')
 
 c = process.client('sql', stdin = process.PIPE, stdout = process.PIPE, stderr 
= process.PIPE)
 for ln in open(os.path.join(SRCDIR,"load-sf-0.01-LOCKED.sql")):
diff --git a/sql/test/BugTracker-2016/Tests/All 
b/sql/test/BugTracker-2016/Tests/All
--- a/sql/test/BugTracker-2016/Tests/All
+++ b/sql/test/BugTracker-2016/Tests/All
@@ -23,3 +23,4 @@ merge_project.Bug-3955
 decimal_vs_integer.Bug-3941
 foreign_key.Bug-3938
 rename_exps.Bug-3974
+join-with-references-2sides-crashes.Bug-3980
diff --git 
a/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.sql
 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.sql
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.sql
@@ -0,0 +1,23 @@
+CREATE TABLE foo (barid INT, name VARCHAR(25), result BOOLEAN);
+CREATE TABLE bar (id INT, version VARCHAR(25));
+UPDATE foo SET result =
+(
+       SELECT TRUE 
+       FROM (
+               SELECT DISTINCT B.version
+               FROM foo AS F
+               INNER JOIN bar AS B ON (F.barid = B.id)
+       ) AS X
+       WHERE X.version =
+       (
+               SELECT
+               version
+               FROM bar
+               WHERE barid = foo.barid
+       )
+       AND foo.name='0000' 
+);
+
+DROP TABLE foo;
+DROP TABLE bar;
+
diff --git 
a/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.err
 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.err
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'join-with-references-2sides-crashes.Bug-3980` in directory 
'sql/test/BugTracker-2016` itself:
+
+
+# 17:35:32 >  
+# 17:35:32 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=36625" "--set" 
"mapi_usock=/var/tmp/mtest-18131/.s.monetdb.36625" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch2/zhang/monet-install/Jul2015/debug/var/MonetDB/mTests_sql_test_BugTracker-2016"
 "--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 17:35:32 >  
+
+# builtin opt  gdk_dbpath = 
/export/scratch2/zhang/monet-install/Jul2015/debug/var/monetdb5/dbfarm/demo
+# builtin opt  gdk_debug = 0
+# builtin opt  gdk_vmtrim = no
+# builtin opt  monet_prompt = >
+# builtin opt  monet_daemon = no
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 36625
+# cmdline opt  mapi_usock = /var/tmp/mtest-18131/.s.monetdb.36625
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/export/scratch2/zhang/monet-install/Jul2015/debug/var/MonetDB/mTests_sql_test_BugTracker-2016
+# cmdline opt  mal_listing = 0
+# cmdline opt  embedded_r = yes
+# cmdline opt  gdk_debug = 536870922
+
+# 17:35:33 >  
+# 17:35:33 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-18131" "--port=36625"
+# 17:35:33 >  
+
+
+# 17:35:34 >  
+# 17:35:34 >  "Done."
+# 17:35:34 >  
+
diff --git 
a/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.out
 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.out
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugTracker-2016/Tests/join-with-references-2sides-crashes.Bug-3980.stable.out
@@ -0,0 +1,93 @@
+stdout of test 'join-with-references-2sides-crashes.Bug-3980` in directory 
'sql/test/BugTracker-2016` itself:
+
+
+# 17:35:32 >  
+# 17:35:32 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=36625" "--set" 
"mapi_usock=/var/tmp/mtest-18131/.s.monetdb.36625" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/export/scratch2/zhang/monet-install/Jul2015/debug/var/MonetDB/mTests_sql_test_BugTracker-2016"
 "--set" "mal_listing=0" "--set" "embedded_r=yes"
+# 17:35:32 >  
+
+# MonetDB 5 server v11.21.20
+# This is an unreleased version
+# Serving database 'mTests_sql_test_BugTracker-2016', using 8 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit 
integers dynamically linked
+# Found 15.589 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://toulouse.da.cwi.nl:36625/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-18131/.s.monetdb.36625
+# MonetDB/GIS module loaded
+# Start processing logs sql/sql_logs version 52200
+# Finished processing logs sql/sql_logs
+# MonetDB/SQL module loaded
+# MonetDB/R   module loaded
+
+Ready.
+# SQL catalog created, loading sql scripts once
+# loading sql script: 09_like.sql
+# loading sql script: 10_math.sql
+# loading sql script: 11_times.sql
+# loading sql script: 12_url.sql
+# loading sql script: 13_date.sql
+# loading sql script: 14_inet.sql
+# loading sql script: 15_querylog.sql
+# loading sql script: 16_tracelog.sql
+# loading sql script: 17_temporal.sql
+# loading sql script: 20_vacuum.sql
+# loading sql script: 21_dependency_functions.sql
+# loading sql script: 22_clients.sql
+# loading sql script: 23_skyserver.sql
+# loading sql script: 24_zorder.sql
+# loading sql script: 25_debug.sql
+# loading sql script: 26_sysmon.sql
+# loading sql script: 27_rejects.sql
+# loading sql script: 39_analytics.sql
+# loading sql script: 39_analytics_hge.sql
+# loading sql script: 40_geom.sql
+# loading sql script: 40_json.sql
+# loading sql script: 40_json_hge.sql
+# loading sql script: 41_md5sum.sql
+# loading sql script: 45_uuid.sql
+# loading sql script: 46_gsl.sql
+# loading sql script: 51_sys_schema_extension.sql
+# loading sql script: 72_fits.sql
+# loading sql script: 74_netcdf.sql
+# loading sql script: 75_storagemodel.sql
+# loading sql script: 80_statistics.sql
+# loading sql script: 80_udf.sql
+# loading sql script: 80_udf_hge.sql
+# loading sql script: 85_bam.sql
+# loading sql script: 90_generator.sql
+# loading sql script: 90_generator_hge.sql
+# loading sql script: 99_system.sql
+
+# 17:35:33 >  
+# 17:35:33 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-18131" "--port=36625"
+# 17:35:33 >  
+
+#CREATE TABLE foo (barid INT, name VARCHAR(25), result BOOLEAN);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to