MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 7e448c0ea191 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e448c0ea191 Modified Files: gdk/gdk_batop.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (21 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -420,7 +420,7 @@ BATappend(BAT *b, BAT *n, bit force) OIDXdestroy(b); /* append two void,void bats */ - if (b->ttype == TYPE_void && BATtdense(n)) { + if (b->ttype == TYPE_void && BATtdense(b)) { oid f = n->tseqbase; if (n->ttype != TYPE_void) @@ -428,7 +428,7 @@ BATappend(BAT *b, BAT *n, bit force) if (BATcount(b) == 0 && f != oid_nil) BATtseqbase(b, f); - if (BATcount(b) + b->tseqbase == f) { + if (BATtdense(n) && BATcount(b) + b->tseqbase == f) { sz += BATcount(b); BATsetcount(b, sz); if (b->tunique) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 99aabb9cfcc6 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=99aabb9cfcc6 Modified Files: monetdb5/modules/atoms/json.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (12 lines): diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c --- a/monetdb5/modules/atoms/json.c +++ b/monetdb5/modules/atoms/json.c @@ -2175,7 +2175,7 @@ JSONjsonaggr(BAT **bnp, BAT *b, BAT *g, freeg = 1; if (t2->ttype == TYPE_void) { map = NULL; - mapoff = b->tseqbase; + mapoff = t2->tseqbase; } else { map = (const oid *) Tloc(t2, 0); } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: ce667e504110 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ce667e504110 Modified Files: gdk/gdk_batop.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (21 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -420,7 +420,7 @@ BATappend(BAT *b, BAT *n, bit force) OIDXdestroy(b); /* append two void,void bats */ - if (b->ttype == TYPE_void && BATtdense(b)) { + if (b->ttype == TYPE_void && BATtdense(n)) { oid f = n->tseqbase; if (n->ttype != TYPE_void) @@ -428,7 +428,7 @@ BATappend(BAT *b, BAT *n, bit force) if (BATcount(b) == 0 && f != oid_nil) BATtseqbase(b, f); - if (BATtdense(n) && BATcount(b) + b->tseqbase == f) { + if (BATcount(b) + b->tseqbase == f) { sz += BATcount(b); BATsetcount(b, sz); if (b->tunique) ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: b9aff809d5ae for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b9aff809d5ae Modified Files: gdk/gdk_batop.c gdk/gdk_system.c sql/storage/store.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (44 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -209,7 +209,8 @@ insert_string_bat(BAT *b, BAT *n, int fo } b->tvarsized = 0; } - } + } else if (unshare_string_heap(b) != GDK_SUCCEED) + return GDK_FAIL; if (toff == 0 && n->twidth == b->twidth) { /* we don't need to do any translation of offset * values, so we can use fast memcpy */ diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c --- a/gdk/gdk_system.c +++ b/gdk/gdk_system.c @@ -420,7 +420,6 @@ pthread_sema_down(pthread_sema_t *s) #else /* !defined(HAVE_PTHREAD_H) && defined(_MSC_VER) */ -#ifdef HAVE_PTHREAD_SIGMASK static struct posthread { struct posthread *next; pthread_t tid; @@ -455,6 +454,7 @@ find_posthread(pthread_t tid) } #endif +#ifdef HAVE_PTHREAD_SIGMASK static void MT_thread_sigmask(sigset_t * new_mask, sigset_t * orig_mask) { diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -1583,7 +1583,7 @@ store_init(int debug, store_type store, /* get the set shared_drift_threshold * we will need it later in store_manager */ shared_drift_threshold = log_settings->shared_drift_threshold; - /* get the set shared_drift_threshold + /* get the set keep_persisted_log_files * we will need it later when calling logger_cleanup */ keep_persisted_log_files = log_settings->keep_persisted_log_files; ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 5d781336bfd2 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5d781336bfd2 Modified Files: gdk/gdk_batop.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (179 lines): diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -58,10 +58,8 @@ static gdk_return insert_string_bat(BAT *b, BAT *n, int force) { BATiter ni; /* iterator */ - int tt; /* tail type */ size_t toff = ~(size_t) 0; /* tail offset */ BUN p, q; /* loop variables */ - oid o = 0; /* in case we're appending */ const void *tp; /* tail value pointer */ unsigned char tbv; /* tail value-as-bte */ unsigned short tsv; /* tail value-as-sht */ @@ -71,18 +69,20 @@ insert_string_bat(BAT *b, BAT *n, int fo var_t v;/* value */ size_t off; /* offset within n's string heap */ + assert(b->ttype == TYPE_str); + /* only transient bats can use some other bat's string heap */ + assert(b->batRole == TRANSIENT || + b->tvheap->parentid == abs(b->batCacheid)); if (n->batCount == 0) return GDK_SUCCEED; ni = bat_iterator(n); tp = NULL; - tt = b->ttype; - if (tt == TYPE_str && - (!GDK_ELIMDOUBLES(b->tvheap) || b->batCount == 0) && + if ((!GDK_ELIMDOUBLES(b->tvheap) || b->batCount == 0) && !GDK_ELIMDOUBLES(n->tvheap) && b->tvheap->hashash == n->tvheap->hashash && /* if needs to be kept unique, take slow path */ (b->tkey & BOUND2BTRUE) == 0) { - if (b->batRole == TRANSIENT) { + if (b->batRole == TRANSIENT || b->tvheap == n->tvheap) { /* If b is in the transient farm (i.e. b will * never become persistent), we try some * clever tricks to avoid copying: @@ -90,14 +90,16 @@ insert_string_bat(BAT *b, BAT *n, int fo * string heap with n; * - otherwise, if b's string heap and n's * string heap are the same (i.e. shared), - * we leave it that way; + * we leave it that way (this includes the + * case that b is persistent and n shares + * its string heap with b); * - otherwise, if b shares its string heap * with some other bat, we materialize it * and we will have to copy strings. */ bat bid = b->batCacheid; - if (b->batCount == 0) { + if (b->batCount == 0 && b->tvheap != n->tvheap) { if (b->tvheap->parentid != bid) { BBPunshare(b->tvheap->parentid); } else { @@ -151,8 +153,8 @@ insert_string_bat(BAT *b, BAT *n, int fo /* make sure we get alignment right */ toff = (toff + GDK_VARALIGN - 1) & ~(GDK_VARALIGN - 1); assert(((toff >> GDK_VARSHIFT) << GDK_VARSHIFT) == toff); - /* if in "force" mode, the heap may be shared when -* memory mapped */ + /* if in "force" mode, the heap may be +* shared when memory mapped */ if (HEAPextend(b->tvheap, toff + n->tvheap->size, force) != GDK_SUCCEED) { toff = ~(size_t) 0; goto bunins_failed; @@ -182,25 +184,25 @@ insert_string_bat(BAT *b, BAT *n, int fo } switch (b->twidth) { case 1: - tt = TYPE_bte; + b->ttype = TYPE_bte; tp = &tbv; break; case 2: - tt = TYPE_sht; + b->ttype = TYPE_sht; tp = &tsv; break; #if SIZEOF_VAR_T == 8 case 4: - tt = TYPE_int; + b->ttype = TYPE_int; tp = &tiv; break; case 8: - tt = TYPE_lng; + b->ttype = TYPE_lng; tp = &v; break; #else case 4: -
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 702993d1f2e0 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=702993d1f2e0 Added Files: sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.sql sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.stable.err sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.stable.out sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.sql sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.stable.err sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.stable.out sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.sql sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.stable.err sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.stable.out sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.sql sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.err sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.out Modified Files: configure.ag gdk/gdk_calc_compare.h monetdb5/extras/rapi/Tests/rapi02.stable.out monetdb5/modules/kernel/aggr.mal monetdb5/modules/kernel/aggr.mal.sh sql/test/BugTracker-2016/Tests/All Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 1014 to 300 lines): diff --git a/configure.ag b/configure.ag --- a/configure.ag +++ b/configure.ag @@ -2478,7 +2478,7 @@ AS_CASE([$enable_int128], why_have_hge='(128-bit integer support disabled)']) AM_CONDITIONAL([HAVE_HGE], [test "x$have_hge" = xyes]) -AC_CHECK_TYPES([ptrdiff_t]) +AC_CHECK_TYPES([ptrdiff_t],,,[@%:@include ]) AC_CHECK_TYPES([intptr_t]) AC_CHECK_TYPES([uintptr_t]) @@ -2489,8 +2489,8 @@ AC_CHECK_SIZEOF([long]) AC_CHECK_SIZEOF([void *]) AC_CHECK_SIZEOF([size_t]) AC_CHECK_SIZEOF([ssize_t]) -AC_CHECK_SIZEOF([ptrdiff_t]) -AC_CHECK_SIZEOF([wchar_t]) +AC_CHECK_SIZEOF([ptrdiff_t],,[@%:@include ]) +AC_CHECK_SIZEOF([wchar_t],,[@%:@include ]) AC_CHECK_SIZEOF([long long]) AC_CHECK_SIZEOF([__int64]) AC_CHECK_SIZEOF([__int128]) diff --git a/gdk/gdk_calc_compare.h b/gdk/gdk_calc_compare.h --- a/gdk/gdk_calc_compare.h +++ b/gdk/gdk_calc_compare.h @@ -599,10 +599,10 @@ BATcalcop(BAT *b1, BAT *b2, BAT *s) return BATconstant(b1->hseqbase, TYPE_TPE, &res, cnt, TRANSIENT); } - bn = BATcalcop_intern(b1->ttype == TYPE_void ? (void *) &b1->tseqbase : (void *) Tloc(b1, 0), ATOMbasetype(b1->ttype), 1, + bn = BATcalcop_intern(b1->ttype == TYPE_void ? (void *) &b1->tseqbase : (void *) Tloc(b1, 0), ATOMtype(b1->ttype) == TYPE_oid ? b1->ttype : ATOMbasetype(b1->ttype), 1, b1->tvheap ? b1->tvheap->base : NULL, b1->twidth, - b2->ttype == TYPE_void ? (void *) &b2->tseqbase : (void *) Tloc(b2, 0), ATOMbasetype(b2->ttype), 1, + b2->ttype == TYPE_void ? (void *) &b2->tseqbase : (void *) Tloc(b2, 0), ATOMtype(b2->ttype) == TYPE_oid ? b2->ttype : ATOMbasetype(b2->ttype), 1, b2->tvheap ? b2->tvheap->base : NULL, b2->twidth, cnt, start, end, cand, candend, b1->hseqbase, diff --git a/monetdb5/extras/rapi/Tests/rapi02.stable.out b/monetdb5/extras/rapi/Tests/rapi02.stable.out --- a/monetdb5/extras/rapi/Tests/rapi02.stable.out +++ b/monetdb5/extras/rapi/Tests/rapi02.stable.out @@ -103,7 +103,7 @@ Ready. [ 0@0, 4 ] [ 1@0, 20 ] [ 2@0, 0 ] -[ 3@0, 2 ] +[ 3@0, nil ] [ "asdf" ] #--# # ht # name diff --git a/monetdb5/modules/kernel/aggr.mal b/monetdb5/modules/kernel/aggr.mal --- a/monetdb5/modules/kernel/aggr.mal +++ b/monetdb5/modules/kernel/aggr.mal @@ -886,7 +886,7 @@ address AGGRquantile3 comment "Grouped quantile aggregate"; function quantile(b:bat[:any_1],q:bat[:dbl]) :any_1; - bn := subquantile(b, q, false); + bn := subquantile(b, q, true); return algebra.fetch(bn, 0@0); end aggr.quantile; diff --git a/monetdb5/modules/kernel/aggr.mal.sh b/monetdb5/modules/kernel/aggr.mal.sh --- a/monetdb5/modules/kernel/aggr.mal.sh +++ b/monetdb5/modules/kernel/aggr.mal.sh @@ -242,7 +242,7 @@ address AGGRquantile3 comment "Grouped quantile aggregate"; function quantile(b:bat[:any_1],q:bat[:dbl]) :any_1; - bn := subquantile(b, q, false); + bn := subquantile(b, q, true); return algebra.fetch(bn, 0@0); end aggr.quantile; 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 @@ -61,3 +61,11 @@ assert-on-push-project-up.Bug-6077 assert-on-project.Bug-6078 crash.Bug-6081 merge-table-edit.Bug-6084 +dce.Bug-6114 +dce2.Bug-6115 +semijoin.Bug-6116 +split_project.Bug-6117 +case-column-when-null-Bug-6124 +select-in-
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 55237f6c03b8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=55237f6c03b8 Modified Files: monetdb5/mal/mal_instruction.c sql/backends/monet5/sql_scenario.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (33 lines): diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c --- a/monetdb5/mal/mal_instruction.c +++ b/monetdb5/mal/mal_instruction.c @@ -735,15 +735,14 @@ makeVarSpace(MalBlkPtr mb) VarPtr *new; int s = mb->vsize * 2; - new = (VarPtr *) GDKzalloc(s * sizeof(VarPtr)); + new = GDKrealloc(mb->var, s * sizeof(VarPtr)); if (new == NULL) { mb->errors++; showScriptException(GDKout, mb, 0, MAL, "newMalBlk:no storage left\n"); assert(0); return -1; } - memcpy((char *) new, (char *) mb->var, sizeof(VarPtr) * mb->vtop); - GDKfree(mb->var); + memset(new + mb->vsize, 0, (s - mb->vsize) * sizeof(VarPtr)); mb->vsize = s; mb->var = new; } diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -1161,7 +1161,7 @@ SQLparser(Client c) showErrors(c); /* restore the state */ MSresetInstructions(c->curprg->def, oldstop); - freeVariables(c, c->curprg->def, c->glb, oldvtop); + freeVariables(c, c->curprg->def, NULL, oldvtop); c->curprg->def->errors = 0; msg = createException(PARSE, "SQLparser", "M0M27!Semantic errors"); } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 8c32ca8d22fc for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c32ca8d22fc Added Files: sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out Modified Files: sql/server/rel_optimizer.c sql/test/BugTracker-2016/Tests/All Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (127 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -2123,7 +2123,7 @@ exps_unique( list *exps ) if (e && (p = find_prop(e->p, PROP_HASHCOL)) != NULL) { sql_ukey *k = p->value; - if (list_length(k->k.columns) <= 1) + if (k && list_length(k->k.columns) <= 1) return 1; } } 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 @@ -59,4 +59,5 @@ ifthenelse-void.Bug-6075 assert-on-table-producing-function.Bug-6076 assert-on-push-project-up.Bug-6077 assert-on-project.Bug-6078 +crash.Bug-6081 merge-table-edit.Bug-6084 diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.sql @@ -0,0 +1,10 @@ +select distinct + ref_1.dependency_type_name as c0, + ref_1.dependency_type_id as c1, + ref_1.dependency_type_name as c2, + ref_1.dependency_type_name as c3, + ref_1.dependency_type_id as c4 +from + sys.dependency_types as ref_1 +where ref_1.dependency_type_name is NULL +limit 96; diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.err @@ -0,0 +1,35 @@ +stderr of test 'crash.Bug-6081` in directory 'sql/test/BugTracker-2016` itself: + + +# 10:17:31 > +# 10:17:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36589" "--set" "mapi_usock=/var/tmp/mtest-6720/.s.monetdb.36589" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "embedded_r=yes" +# 10:17:31 > + +# builtin opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/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 = 5 +# 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 = 36589 +# cmdline opt mapi_usock = /var/tmp/mtest-6720/.s.monetdb.36589 +# cmdline opt monet_prompt = +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016 +# cmdline opt embedded_r = yes +# cmdline opt gdk_debug = 536870922 + +# 10:17:32 > +# 10:17:32 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-6720" "--port=36589" +# 10:17:32 > + + +# 10:17:32 > +# 10:17:32 > "Done." +# 10:17:32 > + diff --git a/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2016/Tests/crash.Bug-6081.stable.out @@ -0,0 +1,46 @@ +stdout of test 'crash.Bug-6081` in directory 'sql/test/BugTracker-2016` itself: + + +# 10:17:31 > +# 10:17:31 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=36589" "--set" "mapi_usock=/var/tmp/mtest-6720/.s.monetdb.36589" "--set" "monet_prompt=" "--forcemito" "--dbpath=/home/niels/scratch/rc-monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2016" "--set" "embedded_r=yes" +# 10:17:31 > + +# MonetDB 5 server v11.23.14 +# This is an unreleased version +# Serving database 'mTests_sql_test_BugTracker-2016', using 4 threads +# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit integers dynamically linked +# Found 7.332 GiB available main-memory. +# Copyright (c) 1993-July 2008 CWI. +# Copyright (c) August 2008-2016 MonetDB B.V., all rights reserved +# Visit http://www.monetdb.org/ for further information +# Listening for connection requests on mapi:monetdb://localhost.nes.nl:36589/ +# Listening for UNIX domain connection requests on mapi:monetdb:///var/tmp/mtest-6720/.s.monetdb.36589 +# MonetDB/GIS module loaded +# MonetDB/SQL module loaded +# MonetDB/R module loaded + +Ready. +
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 10747c3398e4 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=10747c3398e4 Modified Files: monetdb5/modules/kernel/bat5.c sql/server/rel_updates.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (33 lines): diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c --- a/monetdb5/modules/kernel/bat5.c +++ b/monetdb5/modules/kernel/bat5.c @@ -1056,7 +1056,7 @@ BKCshrinkBAT(bat *ret, const bat *bid, c BBPunfix(b->batCacheid); throw(MAL, "bat.shrink", RUNTIME_OBJECT_MISSING); } - bn= COLnew(0, b->ttype, BATcount(b) - BATcount(d) , TRANSIENT); + bn= COLnew(0, b->ttype, BATcount(b) - BATcount(d), b->batRole); if (bn == NULL) { BBPunfix(b->batCacheid); BBPunfix(d->batCacheid); @@ -1221,7 +1221,7 @@ BKCreuseBAT(bat *ret, const bat *bid, co BBPunfix(b->batCacheid); throw(MAL, "bat.reuse", RUNTIME_OBJECT_MISSING); } - bn= COLnew(b->hseqbase, b->ttype, BATcount(b) - BATcount(d), TRANSIENT); + bn= COLnew(b->hseqbase, b->ttype, BATcount(b) - BATcount(d), b->batRole); if (bn == NULL) { BBPunfix(b->batCacheid); BBPunfix(d->batCacheid); diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c --- a/sql/server/rel_updates.c +++ b/sql/server/rel_updates.c @@ -1275,6 +1275,8 @@ copyfrom(mvc *sql, dlist *qname, dlist * } /* lock the store, for single user/transaction */ if (locked) { + if (headers) + return sql_error(sql, 02, "COPY INTO .. LOCKED: not allowed with column lists"); store_lock(); while (store_nr_active > 1) { store_unlock(); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: c33c1522eaae for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c33c1522eaae Modified Files: tools/merovingian/client/monetdb.c tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/utils/glob.c tools/merovingian/utils/glob.h Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (87 lines): diff --git a/tools/merovingian/client/monetdb.c b/tools/merovingian/client/monetdb.c --- a/tools/merovingian/client/monetdb.c +++ b/tools/merovingian/client/monetdb.c @@ -479,7 +479,7 @@ globMatchDBS(int argc, char *argv[], sab if (argv[i] != NULL) { prev = NULL; for (stats = *orig; stats != NULL; stats = stats->next) { - if (glob(argv[i], stats->dbname)) { + if (db_glob(argv[i], stats->dbname)) { matched = 1; /* move out of orig into w, such that we can't * get double matches in the same output list @@ -918,7 +918,7 @@ command_discover(int argc, char *argv[]) snprintf(path, sizeof(path), "%s%s", q, p); - if (match == NULL || glob(match, path)) { + if (match == NULL || db_glob(match, path)) { if (twidth > 0) { /* cut too long location name */ abbreviateString(location, path, twidth); diff --git a/tools/merovingian/daemon/discoveryrunner.c b/tools/merovingian/daemon/discoveryrunner.c --- a/tools/merovingian/daemon/discoveryrunner.c +++ b/tools/merovingian/daemon/discoveryrunner.c @@ -177,7 +177,7 @@ getRemoteDB(char *database) pdb = &dummy; while (rdb != NULL) { snprintf(mfullname, sizeof(mfullname), "%s/", rdb->fullname); - if (glob(mdatabase, mfullname) == 1) { + if (db_glob(mdatabase, mfullname) == 1) { /* create a fake sabdb struct, chain where necessary */ if (walk != NULL) { walk = walk->next = malloc(sizeof(sabdb)); diff --git a/tools/merovingian/daemon/multiplex-funnel.c b/tools/merovingian/daemon/multiplex-funnel.c --- a/tools/merovingian/daemon/multiplex-funnel.c +++ b/tools/merovingian/daemon/multiplex-funnel.c @@ -105,7 +105,7 @@ MFconnectionManager(void *d) if (len >= 4 && buf[len - 3] == '*' && buf[len - 4] == '/') buf[len - 2] = '\0'; - if (glob(buf, msg + 1) == 1) { + if (db_glob(buf, msg + 1) == 1) { sabdb *stats; Mapi tm = NULL; /* match! eat away trailing / (for matching) */ @@ -154,7 +154,7 @@ MFconnectionManager(void *d) if (len >= 4 && buf[len - 3] == '*' && buf[len - 4] == '/') buf[len - 2] = '\0'; - if (glob(buf, msg + 1) == 1) { + if (db_glob(buf, msg + 1) == 1) { /* reevaluate, to see if connection is still * available */ sabdb *walk; diff --git a/tools/merovingian/utils/glob.c b/tools/merovingian/utils/glob.c --- a/tools/merovingian/utils/glob.c +++ b/tools/merovingian/utils/glob.c @@ -22,7 +22,7 @@ * Returns if haystack matches expr, using tag globbing. */ char -glob(const char *expr, const char *haystack) +db_glob(const char *expr, const char *haystack) { const char *haymem = NULL; const char *exprmem = NULL; @@ -73,7 +73,7 @@ glob(const char *expr, const char *hayst default: if (*expr != *haystack) { if (haymem != NULL) { - return(glob(exprmem, haymem)); + return(db_glob(exprmem, haymem)); } else { return(0); } diff --git a/tools/merovingian/utils/glob.h b/tools/merovingian/utils/glob.h --- a/tools/merovingian/utils/g
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 0c1a30b41fb7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0c1a30b41fb7 Modified Files: debian/monetdb5-sql.init.d tools/merovingian/daemon/argvcmds.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (125 lines): diff --git a/debian/monetdb5-sql.init.d b/debian/monetdb5-sql.init.d --- a/debian/monetdb5-sql.init.d +++ b/debian/monetdb5-sql.init.d @@ -37,16 +37,16 @@ set -e init() { if [ ! -d ${DBFARM} ]; then mkdir ${DBFARM} - echo "${DBFARM} doesn't exist, creating..." + echo "${DBFARM} doesn't exist, creating..." fi - chown -R monetdb.monetdb ${DBFARM} - chmod 770 ${DBFARM} +chown -R monetdb.monetdb ${DBFARM} +chmod 770 ${DBFARM} - if [ ! -f ${DBFARM}/.merovingian_properties ]; then - echo "${DBFARM} not initialized, initializing..." - sudo -u monetdb ${DAEMON} create ${DBFARM} || exit 1 - fi +if [ ! -f ${DBFARM}/.merovingian_properties ]; then + echo "${DBFARM} not initialized, initializing..." + sudo -u monetdb ${DAEMON} create ${DBFARM} || exit 1 +fi } running_pid() { @@ -70,42 +70,41 @@ running() { } case "$1" in - start) -if [ "$STARTUP" != "yes" ]; then -echo "can't start, should be enabled first by changing STARTUP to yes in /etc/default/monetdb5-sql" -exit 0 -fi +start) +if [ "$STARTUP" != "yes" ]; then +echo "can't start, should be enabled first by changing STARTUP to yes in /etc/default/monetdb5-sql" +exit 0 +fi -if running; then -echo "$NAME is already running" -exit 0 -fi +if running; then +echo "$NAME is already running" +exit 0 +fi -init +init -echo -n "Starting $DESC: " -start-stop-daemon --start --exec $DAEMON -c monetdb:monetdb -- start $DAEMON_OPTS $DBFARM -if running ; then -echo "$NAME." -else -echo " ERROR, $NAME didn't start" -fi -;; - stop) -if running ; then -echo -n "Stopping $DESC: " -start-stop-daemon --stop --pidfile $PIDFILE --exec $DAEMON -c monetdb:monetdb -- stop ${DBFARM} -echo "$NAME." - else - echo "$NAME not running." -fi -;; - restart) -$0 stop -sleep 5 -$0 start -;; - status) +echo -n "Starting $DESC: " +start-stop-daemon --start --exec $DAEMON -c monetdb:monetdb -- start $DAEMON_OPTS $DBFARM +if running ; then +echo "$NAME." +else +echo " ERROR, $NAME didn't start" +fi +;; +stop) +if running ; then +echo -n "Stopping $DESC: " +start-stop-daemon --stop --pidfile $PIDFILE --exec $DAEMON --retry 60 --signal TERM +echo "$NAME." +else + echo "$NAME not running." +fi +;; +restart) +$0 stop +$0 start +;; +status) echo -n "$NAME is " if running ; then echo "running" @@ -114,7 +113,7 @@ case "$1" in exit 1 fi ;; - *) +*) echo "Usage: $0 {start|stop|restart|status}" >&2 exit 1 ;; diff --git a/tools/merovingian/daemon/argvcmds.c b/tools/merovingian/daemon/argvcmds.c --- a/tools/merovingian/daemon/argvcmds.c +++ b/tools/merovingian/daemon/argvcmds.c @@ -501,8 +501,8 @@ command_stop(confkeyval *ckv, int argc, return(1); } - /* wait up to 5 seconds for monetdbd to actually stop */ - for (i = 0; i < 10; i++) { + /* wait up to 30 seconds for monetdbd to actually stop */ + for (i = 0; i < 60; i++) { tv.tv_sec = 0; tv.tv_usec = 50; select(0, NULL, NULL, NULL, &tv); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 37c487721219 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=37c487721219 Modified Files: gdk/gdk_logger.c tools/merovingian/daemon/controlrunner.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (91 lines): diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c --- a/gdk/gdk_logger.c +++ b/gdk/gdk_logger.c @@ -1377,8 +1377,6 @@ logger_load(int debug, const char* fn, c /* this is intentional - even if catalog_bid is 0, but the logger is shared, * force it to find the persistent catalog */ if (catalog_bid == 0 && !lg->shared) { - log_bid bid = 0; - /* catalog does not exist, so the log file also * shouldn't exist */ if (fp != NULL) { @@ -1401,22 +1399,19 @@ logger_load(int debug, const char* fn, c /* give the catalog bats names so we can find them * next time */ - bid = lg->catalog_bid->batCacheid; - BBPincref(bid, TRUE); + BBPincref(lg->catalog_bid->batCacheid, TRUE); snprintf(bak, sizeof(bak), "%s_catalog_bid", fn); if (BBPrename(lg->catalog_bid->batCacheid, bak) < 0) logger_fatal("logger_load: BBPrename to %s failed", bak, 0, 0); - bid = lg->catalog_nme->batCacheid; - BBPincref(bid, TRUE); + BBPincref(lg->catalog_nme->batCacheid, TRUE); snprintf(bak, sizeof(bak), "%s_catalog_nme", fn); if (BBPrename(lg->catalog_nme->batCacheid, bak) < 0) logger_fatal("logger_load: BBPrename to %s failed", bak, 0, 0); - bid = lg->dcatalog->batCacheid; - BBPincref(bid, TRUE); + BBPincref(lg->dcatalog->batCacheid, TRUE); snprintf(bak, sizeof(bak), "%s_dcatalog", fn); if (BBPrename(lg->dcatalog->batCacheid, bak) < 0) logger_fatal("logger_load: BBPrename to %s failed", @@ -1484,7 +1479,6 @@ logger_load(int debug, const char* fn, c if (d == NULL) logger_fatal("Logger_new: cannot create " "dcatalog bat", 0, 0, 0); - BBPincref(d->batCacheid, TRUE); if (BBPrename(d->batCacheid, bak) < 0) logger_fatal("logger_load: BBPrename to %s failed", bak, 0, 0); } @@ -1503,6 +1497,9 @@ logger_load(int debug, const char* fn, c lg->catalog_bid = b; lg->catalog_nme = n; lg->dcatalog = d; + BBPincref(lg->catalog_bid->batCacheid, TRUE); + BBPincref(lg->catalog_nme->batCacheid, TRUE); + BBPincref(lg->dcatalog->batCacheid, TRUE); BATloop(b, p, q) { bat bid = *(log_bid *) Tloc(b, p); oid pos = p; diff --git a/tools/merovingian/daemon/controlrunner.c b/tools/merovingian/daemon/controlrunner.c --- a/tools/merovingian/daemon/controlrunner.c +++ b/tools/merovingian/daemon/controlrunner.c @@ -338,13 +338,17 @@ static void ctl_handle_client( dp = _mero_topdp->next; /* don't need the console/log */ while (dp != NULL) { if (dp->type == MERODB && strcmp(dp->dbname, q) == 0) { - pthread_mutex_unlock(&_mero_topdp_lock); if (strcmp(p, "stop") == 0) { - terminateProcess(dp->pid, strdup(dp->dbname), dp->type, 1); + pid_t pid = dp->pid; + char *dbname = strdup(dp->dbname); + mtype type = dp->type; + pthread_mutex_unlock(&_mero_topdp_lock); + terminateProcess(pid, dbname, type, 1); Mfprintf(_mero_ctlout, "%s: stopped " "database '%s'\n", origin, q); } else { kill(dp->pid, SIGKILL); + pthread_mutex_unlock(&_mero_topdp_lock); Mfprintf(_mero_ctlout, "%s: killed " "database '%s'\n", origin, q); } @@ -3
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: d05eca35fe87 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d05eca35fe87 Modified Files: tools/merovingian/daemon/handlers.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (13 lines): diff --git a/tools/merovingian/daemon/handlers.c b/tools/merovingian/daemon/handlers.c --- a/tools/merovingian/daemon/handlers.c +++ b/tools/merovingian/daemon/handlers.c @@ -76,7 +76,8 @@ handler(int sig) strcpy(buf + 7, "some signal"); } strcpy(buf + strlen(buf), ", starting shutdown sequence\n"); - write(1, buf, strlen(buf)); + if (write(1, buf, strlen(buf)) < 0) + perror("write failed"); _mero_keep_listening = 0; } ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 64ed78fd35b7 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64ed78fd35b7 Modified Files: tools/merovingian/daemon/controlrunner.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (46 lines): diff --git a/tools/merovingian/daemon/controlrunner.c b/tools/merovingian/daemon/controlrunner.c --- a/tools/merovingian/daemon/controlrunner.c +++ b/tools/merovingian/daemon/controlrunner.c @@ -930,6 +930,17 @@ control_handleclient(const char *host, i ctl_handle_client(host, sock, fdin, fout); } +static void * +handle_client(void *p) +{ + int msgsock = * (int *) p; + + ctl_handle_client("(local)", msgsock, NULL, NULL); + shutdown(msgsock, SHUT_RDWR); + closesocket(msgsock); + return NULL; +} + void * controlRunner(void *d) { @@ -939,7 +950,7 @@ controlRunner(void *d) fd_set fds; struct timeval tv; int msgsock; - char origin[128]; + pthread_t tid; do { FD_ZERO(&fds); @@ -975,11 +986,10 @@ controlRunner(void *d) continue; } - snprintf(origin, sizeof(origin), "(local)"); - - ctl_handle_client(origin, msgsock, NULL, NULL); - shutdown(msgsock, SHUT_RDWR); - closesocket(msgsock); + if (pthread_create(&tid, NULL, handle_client, &msgsock) != 0) + closesocket(msgsock); + else + pthread_detach(tid); } while (_mero_keep_listening); shutdown(usock, SHUT_RDWR); closesocket(usock); ___ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 38fc8010364a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=38fc8010364a Modified Files: common/utils/msabaoth.c sql/benchmarks/tpch/Tests/01-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/06-explain.stable.out sql/benchmarks/tpch/Tests/07-explain.stable.out sql/benchmarks/tpch/Tests/08-explain.stable.out sql/benchmarks/tpch/Tests/09-explain.stable.out sql/benchmarks/tpch/Tests/10-explain.stable.out sql/benchmarks/tpch/Tests/11-explain.stable.out sql/benchmarks/tpch/Tests/14-explain.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out sql/benchmarks/tpch/Tests/19-explain.stable.out tools/merovingian/daemon/client.c tools/merovingian/daemon/connections.c tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/handlers.c tools/merovingian/daemon/handlers.h tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/merovingian.h tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/utils/properties.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 1137 to 300 lines): diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c --- a/common/utils/msabaoth.c +++ b/common/utils/msabaoth.c @@ -594,6 +594,85 @@ msab_getSingleStatus(const char *pathbuf sdb->path = strdup(buf); sdb->dbname = sdb->path + strlen(sdb->path) - strlen(dbname); + + /* check the state of the server by looking at its gdk lock: +* - if we can lock it, the server has crashed or isn't running +* - if we can't open it because it's locked, the server is +* running +* - to distinguish between a crash and proper shutdown, consult +* the uplog +* - one exception to all above; if this is the same process, we +* cannot lock (it always succeeds), hence, if we have the +* same signature, we assume running if the uplog states so. +*/ + snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, +_sabaoth_internal_uuid); + if (stat(buf, &statbuf) != -1) { + /* database has the same process signature as ours, which +* means, it must be us, rely on the uplog state */ + snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); + if ((f = fopen(log, "r")) != NULL) { + (void)fseek(f, -1, SEEK_END); + if (fread(data, 1, 1, f) != 1) { + /* the log is empty, assume no crash */ + sdb->state = SABdbInactive; + } else if (data[0] == '\t') { + /* see if the database has finished starting */ + snprintf(buf, sizeof(buf), "%s/%s/%s", +pathbuf, dbname, STARTEDFILE); + if (stat(buf, &statbuf) == -1) { + sdb->state = SABdbStarting; + } else { + sdb->state = SABdbRunning; + } + } else { /* should be \n */ + sdb->state = SABdbInactive; + } + (void)fclose(f); + } + } else if ((snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, ".gdk_lock") > 0) & /* no typo */ + ((fd = MT_lockf(buf, F_TEST, 4, 1)) == -2)) { + /* Locking failed; this can be because the lockfile couldn't +* be created. Probably there is no Mserver running for +* that case also. +*/ + sdb->state = SABdbInactive; + } else if (fd == -1) { + /* file is locked, so mserver is running, see if the database +* has finished starting */ + snprintf(buf, sizeof(buf), "%s/%s/%s", +pathbuf, dbname, STARTEDFILE); + if (stat(buf, &statbuf) == -1) { + sdb->state = SABdbStarting; + } else { + sdb->state = SABdbRunning; + } + } else { + /* file is not locked, check for a crash in the uplog */ + snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); + if ((f = fopen(log, "r")) != NULL) { + (void)fseek(f, -1, SEEK_END); + if (fread(data,
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 75271988a344 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=75271988a344 Removed Files: tools/merovingian/daemon/peering.c tools/merovingian/daemon/peering.h Modified Files: common/utils/msabaoth.c common/utils/mutils.c common/utils/mutils.h monetdb5/modules/mal/mal_mapi.c tools/merovingian/client/monetdb.c tools/merovingian/daemon/Makefile.ag tools/merovingian/daemon/client.c tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/discoveryrunner.h tools/merovingian/daemon/forkmserver.c tools/merovingian/daemon/handlers.c tools/merovingian/daemon/handlers.h tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/daemon/multiplex-funnel.h tools/merovingian/daemon/proxy.c tools/merovingian/utils/control.c tools/merovingian/utils/utils.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 1182 to 300 lines): diff --git a/common/utils/msabaoth.c b/common/utils/msabaoth.c --- a/common/utils/msabaoth.c +++ b/common/utils/msabaoth.c @@ -675,7 +675,7 @@ msab_getSingleStatus(const char *pathbuf (void)fclose(f); } } else if ((snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, ".gdk_lock") > 0) & /* no typo */ - ((fd = MT_lockf(buf, F_TLOCK, 4, 1)) == -2)) { + ((fd = MT_lockf(buf, F_TEST, 4, 1)) == -2)) { /* Locking failed; this can be because the lockfile couldn't * be created. Probably there is no Mserver running for * that case also. @@ -694,7 +694,7 @@ msab_getSingleStatus(const char *pathbuf } else { /* locking succeed, check for a crash in the uplog */ snprintf(log, sizeof(log), "%s/%s/%s", pathbuf, dbname, UPLOGFILE); - if ((f = fdopen(fd, "r+")) != NULL) { + if ((f = fopen(log, "r")) != NULL) { (void)fseek(f, -1, SEEK_END); if (fread(data, 1, 1, f) != 1) { /* the log is empty, assume no crash */ @@ -704,12 +704,10 @@ msab_getSingleStatus(const char *pathbuf } else { /* should be \t */ sdb->state = SABdbCrashed; } - /* release the lock */ - MT_lockf(buf, F_ULOCK, 4, 1); (void)fclose(f); } else { - /* shouldn't happen */ - close(fd); + /* no uplog, so presumably never started */ + sdb->state = SABdbInactive; } } snprintf(buf, sizeof(buf), "%s/%s/%s", pathbuf, dbname, MAINTENANCEFILE); diff --git a/common/utils/mutils.c b/common/utils/mutils.c --- a/common/utils/mutils.c +++ b/common/utils/mutils.c @@ -356,6 +356,13 @@ MT_lockf(char *filename, int mode, off_t ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov); } else if (mode == F_LOCK) { ret = LockFileEx(fh, LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov); + } else if (mode == F_TEST) { + ret = LockFileEx(fh, LOCKFILE_FAIL_IMMEDIATELY | LOCKFILE_EXCLUSIVE_LOCK, 0, len, 0, &ov); + if (ret != 0) { + UnlockFileEx(fh, 0, len, 0, &ov); + close(fd); + return 0; + } } else { close(fd); errno = EINVAL; @@ -408,6 +415,7 @@ lockf(int fd, int cmd, off_t len) #endif /* returns -1 when locking failed, * returns -2 when the lock file could not be opened/created + * returns 0 when mode is F_TEST and the lock file was not locked * returns the (open) file descriptor to the file when locking * returns 0 when unlocking */ int @@ -420,7 +428,7 @@ MT_lockf(char *filename, int mode, off_t if (lseek(fd, off, SEEK_SET) >= 0 && lockf(fd, mode, len) == 0) { - if (mode == F_ULOCK) { + if (mode == F_ULOCK || mode == F_TEST) { close(fd); return 0; } diff --git a/common/utils/mutils.h b/common/utils/mutils.h --- a/common/utils/mutils.h +++ b/common/utils/mutils.h @@ -56,9 +56,10 @@ mutils_export char *dirname(char *path); #define MONETDB_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) -#define F_TLOCK 2 /* test and lock a region for exclusive use */ -#define F_ULOCK 0 /* unlock a previously locked region */ -#define F_LOCK 1 /* lock a region for exclusive use */ +#define F_TEST 3 /* test a region for other processes lo
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: 5083b232dd71 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5083b232dd71 Modified Files: gdk/gdk_bbp.c gdk/gdk_select.c tools/merovingian/daemon/argvcmds.c tools/merovingian/daemon/client.c tools/merovingian/daemon/controlrunner.c tools/merovingian/daemon/controlrunner.h tools/merovingian/daemon/discoveryrunner.c tools/merovingian/daemon/discoveryrunner.h tools/merovingian/daemon/merovingian.c tools/merovingian/daemon/merovingian.h tools/merovingian/daemon/multiplex-funnel.c tools/merovingian/daemon/proxy.c Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 740 to 300 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -1210,7 +1210,10 @@ BBPheader(FILE *fp, oid *BBPoid, int *OI bbpversion != GDKLIBRARY_OLDWKB && bbpversion != GDKLIBRARY_INSERTED && bbpversion != GDKLIBRARY_HEADED) { - GDKfatal("BBPinit: incompatible BBP version: expected 0%o, got 0%o.", GDKLIBRARY, bbpversion); + GDKfatal("BBPinit: incompatible BBP version: expected 0%o, got 0%o.\n" +"This database was probably created by %s version of MonetDB.", +GDKLIBRARY, bbpversion, +bbpversion > GDKLIBRARY ? "a newer" : "a too old"); } if (fgets(buf, sizeof(buf), fp) == NULL) { GDKfatal("BBPinit: short BBP"); diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -287,9 +287,10 @@ do { \ } \ } \ } else {\ - while (p <= q && o < e) { \ + while (p < q && o < e) {\ p++;\ - CAND; \ + if (p < q) \ + CAND; \ } \ } \ } while (0) diff --git a/tools/merovingian/daemon/argvcmds.c b/tools/merovingian/daemon/argvcmds.c --- a/tools/merovingian/daemon/argvcmds.c +++ b/tools/merovingian/daemon/argvcmds.c @@ -504,15 +504,16 @@ command_stop(confkeyval *ckv, int argc, /* wait up to 5 seconds for monetdbd to actually stop */ for (i = 0; i < 10; i++) { tv.tv_sec = 0; - tv.tv_usec = 500; + tv.tv_usec = 50; select(0, NULL, NULL, NULL, &tv); - if (kill(daemon, 0) == -1) - break; - if (i == 9) { - /* done waiting, use harsher measures */ - kill(daemon, SIGKILL); + if (kill(daemon, 0) == -1) { + /* daemon has died */ + return(0); } } + /* done waiting, use harsher measures */ + kill(daemon, SIGKILL); + return(0); } diff --git a/tools/merovingian/daemon/client.c b/tools/merovingian/daemon/client.c --- a/tools/merovingian/daemon/client.c +++ b/tools/merovingian/daemon/client.c @@ -411,7 +411,7 @@ handleClient(void *data) free(algos); self->dead = 1; return(e); - }; + } } msab_freeStatus(&top); @@ -532,34 +532,35 @@ acceptConnections(int sock, int usock) } switch (*buf) { - case '0': - /* nothing special, nothing to do */ + case '0': + /* nothing special, nothing to do */ break; - case '1': - /* filedescriptor, no way */ - close(msgsock); - Mfprintf(stderr, "client error: fd passing not supported\n"); + case '1': + /* filedescriptor, no way */ + close(msgsock); + Mfprintf(stderr, "client error: fd passing not supported\n"); continue; - default: - /* some unknown state */ - close(msgsock); - Mfprintf(stderr, "client error: unknown initial byte\n"); + default: +
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: a42b28ca118d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a42b28ca118d Added Files: sql/test/BugTracker-2016/Tests/ifthenelse-void.Bug-6075.sql sql/test/BugTracker-2016/Tests/ifthenelse-void.Bug-6075.stable.err sql/test/BugTracker-2016/Tests/ifthenelse-void.Bug-6075.stable.out Modified Files: gdk/gdk_calc.c sql/test/BugTracker-2016/Tests/All Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 321 to 300 lines): diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c --- a/gdk/gdk_calc.c +++ b/gdk/gdk_calc.c @@ -13092,13 +13092,30 @@ VARcalcbetween(ValPtr ret, const ValReco l += incr2; \ } \ } while (0) +#define IFTHENELSELOOP_oid() \ + do {\ + for (i = 0; i < cnt; i++) { \ + if (src[i] == bit_nil) {\ + ((oid *) dst)[i] = oid_nil; \ + nils++; \ + } else if (src[i]) {\ + ((oid *) dst)[i] = col1 ? ((oid *) col1)[k] : seq1; \ + } else {\ + ((oid *) dst)[i] = col2 ? ((oid *) col2)[k] : seq2; \ + } \ + k += incr1; \ + l += incr2; \ + seq1 += incr1; \ + seq2 += incr2; \ + } \ + } while (0) static BAT * BATcalcifthenelse_intern(BAT *b, const void *col1, int incr1, const char *heap1, -int width1, int nonil1, +int width1, int nonil1, oid seq1, const void *col2, int incr2, const char *heap2, -int width2, int nonil2, +int width2, int nonil2, oid seq2, int tpe) { BAT *bn; @@ -13110,9 +13127,15 @@ BATcalcifthenelse_intern(BAT *b, const bit *src; BUN cnt = b->batCount; - assert(col2 != NULL); - - bn = COLnew(b->hseqbase, tpe, cnt, TRANSIENT); + /* col1 and col2 can only be NULL for void columns */ + assert(col1 != NULL || ATOMtype(tpe) == TYPE_oid); + assert(col2 != NULL || ATOMtype(tpe) == TYPE_oid); + assert(col1 != NULL || heap1 == NULL); + assert(col2 != NULL || heap2 == NULL); + assert(col1 != NULL || incr1 == 1); + assert(col2 != NULL || incr2 == 1); + + bn = COLnew(b->hseqbase, ATOMtype(tpe), cnt, TRANSIENT); if (bn == NULL) return NULL; @@ -13146,38 +13169,42 @@ BATcalcifthenelse_intern(BAT *b, } else { assert(heap1 == NULL); assert(heap2 == NULL); - switch (bn->twidth) { - case 1: - IFTHENELSELOOP(bte); - break; - case 2: - IFTHENELSELOOP(sht); - break; - case 4: - IFTHENELSELOOP(int); - break; - case 8: - IFTHENELSELOOP(lng); - break; -#ifdef HAVE_HGE - case 16: - IFTHENELSELOOP(hge); - break; -#endif - default: - for (i = 0; i < cnt; i++) { - if (src[i] == bit_nil) { - p = nil; - nils++; - } else if (src[i]) { - p = ((const char *) col1) + k * width1; - } else { - p = ((const char *) col2) + l * width2; + if (ATOMtype(tpe) == TYPE_oid) { + IFTHENELSELOOP_oid(); + } else { + switch (bn->twidth) { + case 1: + IFTHENELSELOOP(bte); + break; + case 2: + IFTHENELSELOOP(sht); + break; + case 4: + IFTHENELSELOOP(int); + break; + case 8: +
MonetDB: Dec2016 - Merge with Jun2016 branch.
Changeset: f7301d22c7d9 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f7301d22c7d9 Added Files: sql/test/emptydb-upgrade-chain/Tests/check.stable.out.32bit sql/test/emptydb-upgrade/Tests/check.stable.out.32bit sql/test/emptydb/Tests/check.stable.out.32bit Modified Files: sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-chain/Tests/check.stable.out sql/test/emptydb-upgrade-chain/Tests/check.stable.out.int128 sql/test/emptydb-upgrade-hge/Tests/check.stable.out.int128 sql/test/emptydb-upgrade/Tests/check.stable.out sql/test/emptydb-upgrade/Tests/check.stable.out.int128 sql/test/emptydb/Tests/All sql/test/emptydb/Tests/check.stable.out sql/test/emptydb/Tests/check.stable.out.int128 Branch: Dec2016 Log Message: Merge with Jun2016 branch. diffs (truncated from 14182 to 300 lines): diff --git a/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 b/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 --- a/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 +++ b/sql/test/emptydb-upgrade-chain-hge/Tests/check.stable.out.int128 @@ -39,10 +39,16 @@ Ready. \dSv \dSs \dSf +\dn bam \dn json \dn profiler \dn sys \dn tmp +\dSt bam.export +\dSt bam.files +\dSt bam.pg +\dSt bam.rg +\dSt bam.sq \dSt sys._columns \dSt sys._tables \dSt sys.args @@ -55,6 +61,11 @@ Ready. \dSt sys.idxs \dSt sys.keys \dSt sys.keywords +\dSt sys.netcdf_attrs +\dSt sys.netcdf_dims +\dSt sys.netcdf_files +\dSt sys.netcdf_vardim +\dSt sys.netcdf_vars \dSt sys.objects \dSt sys.privileges \dSt sys.schemas @@ -94,6 +105,7 @@ Ready. \dSf sys."analyze" \dSf sys."bbp" \dSf sys."broadcast" +\dSf sys."chi2prob" \dSf sys."clearrejects" \dSf sys."columnsize" \dSf sys."contains" @@ -125,6 +137,8 @@ Ready. \dSf sys."environment" \dSf sys."epoch" \dSf sys."evalalgebra" +\dSf sys."fitsattach" +\dSf sys."fitsload" \dSf sys."flush_log" \dSf sys."fuse" \dSf sys."generate_series" @@ -157,7 +171,12 @@ Ready. \dSf sys."isauuid" \dSf sys."left_shift" \dSf sys."left_shift_assign" +\dSf sys."lidarattach" +\dSf sys."lidarexport" +\dSf sys."lidarload" \dSf sys."like" +\dSf sys."listdir" +\dSf sys."listdirpat" \dSf sys."malfunctions" \dSf sys."masklen" \dSf sys."mbr" @@ -167,6 +186,8 @@ Ready. \dSf sys."ms_str" \dSf sys."ms_stuff" \dSf sys."ms_trunc" +\dSf sys."netcdf_attach" +\dSf sys."netcdf_importvar" \dSf sys."netmask" \dSf sys."network" \dSf sys."newurl" @@ -194,6 +215,8 @@ Ready. \dSf sys."setmasklen" \dSf sys."setsession" \dSf sys."settimeout" +\dSf sys."shpattach" +\dSf sys."shpload" \dSf sys."shrink" \dSf sys."shutdown" \dSf sys."st_area" @@ -308,6 +331,7 @@ Ready. \dSf sys."var" \dSf sys."var_pop" \dSf sys."var_samp" +SYSTEM SCHEMA bam SYSTEM SCHEMA json SYSTEM SCHEMA profiler SYSTEM SCHEMA sys @@ -324,6 +348,11 @@ SYSTEM TABLE sys.functions SYSTEM TABLE sys.idxs SYSTEM TABLE sys.keys SYSTEM TABLE sys.keywords +SYSTEM TABLE sys.netcdf_attrs +SYSTEM TABLE sys.netcdf_dims +SYSTEM TABLE sys.netcdf_files +SYSTEM TABLE sys.netcdf_vardim +SYSTEM TABLE sys.netcdf_vars SYSTEM TABLE sys.objects SYSTEM TABLE sys.privileges SYSTEM TABLE sys.schemas @@ -380,6 +409,7 @@ SYSTEM FUNCTION sys.ceiling SYSTEM FUNCTION sys.char_length SYSTEM FUNCTION sys.character_length SYSTEM FUNCTION sys.charindex +SYSTEM FUNCTION sys.chi2prob SYSTEM FUNCTION sys.clearrejects SYSTEM FUNCTION sys.code SYSTEM FUNCTION sys.columnsize @@ -435,6 +465,8 @@ SYSTEM FUNCTION sys.epoch SYSTEM FUNCTION sys.evalalgebra SYSTEM FUNCTION sys.exist SYSTEM FUNCTION sys.exp +SYSTEM FUNCTION sys.fitsattach +SYSTEM FUNCTION sys.fitsload SYSTEM FUNCTION sys.floor SYSTEM FUNCTION sys.flush_log SYSTEM FUNCTION sys.fuse @@ -481,7 +513,12 @@ SYSTEM FUNCTION sys.left_shift SYSTEM FUNCTION sys.left_shift_assign SYSTEM FUNCTION sys.length SYSTEM FUNCTION sys.levenshtein +SYSTEM FUNCTION sys.lidarattach +SYSTEM FUNCTION sys.lidarexport +SYSTEM FUNCTION sys.lidarload SYSTEM FUNCTION sys.like +SYSTEM FUNCTION sys.listdir +SYSTEM FUNCTION sys.listdirpat SYSTEM FUNCTION sys.local_timezone SYSTEM FUNCTION sys.localtime SYSTEM FUNCTION sys.localtimestamp @@ -518,6 +555,8 @@ SYSTEM FUNCTION sys.ms_round SYSTEM FUNCTION sys.ms_str SYSTEM FUNCTION sys.ms_stuff SYSTEM FUNCTION sys.ms_trunc +SYSTEM FUNCTION sys.netcdf_attach +SYSTEM FUNCTION sys.netcdf_importvar SYSTEM FUNCTION sys.netmask SYSTEM FUNCTION sys.network SYSTEM FUNCTION sys.newurl @@ -574,6 +613,8 @@ SYSTEM FUNCTION sys.sessions SYSTEM FUNCTION sys.setmasklen SYSTEM FUNCTION sys.setsession SYSTEM FUNCTION sys.settimeout +SYSTEM FUNCTION sys.shpattach +SYSTEM FUNCTION sys.shpload SYSTEM FUNCTION sys.shrink SYSTEM FUNCTION sys.shutdown SYSTEM FUNCTION sys.sign @@ -718,10 +759,16 @@ SYSTEM FUNCTION sys.weekofyear SYSTEM FUNCTION sys.xor S