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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list