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]