Changeset: 8bb93d21f81b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/8bb93d21f81b
Modified Files:
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_private.h
gdk/gdk_storage.c
Branch: default
Log Message:
A little cleanup: don't keep bat locked during backup, use iterator instead.
diffs (180 lines):
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -180,6 +180,28 @@ BATsetdims(BAT *b, uint16_t width)
}
const char *
+gettailnamebi(const BATiter *bi)
+{
+ if (bi->type == TYPE_str) {
+ switch (bi->width) {
+ case 1:
+ return "tail1";
+ case 2:
+ return "tail2";
+#if SIZEOF_VAR_T == 8
+ case 4:
+ return "tail4";
+#endif
+ case 8:
+ break;
+ default:
+ MT_UNREACHABLE();
+ }
+ }
+ return "tail";
+}
+
+const char *
gettailname(const BAT *b)
{
if (b->ttype == TYPE_str) {
@@ -192,8 +214,10 @@ gettailname(const BAT *b)
case 4:
return "tail4";
#endif
+ case 8:
+ break;
default:
- break;
+ MT_UNREACHABLE();
}
}
return "tail";
@@ -222,8 +246,10 @@ settailname(Heap *restrict tail, const c
".tail4", NULL);
return;
#endif
+ case 8:
+ break;
default:
- break;
+ MT_UNREACHABLE();
}
}
strconcat_len(tail->filename, sizeof(tail->filename), physnme,
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -3746,52 +3746,37 @@ do_backup(const char *srcdir, const char
static gdk_return
BBPbackup(BAT *b, bool subcommit)
{
- char *srcdir;
- long_str nme;
- const char *s = BBP_physical(b->batCacheid);
- size_t slen;
- bool locked = false;
-
- if (BBPprepare(subcommit) != GDK_SUCCEED) {
- return GDK_FAIL;
+ gdk_return rc;
+
+ if ((rc = BBPprepare(subcommit)) != GDK_SUCCEED) {
+ return rc;
}
if (!b->batCopiedtodisk || b->batTransient) {
return GDK_SUCCEED;
}
/* determine location dir and physical suffix */
- if (!(srcdir = GDKfilepath(NOFARM, BATDIR, s, NULL)))
- goto fail;
- s = strrchr(srcdir, DIR_SEP);
- if (!s)
- goto fail;
-
- slen = strlen(++s);
- if (slen >= sizeof(nme))
- goto fail;
- memcpy(nme, s, slen + 1);
- srcdir[s - srcdir] = 0;
-
- MT_lock_set(&b->theaplock);
- locked = true;
- if (b->ttype != TYPE_void &&
- do_backup(srcdir, nme, gettailname(b), b->theap,
- b->batDirtydesc || b->theap->dirty,
- subcommit) != GDK_SUCCEED)
- goto fail;
- if (b->tvheap &&
- do_backup(srcdir, nme, "theap", b->tvheap,
- b->batDirtydesc || b->tvheap->dirty,
- subcommit) != GDK_SUCCEED)
- goto fail;
- MT_lock_unset(&b->theaplock);
+ char *srcdir;
+ if ((srcdir = GDKfilepath(NOFARM, BATDIR, BBP_physical(b->batCacheid),
NULL)) != NULL) {
+ char *nme = strrchr(srcdir, DIR_SEP);
+ assert(nme != NULL);
+ *nme++ = '\0'; /* split into directory and file name */
+
+ BATiter bi = bat_iterator(b);
+ if (bi.type != TYPE_void) {
+ rc = do_backup(srcdir, nme, gettailnamebi(&bi), bi.h,
+ b->batDirtydesc || bi.h->dirty,
+ subcommit);
+ if (rc == GDK_SUCCEED && bi.vh != NULL)
+ rc = do_backup(srcdir, nme, "theap", bi.vh,
+ b->batDirtydesc || bi.vh->dirty,
+ subcommit);
+ }
+ bat_iterator_end(&bi);
+ } else {
+ rc = GDK_FAIL;
+ }
GDKfree(srcdir);
- return GDK_SUCCEED;
- fail:
- if (locked)
- MT_lock_unset(&b->theaplock);
- if(srcdir)
- GDKfree(srcdir);
- return GDK_FAIL;
+ return rc;
}
/*
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -256,6 +256,8 @@ gdk_return rangejoin(BAT *r1, BAT *r2, B
__attribute__((__visibility__("hidden")));
const char *gettailname(const BAT *b)
__attribute__((__visibility__("hidden")));
+const char *gettailnamebi(const BATiter *bi)
+ __attribute__((__visibility__("hidden")));
void settailname(Heap *restrict tail, const char *restrict physnme, int tt,
int width)
__attribute__((__visibility__("hidden")));
void strCleanHash(Heap *hp, bool rebuild)
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -763,27 +763,6 @@ BATmsync(BAT *b)
#endif /* DISABLE_MSYNC */
}
-static inline const char *
-gettailnamebi(const BATiter *bi)
-{
- if (bi->type != TYPE_str)
- return "tail";
- switch (bi->width) {
- case 1:
- return "tail1";
- case 2:
- return "tail2";
-#if SIZEOF_VAR_T == 8
- case 4:
- return "tail4";
-#endif
- case 8:
- return "tail";
- default:
- MT_UNREACHABLE();
- }
-}
-
gdk_return
BATsave_locked(BAT *b, BATiter *bi, BUN size)
{
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]