Changeset: 758ac233b3ba for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=758ac233b3ba Modified Files: monetdb5/modules/mal/wlcr.c monetdb5/modules/mal/wlcr.h monetdb5/modules/mal/wlcr.mal sql/backends/monet5/sql_wlcr.c sql/backends/monet5/sql_wlcr.h sql/backends/monet5/sql_wlcr.mal sql/scripts/60_wlcr.sql Branch: wlcr Log Message:
Save inspection routines. diffs (169 lines): 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 @@ -26,11 +26,13 @@ * against the database. We skip this for the time being. * * The goal of this module is to ease BACKUP and REPPLICATION of a master database - * with a time-bounded delay. + * with a time-bounded delay. * Such a clone is a database replica that aid in query workload sharing, * database versioning, and (re-)partitioning. * Tables taken from the master version are not protected against local updates. * However, any transaction being replay that fails finalizes the cloning process. + * Furthermore, only persistent tables are considered for replication. + * Tables under the 'tmp' schema are ignored. * * Simplicity and ease of end-user control has been the driving argument here. * @@ -354,6 +356,15 @@ WLCgetmasterclock(Client cntxt, MalBlkPt return MAL_SUCCEED; } +str +WLCgetmastertick(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +{ lng *ret = getArgReference_lng(stk,pci,0); + (void) cntxt; + (void) mb; + *ret = wlc_id -1; + return MAL_SUCCEED; +} + /* Changing the drift should have immediate effect * It forces a new log file */ diff --git a/monetdb5/modules/mal/wlcr.h b/monetdb5/modules/mal/wlcr.h --- a/monetdb5/modules/mal/wlcr.h +++ b/monetdb5/modules/mal/wlcr.h @@ -57,6 +57,7 @@ mal_export str WLCstopmaster(Client cntx mal_export str WLCsetmasterdrift(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export str WLCgetmasterdrift(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export str WLCgetmasterclock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +mal_export str WLCgetmastertick(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export str WLCtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export str WLCquery(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export str WLCcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); diff --git a/monetdb5/modules/mal/wlcr.mal b/monetdb5/modules/mal/wlcr.mal --- a/monetdb5/modules/mal/wlcr.mal +++ b/monetdb5/modules/mal/wlcr.mal @@ -34,6 +34,10 @@ pattern getmasterclock():str address WLCgetmasterclock comment "Timestamp of last update transaction"; +pattern getmastertick():lng +address WLCgetmastertick +comment "Transaction identifier of the last committed transaction"; + pattern finish(started:str, user:str, action:str, runtime:int) address WLCfinish comment "Mark the beginning of the work unit which can be a compound transaction"; 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 @@ -235,6 +235,7 @@ WLRprocess(void *arg) } else if( getModuleId(q) == wlrRef && getFunctionId(q) == transactionRef ){ strncpy(wlr_read, getVarConstant(mb, getArg(q,2)).val.sval,26); + wlr_tag = getVarConstant(mb, getArg(q,1)).val.lval; } // only re-execute successful transactions. if ( getModuleId(q) == wlrRef && getFunctionId(q) ==commitRef ){ @@ -250,7 +251,6 @@ WLRprocess(void *arg) sql->session->level = 0; (void) mvc_trans(sql); msg= runMAL(c,mb,0,0); - wlr_tag++; WLRsetConfig( ); // ignore warnings if (msg && strstr(msg,"WARNING")) @@ -435,23 +435,27 @@ str WLRgetreplicaclock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { str *ret = getArgReference_str(stk,pci,0); - WLRgetMaster(); + + (void) cntxt; + (void) mb; + + WLRgetConfig(); if( wlr_read[0]) *ret= GDKstrdup(wlr_read); else *ret= GDKstrdup(str_nil); - (void) cntxt; - (void) mb; return MAL_SUCCEED; } str -WLRgetreplicabacklog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) +WLRgetreplicatick(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { lng *ret = getArgReference_lng(stk,pci,0); + (void) cntxt; (void) mb; - WLRgetMaster(); - *ret = wlc_id - wlr_tag; + + WLRgetConfig(); + *ret = wlr_tag; return MAL_SUCCEED; } diff --git a/sql/backends/monet5/sql_wlcr.h b/sql/backends/monet5/sql_wlcr.h --- a/sql/backends/monet5/sql_wlcr.h +++ b/sql/backends/monet5/sql_wlcr.h @@ -19,7 +19,7 @@ sql5_export str WLRinit(void); sql5_export str WLRreplicate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str WLRstopreplicate(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str WLRgetreplicaclock(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str WLRgetreplicabacklog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); +sql5_export str WLRgetreplicatick(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str WLRsetreplicadrift(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str WLRtransaction(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str WLRcatalog(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); diff --git a/sql/backends/monet5/sql_wlcr.mal b/sql/backends/monet5/sql_wlcr.mal --- a/sql/backends/monet5/sql_wlcr.mal +++ b/sql/backends/monet5/sql_wlcr.mal @@ -42,9 +42,9 @@ pattern getreplicaclock():str address WLRgetreplicaclock comment "Timestamp of last replicated transaction."; -pattern getreplicabacklog():lng -address WLRgetreplicabacklog -comment "Number of transactions pending execution"; +pattern getreplicatick():lng +address WLRgetreplicatick +comment "Transaction identifier of the last replicated transaction."; pattern transaction(tid:lng, started:str, user:str) address WLRtransaction 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 @@ -22,6 +22,9 @@ external name wlcr."setmasterdrift"; create function masterClock() returns string external name wlcr."getmasterclock"; +create function masterTick() returns integer +external name wlcr."getmastertick"; + -- Replica commands create procedure replicate() external name wlr.replicate; @@ -44,12 +47,12 @@ external name wlr.replicate; create procedure replicate(dbname string, id bigint) external name wlr.replicate; -create procedure replicadrift(duration int) +create procedure replicadrift(duration integer) external name wlr."setreplicadrift"; create function replicaClock() returns string external name wlr."getreplicaclock"; -create function replicaBacklog() returns integer -external name wlr."getreplicabacklog"; +create function replicaTick() returns integer +external name wlr."getreplicatick"; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list