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]

Reply via email to