Changeset: 665aa6b66c9c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=665aa6b66c9c
Added Files:
sql/test/mergetables/Tests/forex1.sql
Modified Files:
buildtools/autogen/autogen/am.py
clients/mapiclient/Tests/tomograph--help.stable.err
clients/mapiclient/tomograph.c
gdk/gdk_bat.c
monetdb5/mal/mal.h
monetdb5/mal/mal_recycle.c
monetdb5/mal/mal_resource.c
sql/backends/monet5/sql.c
sql/test/mergetables/Tests/All
Branch: geo
Log Message:
Merge with default branch.
diffs (truncated from 403 to 300 lines):
diff --git a/buildtools/autogen/autogen/am.py b/buildtools/autogen/autogen/am.py
--- a/buildtools/autogen/autogen/am.py
+++ b/buildtools/autogen/autogen/am.py
@@ -960,6 +960,7 @@ def am_gem(fd, var, gem, am):
dirs.append(d)
fd.write("\t[ '$(srcdir)' -ef . ] || cp -p '$(srcdir)/%s' '%s'\n"
% (src, src))
fd.write("\tgem build '%s'\n" % f)
+ fd.write("\tgem install --local --install-dir ./'%s' --bindir .'%s'
--force --document=ri,rdoc %s\n" % (rd, am_translate_dir('bindir', am), f[:-4]))
fd.write('mostlyclean-local: mostlyclean-local-%s\n' % sf)
fd.write('.PHONY: mostlyclean-local-%s\n' % sf)
fd.write('mostlyclean-local-%s:\n' % sf)
@@ -969,7 +970,7 @@ def am_gem(fd, var, gem, am):
fd.write("\t[ '$(srcdir)' -ef . -o ! -d '%s' ] || rmdir '%s'\n" %
(d, d))
fd.write("install-exec-local-%s: %s\n" % (sf, f[:-4]))
fd.write("\tmkdir -p $(DESTDIR)'%s'\n" % rd)
- fd.write("\tgem install --local --install-dir $(DESTDIR)'%s' --force
--rdoc '%s'\n" % (rd, f[:-4]))
+ fd.write("\tcp -a ./'%s'/* $(DESTDIR)'%s'\n" % (rd, rd))
fd.write("uninstall-local-%s: %s\n" % (sf, f[:-4]))
# remove "-0.1.gemspec" from end of `f'
fd.write("\tgem uninstall --install-dir $(DESTDIR)'%s' '%s'\n" % (rd,
f[:-12]))
diff --git a/clients/mapiclient/Tests/tomograph--help.stable.err
b/clients/mapiclient/Tests/tomograph--help.stable.err
--- a/clients/mapiclient/Tests/tomograph--help.stable.err
+++ b/clients/mapiclient/Tests/tomograph--help.stable.err
@@ -20,8 +20,9 @@ tomograph [options]
-r | --range=<starttime>-<endtime>[ms,s]
-i | --input=<profiler event file >
-o | --output=<file prefix > (default 'tomograph'
+ -s | --system=# (on= 1(default) off=0
-b | --beat=<delay> in milliseconds (default 5000)
- -A | --atlas=<number> maximum number of pages
+ -A | --atlas=<number> maximum number of queries (default 1)
-D | --debug
-? | --help
diff --git a/clients/mapiclient/tomograph.c b/clients/mapiclient/tomograph.c
--- a/clients/mapiclient/tomograph.c
+++ b/clients/mapiclient/tomograph.c
@@ -70,8 +70,10 @@ static char hostname[128];
static char *basefilename = "tomograph";
static FILE *tracefd;
static lng startrange = 0, endrange = 0;
+static int systemcall = 1; // attempt system call
static char *inputfile = NULL;
static char *title = 0;
+static char *query = 0;
static int beat = 5000;
static int cpus = 0;
static int atlas= 1;
@@ -83,10 +85,6 @@ static MapiHdl hdl = NULL;
/*
* Parsing the argument list of a MAL call to obtain un-quoted string values
*/
-#define MAXMALARGS 1024
-char *malarguments[MAXMALARGS];
-int malargtop;
-
static int capturing=0;
#define MAXTHREADS 1048
@@ -429,8 +427,9 @@ usageTomograph(void)
fprintf(stderr, " -r | --range=<starttime>-<endtime>[ms,s] \n");
fprintf(stderr, " -i | --input=<profiler event file > \n");
fprintf(stderr, " -o | --output=<file prefix > (default
'tomograph'\n");
+ fprintf(stderr, " -s | --system=# (on= 1(default) off=0\n");
fprintf(stderr, " -b | --beat=<delay> in milliseconds (default
5000)\n");
- fprintf(stderr, " -A | --atlas=<number> maximum number of pages\n");
+ fprintf(stderr, " -A | --atlas=<number> maximum number of queries
(default 1)\n");
fprintf(stderr, " -D | --debug\n");
fprintf(stderr, " -? | --help\n");
exit(-1);
@@ -443,7 +442,12 @@ static void createTomogram(void);
static void
stopListening(int i)
{
- fprintf(stderr,"signal %d received\n",i);
+#define BSIZE 64*1024
+ char buf[BSIZE + BUFSIZ]={0};
+ char pages[BSIZE]={0};
+ int error =0, plen =0;
+ if( i)
+ fprintf(stderr,"signal %d received\n",i);
if( dbh)
doQ("profiler.stop();");
stop_disconnect:
@@ -451,10 +455,29 @@ stop_disconnect:
createTomogram();
// show follow up action only once
if(atlaspage >= 1){
- fprintf(stderr, "To create the atlas run:\n");
- for (i = 0; i< atlaspage; i++)
+ for (i = 0; systemcall && error == 0 && i< atlaspage; i++){
+ snprintf(buf, BUFSIZ, "gnuplot
%s_%02d.gpl;",basefilename,i);
+ plen += snprintf(pages, BSIZE
-plen,"%s_%02d.pdf;",basefilename,i);
+ if ( plen >= BSIZE-1){
+ error = -1;
+ break;
+ }
+ error = system(buf);
+ }
+
+ if( i < atlaspage)
+ fprintf(stderr, "To finish the atlas run:\n");
+ for (; i< atlaspage; i++)
fprintf(stderr, "gnuplot %s_%02d.gpl;",basefilename,i);
- fprintf(stderr, "gs -dNOPAUSE -sDEVICE=pdfwrite
-sOUTPUTFILE=%s.pdf -dBATCH %s_??.pdf\n",basefilename,basefilename);
+
+ if( systemcall && error == 0) {
+ snprintf(buf, BSIZE, "gs -q -dNOPAUSE -sDEVICE=pdfwrite
-sOUTPUTFILE=%s.pdf -dBATCH %s",basefilename,pages);
+ error = system(buf);
+ }
+ if( error == 0)
+ fprintf(stderr,"-- done: %s.pdf\n", basefilename);
+ else
+ fprintf(stderr, "gs -dNOPAUSE -sDEVICE=pdfwrite
-sOUTPUTFILE=%s.pdf -dBATCH %s\n",basefilename,pages);
}
if(dbh)
@@ -513,7 +536,6 @@ static void resetTomograph(void){
lastclk[i]=0;
topbox =0;
events = 0;
- malargtop =0;
for (i = 0; i < MAXTHREADS; i++)
threads[i] = topbox++;
memset((char*) box, 0, sizeof(Box) * MAXBOX);
@@ -1371,7 +1393,7 @@ update(char *line, EventRecord *ev)
box[idx].fcn = ev->fcn ? ev->fcn : strdup("");
if(ev->fcn && strstr(ev->fcn,"querylog.define") ){
// extract a string argument
- currentquery = malarguments[0];
+ currentquery = malarguments[malretc + 0];
// use the truncated query text, beware the the \ is
already escaped in the call argument.
q = qry = (char *) malloc(strlen(currentquery) * 2);
for (c= currentquery; *c; )
@@ -1398,7 +1420,7 @@ update(char *line, EventRecord *ev)
qry[93]= 0;
}
currentquery = qry;
- fprintf(stderr,"-- page %d %s:%s\n",atlaspage,
(title?title:""), currentquery);
+ fprintf(stderr,"-- page %d :%s\n",atlaspage,
currentquery);
}
return;
}
@@ -1485,7 +1507,7 @@ main(int argc, char **argv)
int colormap=0;
EventRecord event;
- static struct option long_options[15] = {
+ static struct option long_options[17] = {
{ "dbname", 1, 0, 'd' },
{ "user", 1, 0, 'u' },
{ "port", 1, 0, 'p' },
@@ -1495,6 +1517,8 @@ main(int argc, char **argv)
{ "title", 1, 0, 'T' },
{ "input", 1, 0, 'i' },
{ "range", 1, 0, 'r' },
+ { "system", 1, 0, 's' },
+ { "query", 1, 0, 'q' },
{ "output", 1, 0, 'o' },
{ "debug", 0, 0, 'D' },
{ "beat", 1, 0, 'b' },
@@ -1508,7 +1532,7 @@ main(int argc, char **argv)
while (1) {
int option_index = 0;
- int c = getopt_long(argc, argv, "d:u:p:P:h:?T:i:r:o:Db:A:m",
+ int c = getopt_long(argc, argv, "d:u:p:P:h:?T:i:r:s:q:o:Db:A:m",
long_options, &option_index);
if (c == -1)
break;
@@ -1528,6 +1552,10 @@ main(int argc, char **argv)
case 'd':
dbname = optarg;
break;
+ case 'q':
+ query = optarg;
+ atlas = 1;
+ break;
case 'i':
inputfile = optarg;
break;
@@ -1555,6 +1583,9 @@ main(int argc, char **argv)
case 'T':
title = optarg;
break;
+ case 's':
+ systemcall = atoi(optarg?optarg:0);
+ break;
case 'o':
basefilename = strdup(optarg);
if( strstr(basefilename,".trace"))
@@ -1716,6 +1747,12 @@ main(int argc, char **argv)
if( tracefd == NULL)
fprintf(stderr,"Could not create trace file\n");
+ if(query){
+ // fork and execute mclient session (TODO)
+ snprintf(buf, BUFSIZ,"mclient -d %s -s
\"%s\"",dbname,query);
+ fprintf(stderr,"%s\n",buf);
+ fprintf(stderr,"Not yet implemented\n");
+ }
len = 0;
while ((m = mnstr_read(conn, buf + len, 1, BUFSIZ - len)) > 0) {
buf[len + m] = 0;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1170,13 +1170,14 @@ BUNins(BAT *b, const void *h, const void
if (BUNinplace(bm, p, t, h, force) == GDK_FAIL)
return GDK_FAIL;
} else {
+ size_t hsize = 0, tsize = 0;
+
p = BUNlast(b); /* insert at end */
if (p == BUN_MAX || b->batCount == BUN_MAX) {
GDKerror("BUNins: bat too large\n");
return GDK_FAIL;
}
- HASHdestroy(b);
if (unshare_string_heap(b) == GDK_FAIL) {
GDKerror("BUNins: failed to unshare string heap\n");
return GDK_FAIL;
@@ -1184,6 +1185,10 @@ BUNins(BAT *b, const void *h, const void
ALIGNins(b, "BUNins", force, GDK_FAIL);
b->batDirty = 1;
+ if (b->H->hash && b->H->vheap)
+ hsize = b->H->vheap->size;
+ if (b->T->hash && b->T->vheap)
+ tsize = b->T->vheap->size;
setcolprops(b, b->H, h);
setcolprops(b, b->T, t);
@@ -1193,6 +1198,17 @@ BUNins(BAT *b, const void *h, const void
} else {
BATsetcount(b, b->batCount + 1);
}
+
+ if (b->H->hash) {
+ HASHins(bm, p, h);
+ if (hsize && hsize != b->H->vheap->size)
+ HEAPwarm(b->H->vheap);
+ }
+ if (b->T->hash) {
+ HASHins(b, p, t);
+ if (tsize && tsize != b->T->vheap->size)
+ HEAPwarm(b->T->vheap);
+ }
}
IMPSdestroy(b); /* no support for inserts in imprints yet */
return GDK_SUCCEED;
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -38,7 +38,13 @@
* for additional system variable settings.
*/
#define MAXSCRIPT 64
-#define MEMORY_THRESHOLD 0.8
+
+/*
+ * MonetDB assumes it can use most of the machines memory,
+ * leaving a small portion for other programs.
+ */
+#define GB (((lng)1024)*1024*1024)
+#define MEMORY_THRESHOLD (0.2 * monet_memory > 8 * GB? monet_memory - 8 *
GB: 0.8 * monet_memory)
mal_export char monet_cwd[PATHLENGTH];
mal_export size_t monet_memory;
diff --git a/monetdb5/mal/mal_recycle.c b/monetdb5/mal/mal_recycle.c
--- a/monetdb5/mal/mal_recycle.c
+++ b/monetdb5/mal/mal_recycle.c
@@ -168,10 +168,10 @@ int chooseVictims(Client cntxt, int *lea
{
int i,j,l;
lng freed, sz;
- lng target = (lng) MT_getrss() - (lng) (MEMORY_THRESHOLD *
monet_memory);
+ lng target = (lng) MT_getrss() - (lng) (MEMORY_THRESHOLD );
#ifdef _DEBUG_CACHE_
- mnstr_printf(cntxt->fdout,"#chooseVictims %d mem "LLFMT, ltop, (lng)
(MEMORY_THRESHOLD * monet_memory));
+ mnstr_printf(cntxt->fdout,"#chooseVictims %d mem "LLFMT, ltop, (lng)
(MEMORY_THRESHOLD ));
mnstr_printf(cntxt->fdout," RSS "LLFMT, (lng) MT_getrss());
mnstr_printf(cntxt->fdout," " LLFMT" srch %5.2f\n",
target, ((double)recycleSearchTime)/recycleSearchCalls);
@@ -382,7 +382,7 @@ newpass:
GDKfree(dmask);
/* check if a new pass of cache cleaning is needed */
- if ( recyclerMemoryUsed > (lng) (MEMORY_THRESHOLD * monet_memory) )
+ if ( recyclerMemoryUsed > (lng) (MEMORY_THRESHOLD ) )
goto newpass;
}
@@ -399,7 +399,7 @@ RECYCLEkeep(Client cntxt, MalBlkPtr mb,
if ( recycleBlk->stop >= recycleCacheLimit)
return ; /* no more caching */
- if ( recyclerMemoryUsed + p->wbytes > (lng) (MEMORY_THRESHOLD *
monet_memory))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list