Changeset: 168d9732cf50 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/168d9732cf50
Modified Files:
        sql/storage/bat/bat_storage.c
Branch: default
Log Message:

Transfer transient bats to systrans farm when storing in bat store.


diffs (112 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
@@ -62,6 +62,29 @@ static void merge_delta( sql_delta *obat
                ((!seg->deleted && VALID_4_READ(seg->ts, tr)) || \
                 (seg->deleted && OLD_VALID_4_READ(seg->ts, seg->oldts, tr)))
 
+static inline void
+transfer_to_systrans(BAT *b)
+{
+       /* transfer a BAT from the TRANSIENT farm to the SYSTRANS farm */
+       MT_lock_set(&b->theaplock);
+       if (b->theap->farmid == TRANSIENT ||
+               (b->tvheap && b->tvheap->farmid == TRANSIENT)) {
+               QryCtx *qc = MT_thread_get_qry_ctx();
+               if (qc) {
+                       if (b->theap->farmid == TRANSIENT && b->theap->parentid 
== b->batCacheid) {
+                               ATOMIC_SUB(&qc->datasize, b->theap->size);
+                               b->theap->farmid = SYSTRANS;
+                               b->batRole = SYSTRANS;
+                       }
+                       if (b->tvheap && b->tvheap->farmid == TRANSIENT && 
b->tvheap->parentid == b->batCacheid) {
+                               ATOMIC_SUB(&qc->datasize, b->tvheap->size);
+                               b->tvheap->farmid = SYSTRANS;
+                       }
+               }
+       }
+       MT_lock_unset(&b->theaplock);
+}
+
 static void
 lock_table(sqlstore *store, sqlid id)
 {
@@ -1279,6 +1302,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                if (cs->ebid && !new)
@@ -1321,6 +1345,7 @@ dict_append_bat(sql_trans *tr, sql_delta
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                cs->cleared = true;
@@ -1373,6 +1398,7 @@ for_append_bat(column_storage *cs, BAT *
                        if (cs->bid)
                                temp_destroy(cs->bid);
                        bat_set_access(n, BAT_READ);
+                       transfer_to_systrans(n);
                        cs->bid = temp_create(n);
                        cs->ucnt = 0;
                        if (cs->uibid)
@@ -1626,6 +1652,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                } else {
                                        temp_destroy(cs->uibid);
                                        temp_destroy(cs->uvbid);
+                                       transfer_to_systrans(ui);
+                                       transfer_to_systrans(uv);
                                        cs->uibid = temp_create(ui);
                                        cs->uvbid = temp_create(uv);
                                        cs->ucnt = BATcount(ui);
@@ -1718,6 +1746,8 @@ cs_update_bat( sql_trans *tr, sql_delta 
                                                if (res == LOG_OK) {
                                                        temp_destroy(cs->uibid);
                                                        temp_destroy(cs->uvbid);
+                                                       
transfer_to_systrans(nui);
+                                                       
transfer_to_systrans(nuv);
                                                        cs->uibid = 
temp_create(nui);
                                                        cs->uvbid = 
temp_create(nuv);
                                                        cs->ucnt = 
BATcount(nui);
@@ -1808,6 +1838,7 @@ dict_append_val(sql_trans *tr, sql_delta
                                if (cs->bid && !new)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                if (cs->ebid && !new)
@@ -1845,6 +1876,7 @@ dict_append_val(sql_trans *tr, sql_delta
                                if (cs->bid)
                                        temp_destroy(cs->bid);
                                bat_set_access(n, BAT_READ);
+                               transfer_to_systrans(n);
                                cs->bid = temp_create(n);
                                bat_destroy(n);
                                cs->cleared = true;
@@ -1881,6 +1913,7 @@ for_append_val(column_storage *cs, void 
                        if (cs->bid)
                                temp_destroy(cs->bid);
                        bat_set_access(n, BAT_READ);
+                       transfer_to_systrans(n);
                        cs->bid = temp_create(n);
                        cs->st = ST_DEFAULT;
                        /* at append_col the column's storage type is cleared */
@@ -4971,10 +5004,12 @@ col_compress(sql_trans *tr, sql_column *
        if (d->cs.bid)
                temp_destroy(d->cs.bid);
        bat_set_access(o, BAT_READ);
+       transfer_to_systrans(o);
        d->cs.bid = temp_create(o);
        if (u) {
                if (d->cs.ebid)
                        temp_destroy(d->cs.ebid);
+               transfer_to_systrans(u);
                d->cs.ebid = temp_create(u);
        }
        return LOG_OK;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to