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

Reply via email to