Changeset: 24964f04f733 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=24964f04f733
Modified Files:
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: HTM
Log Message:

Pull out writing to the WAL and the persistent store out of sql_trans_commit
- Add sql_trans_precommit and sql_trans_persistcommit independent functions


diffs (80 lines):

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
@@ -304,6 +304,8 @@ extern sql_trans *sql_trans_create(backe
 extern sql_trans *sql_trans_destroy(sql_trans *tr);
 extern int sql_trans_validate(sql_trans *tr);
 extern int sql_trans_commit(sql_trans *tr);
+extern int sql_trans_precommit(sql_trans *tr);
+extern int sql_trans_persistcommit(sql_trans *tr);
 
 extern sql_type *sql_trans_create_type(sql_trans *tr, sql_schema * s, char 
*sqlname, int digits, int scale, int radix, char *impl);
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3236,14 +3236,49 @@ sql_trans_commit(sql_trans *tr)
        /* write phase */
        if (bs_debug)
                fprintf(stderr, "#forwarding changes %d,%d %d,%d\n", 
gtrans->stime, tr->stime, gtrans->wstime, tr->wstime);
+
+       /* do a pre-commit first, writing the changes to the write-ahead log 
and rollingforward the transaction */
+       ok = sql_trans_precommit(tr);
+       if (ok == LOG_OK) {
+               /* write the changes in the persistent store */
+               ok = sql_trans_persistcommit(tr);
+       }
+       if (bs_debug)
+               fprintf(stderr, "#done forwarding changes %d,%d\n", 
gtrans->stime, gtrans->wstime);
+       return (ok==LOG_OK)?SQL_OK:SQL_ERR;
+}
+
+int
+sql_trans_precommit(sql_trans *tr)
+{
+       int ok = LOG_OK;
+
        /* snap shots should be saved first */
        if (tr->parent == gtrans) {
+               if (bs_debug) {
+                       fprintf(stderr, "#writing changes to WAL %d,%d 
%d,%d\n", gtrans->stime, tr->stime, gtrans->wstime, tr->wstime);
+               }
                ok = rollforward_trans(tr, R_SNAPSHOT);
 
-               if (ok == LOG_OK) 
+               if (ok == LOG_OK)
                        ok = logger_funcs.log_tstart();
-               if (ok == LOG_OK) 
+               if (ok == LOG_OK)
                        ok = rollforward_trans(tr, R_LOG);
+               return ok;
+       }
+       return (ok==LOG_OK)?SQL_OK:SQL_ERR;
+}
+
+int
+sql_trans_persistcommit(sql_trans *tr)
+{
+       int ok = LOG_OK;
+
+       if (bs_debug) {
+                       fprintf(stderr, "#writing changes to persistent store 
%d,%d\n", gtrans->stime, gtrans->wstime);
+       }
+
+       if (ok == LOG_OK) {
                if (ok == LOG_OK && prev_oid != store_oid)
                        ok = logger_funcs.log_sequence(OBJ_SID, store_oid);
                prev_oid = store_oid;
@@ -3256,12 +3291,9 @@ sql_trans_commit(sql_trans *tr)
                   of failure, the log will be replayed. */
                ok = rollforward_trans(tr, R_APPLY);
        }
-       if (bs_debug)
-               fprintf(stderr, "#done forwarding changes %d,%d\n", 
gtrans->stime, gtrans->wstime);
        return (ok==LOG_OK)?SQL_OK:SQL_ERR;
 }
 
-
 static void
 sql_trans_drop_all_dependencies(sql_trans *tr, sql_schema *s, int id, short 
type)
 {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to