Changeset: ec758e92c497 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ec758e92c497
Modified Files:
gdk/gdk_bbp.c
Branch: Jul2021
Log Message:
Keep BBPSYNCING flag for the duration of BBPsync.
This means we don't need to manipulate the reference counter to stop
BBPmanager from interfering since it already looks at the BBPSYNCING
flag.
diffs (68 lines):
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -3609,19 +3609,12 @@ BBPsync(int cnt, bat *restrict subcommit
if (BBP_status(i) & BBPEXISTING) {
if (b != NULL) {
if (BBPbackup(b, subcommit != NULL) !=
GDK_SUCCEED) {
- BBP_status_off(i, BBPSYNCING);
if (lock)
MT_lock_unset(&GDKswapLock(i));
break;
}
- } else {
- /* file has not been moved to
- * backup dir, so no need for
- * other threads to wait */
- BBP_status_off(i, BBPSYNCING);
}
} else {
- BBP_status_off(i, BBPSYNCING);
if (subcommit && (b = BBP_desc(i)) &&
BBP_status(i) & BBPDELETED) {
char o[10];
char *f;
@@ -3673,12 +3666,8 @@ BBPsync(int cnt, bat *restrict subcommit
oid minpos = oid_nil, maxpos = oid_nil;
if (BBP_status(i) & BBPPERSISTENT) {
- /* add a fix so that BBPmanager doesn't
- * interfere */
- BBPfix(i);
BAT *b = dirty_bat(&i, subcommit != NULL);
if (i <= 0) {
- decref(-i, false, false, locked_by == 0
|| locked_by != MT_getpid(), __func__);
break;
}
MT_lock_set(&BBP_desc(i)->theaplock);
@@ -3730,16 +3719,9 @@ BBPsync(int cnt, bat *restrict subcommit
n = BBPdir_step(i, size, n, buf, sizeof(buf),
&obbpf, nbbpf, subcommit != NULL, &bi, (BUN) minpos, (BUN) maxpos);
}
bat_iterator_end(&bi);
- if (BBP_status(i) & BBPPERSISTENT) {
- /* can't use BBPunfix because of the
- * "lock" argument: locked_by may be set
- * here */
- decref(i, false, false, locked_by == 0 ||
locked_by != MT_getpid(), __func__);
- }
if (n == -2)
break;
/* we once again have a saved heap */
- BBP_status_off(i, BBPSYNCING);
}
if (idx < cnt)
ret = GDK_FAIL;
@@ -3788,6 +3770,14 @@ BBPsync(int cnt, bat *restrict subcommit
ret == GDK_SUCCEED ? "" : " failed",
(t0 = GDKms()) - t1);
bailout:
+ /* turn off the BBPSYNCING bits for all bats, even when things
+ * didn't go according to plan (i.e., don't check for ret ==
+ * GDK_SUCCEED) */
+ for (int idx = 1; idx < cnt; idx++) {
+ bat i = subcommit ? subcommit[idx] : idx;
+ BBP_status_off(i, BBPSYNCING);
+ }
+
GDKfree(bakdir);
GDKfree(deldir);
return ret;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]