Changeset: 790686aa87e1 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=790686aa87e1 Modified Files: sql/backends/monet5/sql.c sql/backends/monet5/sql_result.c sql/storage/sql_storage.h sql/storage/store.c Branch: default Log Message:
Refactor store_manager() to use store_apply_deltas() The latter gains a parameter because store_manager releases bs_lock during the call to logger_funcs.cleanup() whereas the other users of store_apply_deltas() don't. Note. Within store_apply_deltas() I changed if (logging && res == LOG_OK) into if (res == LOG_OK) because as far as I can see there is no way `logging` can have become false. diffs (104 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 @@ -149,7 +149,7 @@ sqlcleanup(mvc *c, int err) sql_trans_commit(c->session->tr); /* write changes to disk */ sql_trans_end(c->session); - store_apply_deltas(); + store_apply_deltas(true); sql_trans_begin(c->session); } store_unlock(); diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c --- a/sql/backends/monet5/sql_result.c +++ b/sql/backends/monet5/sql_result.c @@ -874,7 +874,7 @@ mvc_import_table(Client cntxt, BAT ***ba if (locked) { /* flush old changes to disk */ sql_trans_end(m->session); - store_apply_deltas(); + store_apply_deltas(true); sql_trans_begin(m->session); } 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 @@ -344,7 +344,7 @@ extern res_table *res_tables_find(res_ta extern int store_init(int debug, store_type store, int readonly, int singleuser, backend_stack stk); extern void store_exit(void); -extern void store_apply_deltas(void); +extern int store_apply_deltas(bool locked); extern void store_flush_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 @@ -1341,7 +1341,7 @@ store_upgrade_ids(sql_trans* tr) } } } - store_apply_deltas(); + store_apply_deltas(true); logger_funcs.with_ids(); return SQL_OK; } @@ -2115,9 +2115,10 @@ store_exit(void) MT_lock_unset(&bs_lock); } -/* call locked ! */ -void -store_apply_deltas(void) + +/* call locked! */ +int +store_apply_deltas(bool locked) { int res = LOG_OK; @@ -2127,9 +2128,16 @@ store_apply_deltas(void) if (store_funcs.gtrans_update) store_funcs.gtrans_update(gtrans); res = logger_funcs.restart(); - if (logging && res == LOG_OK) + if (res == LOG_OK) { + if (!locked) + MT_lock_unset(&bs_lock); res = logger_funcs.cleanup(); + if (!locked) + MT_lock_set(&bs_lock); + } logging = false; + + return res; } void @@ -2176,21 +2184,8 @@ store_manager(void) ATOMIC_SET(&need_flush, 0); MT_thread_setworking("flushing"); - logging = true; - /* make sure we reset all transactions on re-activation */ - gtrans->wstime = timestamp(); - if (store_funcs.gtrans_update) { - store_funcs.gtrans_update(gtrans); - } - res = logger_funcs.restart(); - - MT_lock_unset(&bs_lock); - if (logging && res == LOG_OK) { - res = logger_funcs.cleanup(); - } - - MT_lock_set(&bs_lock); - logging = false; + store_apply_deltas(false); + MT_lock_unset(&bs_lock); if (res != LOG_OK) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list