Changeset: 70fc29419c12 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/70fc29419c12
Modified Files:
gdk/gdk_hash.c
gdk/gdk_private.h
Branch: Jul2021
Log Message:
Not being able to maintain the hash index should not stop the query.
I.e. clear GDK errors after logging them.
diffs (145 lines):
diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -583,10 +583,9 @@ BATcheckhash(BAT *b)
return ret;
}
-static gdk_return
+static void
BAThashsave_intern(BAT *b, bool dosync)
{
- gdk_return rc = GDK_SUCCEED;
Hash *h;
lng t0 = 0;
@@ -600,7 +599,6 @@ BAThashsave_intern(BAT *b, bool dosync)
dosync = false;
#endif
- rc = GDK_FAIL;
/* only persist if parent BAT hasn't changed in the
* mean time */
if (!b->theap->dirty &&
@@ -609,20 +607,20 @@ BAThashsave_intern(BAT *b, bool dosync)
HEAPsave(hp, hp->filename, NULL, dosync, hp->free) ==
GDK_SUCCEED) {
h->heaplink.dirty = false;
hp->dirty = false;
- rc = HASHfix(h, true, dosync);
+ gdk_return rc = HASHfix(h, true, dosync);
TRC_DEBUG(ACCELERATOR,
ALGOBATFMT ": persisting hash %s%s (" LLFMT "
usec)%s\n", ALGOBATPAR(b), hp->filename, dosync ? "" : " no sync", GDKusec() -
t0, rc == GDK_SUCCEED ? "" : " failed");
}
+ GDKclrerr();
}
- return rc;
}
-gdk_return
+void
BAThashsave(BAT *b, bool dosync)
{
Hash *h = b->thash;
if (h == NULL)
- return GDK_SUCCEED;
+ return;
((size_t *) h->heapbckt.base)[0] = (size_t) HASH_VERSION;
((size_t *) h->heapbckt.base)[1] = (size_t) (h->heaplink.free /
h->width);
((size_t *) h->heapbckt.base)[2] = (size_t) h->nbucket;
@@ -630,7 +628,7 @@ BAThashsave(BAT *b, bool dosync)
((size_t *) h->heapbckt.base)[4] = (size_t) BATcount(b);
((size_t *) h->heapbckt.base)[5] = (size_t) h->nunique;
((size_t *) h->heapbckt.base)[6] = (size_t) h->nheads;
- return BAThashsave_intern(b, dosync);
+ BAThashsave_intern(b, dosync);
}
#ifdef PERSISTENTHASH
@@ -1104,21 +1102,25 @@ HASHappend_locked(BAT *b, BUN i, const v
if (h == (Hash *) 1) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
assert(i * h->width == h->heaplink.free);
if (h->nunique < b->batCount / HASH_DESTROY_UNIQUES_FRACTION) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
if (HASHfix(h, false, true) != GDK_SUCCEED) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
if (HASHwidth(i + 1) > h->width &&
HASHupgradehashheap(b) != GDK_SUCCEED) {
+ GDKclrerr();
return;
}
if ((ATOMsize(b->ttype) > 2 &&
@@ -1131,6 +1133,7 @@ HASHappend_locked(BAT *b, BUN i, const v
HEAPfree(&h->heapbckt, true);
HEAPfree(&h->heaplink, true);
GDKfree(h);
+ GDKclrerr();
return;
}
h->Link = h->heaplink.base;
@@ -1173,17 +1176,20 @@ HASHinsert_locked(BAT *b, BUN p, const v
if (h == (Hash *) 1) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
assert(p * h->width < h->heaplink.free);
if (h->nunique < b->batCount / HASH_DESTROY_UNIQUES_FRACTION) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
if (HASHfix(h, false, true) != GDK_SUCCEED) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
BUN c = HASHprobe(h, v);
@@ -1254,17 +1260,20 @@ HASHdelete_locked(BAT *b, BUN p, const v
if (h == (Hash *) 1) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
assert(p * h->width < h->heaplink.free);
if (h->nunique < b->batCount / HASH_DESTROY_UNIQUES_FRACTION) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
if (HASHfix(h, false, true) != GDK_SUCCEED) {
b->thash = NULL;
doHASHdestroy(b, h);
+ GDKclrerr();
return;
}
BUN c = HASHprobe(h, v);
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -66,7 +66,7 @@ gdk_return BATgroup_internal(BAT **group
__attribute__((__visibility__("hidden")));
Hash *BAThash_impl(BAT *restrict b, struct canditer *restrict ci, const char
*restrict ext)
__attribute__((__visibility__("hidden")));
-gdk_return BAThashsave(BAT *b, bool dosync)
+void BAThashsave(BAT *b, bool dosync)
__attribute__((__visibility__("hidden")));
void BATinit_idents(BAT *bn)
__attribute__((__visibility__("hidden")));
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list