Changeset: 67773d621a58 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67773d621a58 Modified Files: gdk/gdk_group.c gdk/gdk_utils.c sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err Branch: default Log Message:
Merge from Feb2013 branch. diffs (247 lines): diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c --- a/gdk/gdk_group.c +++ b/gdk/gdk_group.c @@ -64,8 +64,8 @@ * * Otherwise we build a partial hash table on the fly. * - * A decision should be made on the order in which grouping occurs - * Let |b| has << different values as |g| then the linked lists gets + * A decision should be made on the order in which grouping occurs Let + * |b| have << different values than |g| then the linked lists gets * extremely long, leading to a n^2 algorithm. * At the MAL level, the multigroup function would perform the dynamic * optimization. @@ -100,8 +100,8 @@ do { \ TYPE *w = (TYPE *) Tloc(b, 0); \ for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < q; p++) { \ + prb = hash_##TYPE(hs, &w[p]); \ if (gc) { \ - prb = hash_##TYPE(hs, &w[p]); \ for (hb = hs->hash[prb]; \ hb != BUN_NONE && \ grps[hb - r] == grps[p - r]; \ @@ -120,12 +120,13 @@ } \ } \ if (hb != BUN_NONE && \ - grps[hb - r] != grps[p - r]) \ + grps[hb - r] != grps[p - r]) { \ + /* we didn't assign a group */ \ + /* yet */ \ hb = BUN_NONE; \ + } \ } else if (grps) { \ - BUN hv = hash_##TYPE(hs, &w[p]); \ - BUN hg = (BUN) grps[p-r]; \ - prb = ((hv << bits) ^ hg) & hs->mask; \ + prb = ((prb << bits) ^ (BUN) grps[p-r]) & hs->mask; \ for (hb = hs->hash[prb]; \ hb != BUN_NONE; \ hb = hs->link[hb]) { \ @@ -142,7 +143,6 @@ } \ } \ } else { \ - prb = hash_##TYPE(hs, &w[p]); \ for (hb = hs->hash[prb]; \ hb != BUN_NONE; \ hb = hs->link[hb]) { \ @@ -502,8 +502,11 @@ BATgroup_internal(BAT **groups, BAT **ex } } if (hb != BUN_NONE && - grps[hb - r] != grps[p - r]) + grps[hb - r] != grps[p - r]) { + /* we didn't assign a group + * yet */ hb = BUN_NONE; + } } else if (grps) { for (; hb != BUN_NONE; @@ -617,8 +620,8 @@ BATgroup_internal(BAT **groups, BAT **ex default: for (r = BUNfirst(b), p = r, q = r + BATcount(b); p < q; p++) { v = BUNtail(bi, p); + prb = hash_any(hs, v); if (gc) { - prb = hash_any(hs, v); for (hb = hs->hash[prb]; hb != BUN_NONE && grps[hb - r] == grps[p - r]; hb = hs->link[hb]) { @@ -636,12 +639,13 @@ BATgroup_internal(BAT **groups, BAT **ex } } if (hb != BUN_NONE && - grps[hb - r] != grps[p - r]) + grps[hb - r] != grps[p - r]) { + /* we didn't assign a + * group yet */ hb = BUN_NONE; + } } else if (grps) { - BUN hv = hash_any(hs, v); - BUN hg = (BUN) grps[p-r]; - prb = ((hv << bits) ^ hg) & hs->mask; + prb = ((prb << bits) ^ (BUN) grps[p-r]) & hs->mask; for (hb = hs->hash[prb]; hb != BUN_NONE; hb = hs->link[hb]) { @@ -658,7 +662,6 @@ BATgroup_internal(BAT **groups, BAT **ex } } } else { - prb = hash_any(hs, v); for (hb = hs->hash[prb]; hb != BUN_NONE; hb = hs->link[hb]) { diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -329,7 +329,6 @@ volatile ATOMIC_TYPE GDK_nmallocs[MAX_BI #ifdef ATOMIC_LOCK static MT_Lock mbyteslock; static MT_Lock GDKstoppedLock; -static MT_Lock vmtrimLock; #endif size_t _MT_pagesize = 0; /* variable holding memory size */ @@ -930,13 +929,11 @@ GDKmunmap(void *addr, size_t size) * Their value is turned into a blanc space. */ -#define CATNAP 500 int GDKrecovery = 0; -#define VMTRIM_IDLE 0 -#define VMTRIM_BUSY 1 +#define CATNAP 50 /* time to sleep in ms for catnaps */ + static MT_Id GDKvmtrim_id; -static int vmtrimStatus = VMTRIM_BUSY; /* owned by vmtrim thread */ static void GDKvmtrim(void *limit) @@ -946,7 +943,6 @@ GDKvmtrim(void *limit) (void) limit; - ATOMIC_INIT(vmtrimLock, "GDKvmtrim"); do { int t; size_t rss; @@ -954,12 +950,10 @@ GDKvmtrim(void *limit) size_t cursize; /* sleep using catnaps so we can exit in a timely fashion */ - for (t = highload ? CATNAP : 10 * CATNAP; t > 0; t -= CATNAP) { - /* allow GDKexit to kill GDKvmtrim thread while sleeping */ - (void) ATOMIC_COMP_SWAP(vmtrimStatus, VMTRIM_BUSY, VMTRIM_IDLE,vmtrimLock, "GDKvmtrim"); + for (t = highload ? 500 : 5000; t > 0; t -= CATNAP) { MT_sleep_ms(CATNAP); - /* prevent from being killed while active */ - (void) ATOMIC_COMP_SWAP(vmtrimStatus, VMTRIM_IDLE, VMTRIM_BUSY, vmtrimLock, "GDKvmtrim"); + if (GDKexiting()) + return; } rss = MT_getrss(); rssdiff = (ssize_t) rss - (ssize_t) prevrss; @@ -1167,16 +1161,11 @@ GDKexit(int status) { MT_lock_set(&GDKthreadLock, "GDKexit"); if (ATOMIC_COMP_SWAP(GDKstopped, 0, 1, GDKstoppedLock, "GDKexit") == 0) { - /* we have to wait for possible concurrent vmtrim actions to finish properly */ - if (GDKvmtrim_id) { - if (ATOMIC_GET(vmtrimStatus, vmtrimLock, "GDKexit") == VMTRIM_IDLE) - MT_kill_thread(GDKvmtrim_id); - else - MT_join_thread(GDKvmtrim_id); - } + if (GDKvmtrim_id) + MT_join_thread(GDKvmtrim_id); GDKnrofthreads = 0; MT_lock_unset(&GDKthreadLock, "GDKexit"); - MT_sleep_ms(50); + MT_sleep_ms(CATNAP); /* Kill all threads except myself */ if (status == 0) { diff --git a/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err b/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err --- a/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err +++ b/sql/test/BugDay_2005-12-19_2.9.3/Tests/select_from_env.SF-1240701.1242164.stable.err @@ -5,64 +5,6 @@ stderr of test 'select_from_env.SF-12407 # 13:22:15 > Mtimeout -timeout 180 Mserver "--config=/ufs/sjoerd/Monet-virgin/etc/MonetDB.conf" --debug=10 --set "monet_mod_path=/ufs/sjoerd/src/MonetDB/devel/sql-virgin/Linux/lib/MonetDB:/ufs/sjoerd/Monet-virgin/lib/MonetDB" --set "gdk_dbfarm=/ufs/sjoerd/Monet-virgin/var/MonetDB/dbfarm" --set "sql_logdir=/ufs/sjoerd/Monet-virgin/var/MonetDB/log" --set mapi_port=30620 --set sql_port=47090 --set xquery_port=50410 --set monet_prompt= --trace "--dbname=mTests_src_test_BugDay_2005-12-19_2.9.3" --dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over.. # 13:22:15 > -# builtin opt gdk_arch = 64bitx86_64-pc-solaris2.11 -# builtin opt gdk_version = 1.33.0 -# builtin opt prefix = /export/scratch/stripe/fabian/monetdb/current/program-i86pc -# builtin opt exec_prefix = ${prefix} -# builtin opt gdk_dbname = tst -# builtin opt gdk_dbfarm = ${prefix}/var/MonetDB -# builtin opt gdk_debug = 8 -# builtin opt gdk_alloc_map = yes -# builtin opt gdk_vmtrim = yes -# builtin opt monet_admin = adm -# builtin opt monet_prompt = > -# builtin opt monet_welcome = yes -# builtin opt monet_mod_path = /export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB -# builtin opt monet_daemon = yes -# builtin opt host = localhost -# builtin opt mapi_port = 50000 -# builtin opt mapi_noheaders = no -# builtin opt mapi_debug = 0 -# builtin opt mapi_clients = 2 -# builtin opt sql_debug = 0 -# builtin opt standoff_ns = http://monetdb.cwi.nl/standoff -# builtin opt standoff_start = start -# builtin opt standoff_end = end -# config opt prefix = /export/scratch/stripe/fabian/monetdb/current/program-i86pc -# config opt config = ${prefix}/etc/monetdb5.conf -# config opt prefix = /export/scratch/stripe/fabian/monetdb/current/program-i86pc -# config opt exec_prefix = ${prefix} -# config opt gdk_dbfarm = ${prefix}/var/MonetDB5/dbfarm -# config opt gdk_dbname = demo -# config opt gdk_alloc_map = no -# config opt gdk_embedded = no -# config opt gdk_debug = 0 -# config opt monet_mod_path = /export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/lib:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/bin -# config opt monet_daemon = no -# config opt monet_welcome = yes -# config opt mero_msglog = ${prefix}/var/log/MonetDB/merovingian.log -# config opt mero_errlog = ${prefix}/var/log/MonetDB/merovingian.log -# config opt mero_pidfile = ${prefix}/var/run/MonetDB/merovingian.pid -# config opt mero_controlport = 50001 -# config opt mal_init = /export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/mal_init.mal -# config opt mal_listing = 2 -# config opt mapi_port = 50000 -# config opt mapi_autosense = false -# config opt mapi_open = false -# config opt sql_optimizer = inline,remap,evaluate,costModel,coercions,emptySet,aliases,mergetable,deadcode,constants,commonTerms,joinPath,deadcode,reduce,garbageCollector,dataflow,history,replication,multiplex -# cmdline opt config = /export/scratch/stripe/fabian/monetdb/current/program-i86pc/etc/monetdb5.conf -# cmdline opt gdk_nr_threads = 0 -# cmdline opt monet_mod_path = /export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/lib:/export/scratch/stripe/fabian/monetdb/current/program-i86pc/lib/MonetDB5/bin -# cmdline opt gdk_dbfarm = /export/scratch/stripe/fabian/monetdb/current/mtest-pegasus.ins.cwi.nl/sql/dbfarm -# cmdline opt mapi_open = true -# cmdline opt xrpc_open = true -# cmdline opt mapi_port = 30332 -# cmdline opt xrpc_port = 44644 -# cmdline opt monet_prompt = -# cmdline opt gdk_dbname = mTests_src_test_BugDay_2005-12-19_2.9.3 -# cmdline opt mal_listing = 0 -#warning: please don't forget to set your vault key! -#(see /export/scratch/stripe/fabian/monetdb/current/program-i86pc/etc/monetdb5.conf) # 22:29:10 > # 22:29:10 > mclient -lsql -i -umonetdb -Pmonetdb --host=pegasus --port=30332 @@ -72,8 +14,6 @@ MAPI = (monetdb) /var/tmp/mtest-29744/. QUERY = select * from env() as env where name = ( select 'prefix' from env() as env ); ERROR = !cardinality violation (21>1) - - # 13:22:15 > # 13:22:15 > Done. # 13:22:15 > _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list