Changeset: e58d856a620a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e58d856a620a
Modified Files:
monetdb5/mal/mal_session.c
monetdb5/modules/mal/wlcr.c
sql/backends/monet5/Makefile.ag
sql/backends/monet5/sql_wlcr.c
sql/scripts/60_wlcr.sql
Branch: wlcr
Log Message:
Save the state before patching MAL parser
diffs (176 lines):
diff --git a/monetdb5/mal/mal_session.c b/monetdb5/mal/mal_session.c
--- a/monetdb5/mal/mal_session.c
+++ b/monetdb5/mal/mal_session.c
@@ -572,8 +572,8 @@ MALparser(Client c)
c->yycur = 0;
/* check for unfinished blocks */
- if (c->blkmode)
- return MAL_SUCCEED;
+ //if (c->blkmode)
+ //return MAL_SUCCEED;
/* empty files should be skipped as well */
if (c->curprg->def->stop == 1)
return MAL_SUCCEED;
@@ -618,8 +618,8 @@ MALengine(Client c)
MalBlkRecord oldstate = *c->curprg->def;
oldstate.stop = 0;
- if (c->blkmode)
- return MAL_SUCCEED;
+ //if (c->blkmode)
+ //return MAL_SUCCEED;
prg = c->curprg;
if (prg == NULL)
throw(SYNTAX, "mal.engine", SYNTAX_SIGNATURE);
diff --git a/monetdb5/modules/mal/wlcr.c b/monetdb5/modules/mal/wlcr.c
--- a/monetdb5/modules/mal/wlcr.c
+++ b/monetdb5/modules/mal/wlcr.c
@@ -117,7 +117,7 @@ WLCRmaster(Client cntxt, MalBlkPtr mb, M
if( fscanf(fd,"%d %d", &wlcr_batch, &wlcr_threshold) != 3)
fprintf(fd,"0 %d\n", wlcr_threshold);
fclose(fd);
- mnstr_printf(cntxt->fdout,"#master wlcr_batch %d\n",wlcr_batch,
wlcr_threshold);
+ mnstr_printf(cntxt->fdout,"#master wlcr_batch %d threshold
%d\n",wlcr_batch, wlcr_threshold);
return MAL_SUCCEED;
}
diff --git a/sql/backends/monet5/Makefile.ag b/sql/backends/monet5/Makefile.ag
--- a/sql/backends/monet5/Makefile.ag
+++ b/sql/backends/monet5/Makefile.ag
@@ -64,7 +64,7 @@ headers_mal = {
HEADERS = mal
DIR = libdir/monetdb5
SOURCES = sql_aggr_bte.mal sql_aggr_flt.mal sql_aggr_dbl.mal
sql_aggr_int.mal sql_aggr_lng.mal \
- sql_aggr_sht.mal sql_decimal.mal sql_inspect.mal \
+ sql_aggr_sht.mal sql_decimal.mal sql_inspect.mal sql_wlcr.mal\
sql_rank.mal sqlcatalog.mal sql_transaction.mal sql.mal
}
@@ -91,7 +91,7 @@ headers_autoload_hge = {
EXTRA_DIST = 40_sql.mal \
41_sql_hge.mal sql_hge.mal sql_aggr_hge.mal sql_decimal_hge.mal \
sql_aggr_bte.mal sql_aggr_flt.mal sql_aggr_int.mal sql_aggr_lng.mal \
- sql_aggr_sht.mal sql_decimal.mal sql_inspect.mal \
+ sql_aggr_sht.mal sql_decimal.mal sql_inspect.mal sql_wlcr.mal \
sql_rank.mal sqlcatalog.mal sql_transaction.mal sql.mal
EXTRA_DIST_DIR = Tests
diff --git a/sql/backends/monet5/sql_wlcr.c b/sql/backends/monet5/sql_wlcr.c
--- a/sql/backends/monet5/sql_wlcr.c
+++ b/sql/backends/monet5/sql_wlcr.c
@@ -6,6 +6,17 @@
* Copyright 1997 - July 2008 CWI, August 2008 - 2017 MonetDB B.V.
*/
+/*
+ * A master can be replicated by taking a binary copy of the 'bat' directory.
+ * This should be done under control of the program monetdb, e.g.
+ * monetdb replica <masterlocation> <dbname>+
+ *
+ * After restart of a mserver against the newly created image,
+ * the log files from the master are processed.
+ * Alternatively you start with an empty database.
+ *
+ * Since the wlcr files can be stored anywhere, the full path should be given.
+ */
#include "monetdb_config.h"
#include "sql.h"
#include "wlcr.h"
@@ -13,23 +24,38 @@
static str wlcr_master;
static int wlcr_replaythreshold;
+static int wlcr_replaybatch;
static str
WLCRinit(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
- int i = 1;
+ int i = 1, j,k,l;
+ char path[PATHLENGTH];
+ FILE *fd;
(void) cntxt;
+ (void) k;
+ (void) l;
wlcr_master = GDKgetenv("gdk_master");
if (i< pci->argc+1 && getArgType(mb, pci, i) == TYPE_str){
wlcr_master = *getArgReference_str(stk,pci,i);
- wlcr_master = GDKfilepath(0,wlcr_master,"batch",0);
i++;
}
if( wlcr_master == NULL){
throw(SQL,"wlcr.init","Can not access the wlcr directory");
}
+ snprintf(path,PATHLENGTH,"%s%cwlcr", wlcr_master, DIR_SEP);
+ mnstr_printf(cntxt->fdout,"#Testing '%s'\n", path);
+ fd = fopen(path,"r");
+ if( fd == NULL){
+ throw(SQL,"wlcr.init","Can not access '%s'\n",path);
+ }
+ if( fscanf(fd,"%d %d %d", &j,&k,&l) != 3){
+ throw(SQL,"wlcr.init","'%s' does not have proper number of
arguments\n",path);
+ }
+ wlcr_replaybatch = j;
+
if ( i < pci->argc+1 && getArgType(mb, pci, i) == TYPE_int){
wlcr_replaythreshold = *getArgReference_int(stk,pci,i);
}
@@ -39,16 +65,42 @@ WLCRinit(Client cntxt, MalBlkPtr mb, Mal
str
WLCRreplay(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{ str msg;
+ int i;
+ char path[PATHLENGTH];
+ stream *fd;
+
msg = WLCRinit(cntxt, mb, stk, pci);
mnstr_printf(cntxt->fdout,"#Ready to start the replay against '%s'
threshold %d", wlcr_master, wlcr_replaythreshold);
+
+ for( i= 0; i < wlcr_replaybatch; i++){
+ snprintf(path,PATHLENGTH,"%s%cwlcr_%06d", wlcr_master,
DIR_SEP,i);
+ fd= open_rstream(path);
+ if( fd == NULL){
+ throw(SQL,"wlcr.replay","'%s' can not be accessed
\n",path);
+ }
+ close_stream(fd);
+ }
return msg;
}
str
WLCRsynchronize(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{ str msg;
+ int i;
+ char path[PATHLENGTH];
+ stream *fd;
+
msg = WLCRinit(cntxt, mb, stk, pci);
mnstr_printf(cntxt->fdout,"#Ready to start the synchronization against
'%s' threshold %d", wlcr_master, wlcr_replaythreshold);
+
+ for( i= 0; i < wlcr_replaybatch; i++){
+ snprintf(path,PATHLENGTH,"%s%cwlcr_%06d", wlcr_master,
DIR_SEP,i);
+ fd= open_rstream(path);
+ if( fd == NULL){
+ throw(SQL,"wlcr.synchronize","'%s' can not be accessed
\n",path);
+ }
+ close_stream(fd);
+ }
return msg;
}
diff --git a/sql/scripts/60_wlcr.sql b/sql/scripts/60_wlcr.sql
--- a/sql/scripts/60_wlcr.sql
+++ b/sql/scripts/60_wlcr.sql
@@ -32,6 +32,9 @@ external name wlcr.replay;
create procedure wlcr.replay(path string, threshold int)
external name wlcr.replay;
+create procedure wlcr.synchronize(path string)
+external name wlcr.synchronize;
+
create procedure wlcr.synchronize()
external name wlcr.synchronize;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list