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 -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org