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