Changeset: 7db344d03135 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7db344d03135
Modified Files:
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
Branch: Jul2021
Log Message:

Some dirty bit management.


diffs (92 lines):

diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -253,10 +253,10 @@ BATmaterialize(BAT *b)
        b->tbaseoff = 0;
        BATsetprop_nolock(b, GDK_NUNIQUE, TYPE_oid, &(oid){is_oid_nil(t) ? 1 : 
b->batCount});
        BATsetprop_nolock(b, GDK_UNIQUE_ESTIMATE, TYPE_dbl, 
&(dbl){is_oid_nil(t) ? 1.0 : (dbl)b->batCount});
-       MT_lock_unset(&b->theaplock);
        b->ttype = TYPE_oid;
        BATsetdims(b);
        b->batDirtydesc = true;
+       MT_lock_unset(&b->theaplock);
        BATsetcount(b, b->batCount);
 
        return GDK_SUCCEED;
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -94,6 +94,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
                .batRole = role,
                .batTransient = true,
                .batRestricted = BAT_WRITE,
+               .batDirtydesc = true,
        };
        if (heapnames && (bn->theap = GDKmalloc(sizeof(Heap))) == NULL) {
                GDKfree(bn);
@@ -117,6 +118,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
                *bn->theap = (Heap) {
                        .parentid = bn->batCacheid,
                        .farmid = BBPselectfarm(role, bn->ttype, offheap),
+                       .dirty = true,
                };
 
                const char *nme = BBP_physical(bn->batCacheid);
@@ -133,6 +135,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
                        *bn->tvheap = (Heap) {
                                .parentid = bn->batCacheid,
                                .farmid = BBPselectfarm(role, bn->ttype, 
varheap),
+                               .dirty = true,
                        };
                        ATOMIC_INIT(&bn->tvheap->refs, 1);
                        strconcat_len(bn->tvheap->filename,
@@ -150,7 +153,6 @@ BATcreatedesc(oid hseq, int tt, bool hea
        MT_lock_init(&bn->batIdxLock, name);
        snprintf(name, sizeof(name), "hashlock%d", bn->batCacheid); /* fits */
        MT_rwlock_init(&bn->thashlock, name);
-       bn->batDirtydesc = true;
        return bn;
 }
 
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -2792,6 +2792,8 @@ PROPdestroy(BAT *b)
 
        b->tprops = NULL;
        while (p) {
+               /* only set dirty if a saved property is changed */
+               b->batDirtydesc |= p->id == GDK_MIN_POS || p->id == GDK_MAX_POS;
                n = p->next;
                VALclear(&p->v);
                GDKfree(p);
@@ -2823,6 +2825,8 @@ BATrmprop_nolock(BAT *b, enum prop_t idx
                                b->tprops = prop->next;
                        VALclear(&prop->v);
                        GDKfree(prop);
+                       /* only set dirty if a saved property is changed */
+                       b->batDirtydesc |= idx == GDK_MIN_POS || idx == 
GDK_MAX_POS;
                        return;
                }
                prev = prop;
@@ -2858,7 +2862,8 @@ BATsetprop_nolock(BAT *b, enum prop_t id
                GDKclrerr();
                p = NULL;
        }
-       b->batDirtydesc = true;
+       /* only set dirty if a saved property is changed */
+       b->batDirtydesc |= idx == GDK_MIN_POS || idx == GDK_MAX_POS;
        return p ? &p->v : NULL;
 }
 
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -754,6 +754,7 @@ BBPreadEntries(FILE *fp, unsigned bbpver
                                return GDK_FAIL;
                        }
                }
+               bn->batDirtydesc = false; /* undo setting by BATsetprop_nolock 
*/
                BBP_refs(bid) = 0;
                BBP_lrefs(bid) = 1;     /* any BAT we encounter here is 
persistent, so has a logical reference */
                BBP_desc(bid) = bn;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to