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

Reply via email to