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