Changeset: 449607bad1cf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/449607bad1cf
Modified Files:
gdk/gdk.h
gdk/gdk_align.c
gdk/gdk_bbp.c
gdk/gdk_storage.c
monetdb5/modules/kernel/aggr.c
sql/storage/bat/bat_storage.c
Branch: persistent_sketches
Log Message:
More sketch heap save code via dirty flag in iterator.
diffs (154 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2344,6 +2344,7 @@ typedef struct BATiter {
revsorted:1,
hdirty:1,
vhdirty:1,
+ skhdirty:1,
copiedtodisk:1,
transient:1,
ascii:1;
@@ -2412,6 +2413,10 @@ bat_iterator_nolock(BAT *b)
.vhdirty = b->tvheap &&
b->tvheap->parentid == b->batCacheid &&
b->tvheap->dirty,
+ /* also, if there is no tsketch, it's not dirty */
+ .skhdirty = b->tsketch &&
+ b->tsketch->parentid == b->batCacheid &&
+ b->tsketch->dirty,
.copiedtodisk = b->batCopiedtodisk,
.transient = b->batTransient,
.restricted = b->batRestricted,
@@ -2432,6 +2437,8 @@ bat_iterator_incref(BATiter *bi)
HEAPincref(bi->h);
if (bi->vh)
HEAPincref(bi->vh);
+ if (bi->skh)
+ HEAPincref(bi->skh);
}
static inline BATiter
@@ -2488,6 +2495,8 @@ bat_iterator_copy(const BATiter *bip)
HEAPincref(bip->h);
if (bip->vh)
HEAPincref(bip->vh);
+ if (bip->skh)
+ HEAPincref(bip->skh);
return *bip;
}
@@ -2501,6 +2510,8 @@ bat_iterator_end(BATiter *bip)
HEAPdecref(bip->h, false);
if (bip->vh)
HEAPdecref(bip->vh, false);
+ if (bip->skh)
+ HEAPdecref(bip->skh, false);
*bip = (BATiter) {0};
}
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -207,10 +207,10 @@ VIEWcreate(oid seq, BAT *b, BUN l, BUN h
BBPcacheit(bn, true);
BBPretain(bn->theap->parentid);
+ if (bn->tvheap)
+ BBPretain(bn->tvheap->parentid);
if (bn->tsketch)
BBPretain(bn->tsketch->parentid);
- if (bn->tvheap)
- BBPretain(bn->tvheap->parentid);
if (bn->ustr)
BBPfix(bn->ustr);
TRC_DEBUG(ALGO, ALGOBATFMT " " BUNFMT "," BUNFMT " -> " ALGOBATFMT "\n",
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -4069,6 +4069,7 @@ BBPbackup(BAT *b, bool subcommit)
if (b->oldtail && b->oldtail != (Heap *) 1) {
bi.h = b->oldtail;
bi.hdirty = b->oldtail->dirty;
+ bi.skhdirty = b->oldtail->dirty;
}
bat_iterator_incref(&bi);
MT_lock_unset(&b->theaplock);
@@ -4078,6 +4079,8 @@ BBPbackup(BAT *b, bool subcommit)
rc = do_backup(bi.h, bi.hdirty, subcommit);
if (rc == GDK_SUCCEED && bi.vh != NULL && !bi.ustr)
rc = do_backup(bi.vh, bi.vhdirty, subcommit);
+ if (rc == GDK_SUCCEED && bi.skh != NULL)
+ rc = do_backup(bi.skh, bi.skhdirty, subcommit);
}
bat_iterator_end(&bi);
return rc;
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -684,7 +684,8 @@ BATsave_iter(BAT *b, BATiter *bi, BUN si
}
/* views cannot be saved */
if ((bi->h != NULL && bi->h->parentid != b->batCacheid) ||
- (bi->vh != NULL && bi->vh->parentid != b->batCacheid &&
bi->vh->parentid != b->ustr)) {
+ (bi->vh != NULL && bi->vh->parentid != b->batCacheid &&
bi->vh->parentid != b->ustr) ||
+ (bi->skh != NULL && bi->skh->parentid != b->batCacheid)) {
if (locked)
MT_rwlock_rdunlock(&b->thashlock);
GDKerror("%s is a view on %s; cannot be saved\n", BATgetId(b),
BBP_logical(VIEWtparent(b)));
@@ -771,7 +772,9 @@ BATsave_iter(BAT *b, BATiter *bi, BUN si
&& ATOMvarsized(bi->type)
&& err == GDK_SUCCEED)
err = HEAPsave(bi->vh, nme, "theap", dosync,
bi->vhfree, bi->type == TYPE_msk ? NULL : &b->theaplock);
- if (err == GDK_SUCCEED && bi->skh)
+ if (err == GDK_SUCCEED
+ && bi->skh
+ && (!bi->copiedtodisk || bi->skhdirty))
err = HEAPsave(bi->skh, nme, "tsketch", dosync,
SKETCH_SIZE, &b->theaplock);
}
@@ -870,6 +873,7 @@ BATload_intern(bat bid, bool lock)
return NULL;
} else {
b->tunique_est = sketch_estimate((uint8_t
(*)[CLZ_BUCKETS]) b->tsketch->base);
+ printf("BATload_intern estimating %f for bat id
%d\n", b->tunique_est, b->batCacheid);
}
}
} else {
diff --git a/monetdb5/modules/kernel/aggr.c b/monetdb5/modules/kernel/aggr.c
--- a/monetdb5/modules/kernel/aggr.c
+++ b/monetdb5/modules/kernel/aggr.c
@@ -1562,17 +1562,17 @@ uniques_guess(Client c, lng *guess, cons
/* *guess = llroundl(bat_uniques_guess(b, &bi, NULL)); */
BATiter bi = bat_iterator(b);
+ printf("from the iter field struct %lld\n", llroundl(bi.unique_est));
+ printf("from the bat field struct %lld\n", llroundl(b->tunique_est));
struct canditer bci;
canditer_init(&bci, b, NULL);
uint8_t sketch[BUCKETS][CLZ_BUCKETS] = {0};
- /* uint8_t (*sketch_ptr)[CLZ_BUCKETS] = sketch; */
+
gdk_return rc = bat_sketch(&bi, &bci, sketch);
- if (rc == GDK_SUCCEED) {
- /* printf("uniques_guess estimating for bat id %d\n",
b->batCacheid); */
+ if (rc == GDK_SUCCEED)
*guess = llroundl(sketch_estimate(sketch));
- } else {
+ else
*guess = -1;
- }
bat_iterator_end(&bi);
BBPreclaim(b);
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
@@ -3031,7 +3031,6 @@ col_stats(sql_trans *tr, sql_column *c,
*unique_est =
sketch_estimate(tmp_sketch);
}
}
- //printf("estimates %s %s %f\n",
c->base.name, c->type.type->base.name, *unique_est);
} else if (d->cs.st == ST_DICT && (off =
bind_col_no_view(tr, c, QUICK))) {
/* for dict, check the offsets bat for
uniqueness */
MT_lock_set(&off->theaplock);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]