Changeset: 829ab5edcb85 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/829ab5edcb85
Modified Files:
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_storage.c
Branch: strheapvacuum
Log Message:

get correct sql_delta


diffs (43 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
@@ -5013,7 +5013,10 @@ SQLstr_column_vacuum(Client cntxt, MalBl
                        throw(SQL, "sql.column_vacuum", SQLSTATE(42S22) 
"COLcopy failed %s.%s.%s", sname, tname, cname);
                if ((res = (int) store->storage_api.swap_bats(tr, c, bn)) != 
LOG_OK) {
                        BBPreclaim(bn);
-                       throw(SQL, "sql.column_vacuum", SQLSTATE(42S22) 
"swap_bats call failed %s.%s.%s", sname, tname, cname);
+                       if (res == LOG_CONFLICT)
+                               throw(SQL, "sql.column_vacuum", SQLSTATE(42S22) 
"TRANSACTION CONFLICT in storage_api.swap_bats %s.%s.%s", sname, tname, cname);
+                       if (res == LOG_ERR)
+                               throw(SQL, "sql.column_vacuum", SQLSTATE(42S22) 
"LOG ERROR  in storage_api.swap_bats %s.%s.%s", sname, tname, cname);
                }
        }
        BBPunfix(b->batCacheid);
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
@@ -4000,8 +4000,14 @@ bind_cands(sql_trans *tr, sql_table *t, 
 static int
 swap_bats(sql_trans *tr, sql_column *col, BAT *bn)
 {
+       sql_delta *d = NULL;
+       bool update_conflict = false;
+       int in_transaction = segments_in_transaction(tr, col->t);
+       if (in_transaction) return LOG_CONFLICT;
+
+       if ((d = bind_col_data(tr, col, &update_conflict)) == NULL)
+               return update_conflict ? LOG_CONFLICT : LOG_ERR;
        sqlid id = col->base.id;
-       sql_delta *d = ATOMIC_PTR_GET(&col->data);
        bat bid = d->cs.bid;
        lock_column(tr->store, id);
        d->cs.bid = temp_create(bn);
@@ -4011,8 +4017,6 @@ swap_bats(sql_trans *tr, sql_column *col
        d->cs.cleared = 0;
        d->cs.ts = tr->tid;
        d->cs.refcnt = 1;
-       // maybe unfix in caller
-       // bat_destroy(bn);
        temp_destroy(bid);
        unlock_column(tr->store, id);
        return LOG_OK;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to