Changeset: 28f19e3cb7d8 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/28f19e3cb7d8
Modified Files:
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: transaction_layer_revamp
Log Message:

set tid and ts equal on transaction.


diffs (108 lines):

diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1222,7 +1222,7 @@ segments_is_deleted(segment *s, sql_tran
 {
        for(; s; s=s->next) {
                if (s->start <= rid && s->end > rid) {
-                       if (s->ts >= tr->ts && s->deleted) {
+                       if ((s->ts == tr->tid || s->ts > tr->ts) && s->deleted) 
{
                                return 1;
                        }
                        break;
@@ -1516,7 +1516,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                        for(segment *seg = s->segs->h; seg && res == LOG_OK ; 
seg=seg->next) {
                                if (seg->start <= start && seg->end > start) {
                                        /* check for delete conflicts */
-                                       if (seg->ts >= tr->ts && seg->deleted) {
+                                       if ((seg->ts == tr->tid || seg->ts > 
tr->ts) && seg->deleted) {
                                                res = LOG_CONFLICT;
                                                continue;
                                        }
@@ -1561,7 +1561,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        seg = seg->next;
                                else if (seg->start <= rid && seg->end > rid) {
                                        /* check for delete conflicts */
-                                       if (seg->ts >= tr->ts && seg->deleted) {
+                                       if ((seg->ts == tr->tid || seg->ts > 
tr->ts) && seg->deleted) {
                                                res = LOG_CONFLICT;
                                                continue;
                                        }
@@ -1601,7 +1601,7 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                        seg = seg->next;
                                else if (seg->start <= rid[i] && seg->end > 
rid[i]) {
                                        /* check for delete conflicts */
-                                       if (seg->ts >= tr->ts && seg->deleted) {
+                                       if ((seg->ts == tr->tid || seg->ts > 
tr->ts) && seg->deleted) {
                                                res = LOG_CONFLICT;
                                                continue;
                                        }
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -43,13 +43,6 @@ store_get_timestamp(sqlstore *store)
        return ts;
 }
 
-static ulng
-store_transaction_id(sqlstore *store)
-{
-       ulng tid = ATOMIC_INC(&store->transaction);
-       return tid;
-}
-
 ulng
 store_oldest(sqlstore *store)
 {
@@ -3724,7 +3717,13 @@ sql_trans_create_(sqlstore *store, sql_t
 
        store_lock(store);
        tr->store = store;
-       tr->tid = store_transaction_id(store);
+       if (parent) {
+               tr->ts = parent->ts;
+               tr->tid = parent->tid + 1;
+       }
+       ulng nt_part = parent?(parent->tid - parent->ts):0;
+       tr->ts = (store_timestamp(store) | TRANSACTION_ID_BASE);
+       tr->tid = tr->ts + nt_part ;
        tr->cat = store->cat;
        if (!tr->cat) {
                store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog);
@@ -3782,7 +3781,7 @@ sql_trans_create(sqlstore *store, sql_tr
 {
        sql_trans *tr = sql_trans_create_(store, parent, name);
        if (tr) {
-               tr->ts = store_timestamp(store);
+               tr->ts = tr->tid;
                tr->active = 1;
        }
        return tr;
@@ -3858,7 +3857,7 @@ transaction_check_dependencies_and_remov
                                sql_dependency_change *schange = 
(sql_dependency_change*) he->value;
 
                                /* conflict only if transactions overlap */
-                               if (schange->ts >= tr->ts && lchange->objid == 
schange->objid && lchange->type == schange->type)
+                               if ((schange->ts == tr->tid || schange->ts > 
tr->ts ) && lchange->objid == schange->objid && lchange->type == schange->type)
                                        ok = LOG_CONFLICT;
                        }
                }
@@ -3873,7 +3872,7 @@ transaction_check_dependencies_and_remov
                                sql_dependency_change *schange = 
(sql_dependency_change*) he->value;
 
                                /* conflict only if transactions overlap */
-                               if (schange->ts >= tr->ts && lchange->objid == 
schange->objid && lchange->type == schange->type)
+                               if ((schange->ts == tr->tid || schange->ts > 
tr->ts ) && lchange->objid == schange->objid && lchange->type == schange->type)
                                        ok = LOG_CONFLICT;
                        }
                }
@@ -7043,7 +7042,8 @@ sql_trans_begin(sql_session *s)
 
        store_lock(store);
        TRC_DEBUG(SQL_STORE, "Enter sql_trans_begin for transaction: " ULLFMT 
"\n", tr->tid);
-       tr->ts = store_timestamp(store);
+       tr->ts = (store_timestamp(store) | TRANSACTION_ID_BASE);
+       tr->tid = tr->ts;
        if (!(s->schema = find_sql_schema(tr, s->schema_name))) {
                TRC_DEBUG(SQL_STORE, "Exit sql_trans_begin for transaction: " 
ULLFMT " with error, the schema %s was not found\n", tr->tid, s->schema_name);
                store_unlock(store);
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to