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