Changeset: 4982819c25f3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4982819c25f3
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql.mal
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: hot-snapshot
Log Message:

Introduce MAL suspend/resume_log_flushing


diffs (106 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -4786,6 +4786,22 @@ SQLflush_log(void *ret)
        return MAL_SUCCEED;
 }
 
+str 
+SQLresume_log_flushing(void *ret)
+{
+       (void)ret;
+       store_resume_log();
+       return MAL_SUCCEED;
+}
+
+str 
+SQLsuspend_log_flushing(void *ret)
+{
+       (void)ret;
+       store_suspend_log();
+       return MAL_SUCCEED;
+}
+
 str
 SQLexist_val(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -311,6 +311,8 @@ sql5_export str STRstrings(str *res, con
 sql5_export str BATSTRstrings(bat *res, const bat *src);
 
 sql5_export str SQLflush_log(void *ret);
+sql5_export str SQLresume_log_flushing(void *ret);
+sql5_export str SQLsuspend_log_flushing(void *ret);
 
 sql5_export str SQLexist(bit *res, bat *id);
 sql5_export str SQLexist_val(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -73,7 +73,15 @@ comment "Compile the relational statemen
 
 command flush_log( ) :void
 address SQLflush_log
-comment "flush the log now";
+comment "flush the WAL log now";
+
+command resume_log_flushing( ) :void
+address SQLresume_log_flushing
+comment "Resume WAL log flushing";
+
+command suspend_log_flushing( ) :void
+address SQLsuspend_log_flushing
+comment "Suspend WAL log flushing";
 
 pattern assert(b:bit,msg:str):void
 address SQLassert
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -329,6 +329,9 @@ extern void store_exit(void);
 
 extern void store_apply_deltas(void);
 extern void store_flush_log(void);
+extern void store_resume_log(void);
+extern void store_suspend_log(void);
+
 extern void store_manager(void);
 extern void idle_manager(void);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1761,7 +1761,31 @@ static int need_flush = 0;
 void
 store_flush_log(void)
 {
+       MT_lock_set(&bs_lock);
        need_flush = 1;
+       MT_lock_unset(&bs_lock);
+}
+
+void
+store_resume_log(void)
+{
+       MT_lock_set(&bs_lock);
+       logging_enabled = 1;
+       MT_lock_unset(&bs_lock);
+}
+
+void
+store_suspend_log(void)
+{
+       MT_lock_set(&bs_lock);
+       logging_enabled = 0;
+       /* busy wait till the logmanager is ready */
+       while (currently_logging && !GDKexiting()) {
+               MT_lock_unset(&bs_lock);
+               MT_sleep_ms(100);
+               MT_lock_set(&bs_lock);
+       }
+       MT_lock_unset(&bs_lock);
 }
 
 static int
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to