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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list