iEnable support for repository locking - dedup - deduplicating backup program Err bitreich.org 70 hgit clone git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ URL:git://bitreich.org/dedup/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/dedup/ bitreich.org 70 1Log /scm/dedup/log.gph bitreich.org 70 1Files /scm/dedup/files.gph bitreich.org 70 1Refs /scm/dedup/refs.gph bitreich.org 70 1Tags /scm/dedup/tag bitreich.org 70 1README /scm/dedup/file/README.gph bitreich.org 70 1LICENSE /scm/dedup/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 0c04bdbe93b0bda78e8122d1a4a418f6f2fa7ad2 /scm/dedup/commit/0c04bdbe93b0bda78e8122d1a4a418f6f2fa7ad2.gph bitreich.org 70 1parent bc78bdef16f48f02b707bce0f5989f6fcdb175ef /scm/dedup/commit/bc78bdef16f48f02b707bce0f5989f6fcdb175ef.gph bitreich.org 70 hAuthor: sin URL:mailto:sin@2f30.org bitreich.org 70 iDate: Sun, 5 May 2019 20:23:38 +0100 Err bitreich.org 70 i Err bitreich.org 70 iEnable support for repository locking Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M TODO | 1 - Err bitreich.org 70 i M dup-check.c | 6 ++++++ Err bitreich.org 70 i M dup-gc.c | 6 ++++++ Err bitreich.org 70 i M dup-init.c | 6 ++++++ Err bitreich.org 70 i M dup-pack.c | 6 ++++++ Err bitreich.org 70 i M dup-rm.c | 7 ++++++- Err bitreich.org 70 i M dup-unpack.c | 6 ++++++ Err bitreich.org 70 i Err bitreich.org 70 i7 files changed, 36 insertions(+), 2 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/TODO b/TODO /scm/dedup/file/TODO.gph bitreich.org 70 i@@ -1,5 +1,4 @@ Err bitreich.org 70 i Use a ring buffer in the chunker (avoid memmove() call) Err bitreich.org 70 i pledge/unveil support Err bitreich.org 70 i-Use flock() to avoid corruption Err bitreich.org 70 i Ability to fetch key from dedicated fd so it never touches disk Err bitreich.org 70 i Use pread/pwrite to avoid lseek() calls Err bitreich.org 70 1diff --git a/dup-check.c b/dup-check.c /scm/dedup/file/dup-check.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i@@ -49,6 +50,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo = "."; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i case 'k': Err bitreich.org 70 i@@ -89,6 +91,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i repo) >= sizeof(bpath)) Err bitreich.org 70 i errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70 i Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70 i serr("sopen: %s", spath); Err bitreich.org 70 i if (bopen(bpath, B_READ, 0600, &bpar, &bctx) <0) Err bitreich.org 70 i@@ -100,6 +104,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i berr("bclose: %s", bpath); Err bitreich.org 70 i if (sclose(sctx) < 0) Err bitreich.org 70 i serr("sclose: %s", spath); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-gc.c b/dup-gc.c /scm/dedup/file/dup-gc.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i@@ -33,6 +34,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i case 'k': Err bitreich.org 70 i@@ -75,11 +77,15 @@ main(int argc, char *argv[]) Err bitreich.org 70 i repo, STORAGEPATH) >= sizeof(path)) Err bitreich.org 70 i errx(1, "snprintf: %s: path too long", path); Err bitreich.org 70 i Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (bopen(path, B_RDWR, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i berr("bopen: %s", path); Err bitreich.org 70 i if (bgc(bctx) < 0) Err bitreich.org 70 i berr("bgc: %s", path); Err bitreich.org 70 i if (bclose(bctx) < 0) Err bitreich.org 70 i berr("bclose: %s", path); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-init.c b/dup-init.c /scm/dedup/file/dup-init.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "misc.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i@@ -35,6 +36,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i bpar.calgo = bparamdef()->calgo; Err bitreich.org 70 i bpar.ealgo = bparamdef()->ealgo; Err bitreich.org 70 i@@ -91,11 +93,15 @@ main(int argc, char *argv[]) Err bitreich.org 70 i Err bitreich.org 70 i if (mkdir(repo, 0700) < 0) Err bitreich.org 70 i err(1, "mkdir: %s", repo); Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (mkdir(spath, 0700) < 0) Err bitreich.org 70 i err(1, "mkdir: %s", spath); Err bitreich.org 70 i if (bcreat(bpath, 0600, &bpar, &bctx) < 0) Err bitreich.org 70 i berr("bcreat: %s", bpath); Err bitreich.org 70 i if (bclose(bctx) < 0) Err bitreich.org 70 i berr("bclose: %s", bpath); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-pack.c b/dup-pack.c /scm/dedup/file/dup-pack.c.gph bitreich.org 70 i@@ -13,6 +13,7 @@ Err bitreich.org 70 i #include "chunker.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i@@ -63,6 +64,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo = "."; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i case 'k': Err bitreich.org 70 i@@ -103,6 +105,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i repo) >= sizeof(bpath)) Err bitreich.org 70 i errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70 i Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (screat(spath, 0600, &sctx) < 0) Err bitreich.org 70 i serr("screat: %s", spath); Err bitreich.org 70 i if (bopen(bpath, B_RDWR, 0600, &bpar, &bctx) <0) Err bitreich.org 70 i@@ -114,5 +118,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i berr("bclose: %s", bpath); Err bitreich.org 70 i if (sclose(sctx) < 0) Err bitreich.org 70 i serr("sclose: %s", spath); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-rm.c b/dup-rm.c /scm/dedup/file/dup-rm.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i int verbose; Err bitreich.org 70 i@@ -49,6 +50,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo = "."; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i case 'k': Err bitreich.org 70 i@@ -89,6 +91,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i repo) >= sizeof(bpath)) Err bitreich.org 70 i errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70 i Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70 i serr("sopen: %s", spath); Err bitreich.org 70 i if (bopen(bpath, B_RDWR, 0600, &bpar, &bctx) <0) Err bitreich.org 70 i@@ -100,9 +104,10 @@ main(int argc, char *argv[]) Err bitreich.org 70 i berr("bclose: %s", bpath); Err bitreich.org 70 i if (sclose(sctx) < 0) Err bitreich.org 70 i serr("sclose: %s", spath); Err bitreich.org 70 i- Err bitreich.org 70 i if (unlink(spath) < 0) Err bitreich.org 70 i err(1, "unlink: %s", spath); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 1diff --git a/dup-unpack.c b/dup-unpack.c /scm/dedup/file/dup-unpack.c.gph bitreich.org 70 i@@ -12,6 +12,7 @@ Err bitreich.org 70 i #include "block.h" Err bitreich.org 70 i #include "config.h" Err bitreich.org 70 i #include "key.h" Err bitreich.org 70 i+#include "lock.h" Err bitreich.org 70 i #include "misc.h" Err bitreich.org 70 i #include "snap.h" Err bitreich.org 70 i Err bitreich.org 70 i@@ -59,6 +60,7 @@ main(int argc, char *argv[]) Err bitreich.org 70 i struct bparam bpar; Err bitreich.org 70 i char *keyfile = NULL; Err bitreich.org 70 i char *repo = "."; Err bitreich.org 70 i+ int lfd; Err bitreich.org 70 i Err bitreich.org 70 i ARGBEGIN { Err bitreich.org 70 i case 'k': Err bitreich.org 70 i@@ -99,6 +101,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i repo) >= sizeof(bpath)) Err bitreich.org 70 i errx(1, "snprintf: %s: path too long", bpath); Err bitreich.org 70 i Err bitreich.org 70 i+ if ((lfd = lockrepo(repo)) < 0) Err bitreich.org 70 i+ errx(1, "failed to lock repository"); Err bitreich.org 70 i if (sopen(spath, S_READ, 0600, &sctx) < 0) Err bitreich.org 70 i serr("sopen: %s", spath); Err bitreich.org 70 i if (bopen(bpath, B_READ, 0600, &bpar, &bctx) <0) Err bitreich.org 70 i@@ -110,6 +114,8 @@ main(int argc, char *argv[]) Err bitreich.org 70 i berr("bclose: %s", bpath); Err bitreich.org 70 i if (sclose(sctx) < 0) Err bitreich.org 70 i serr("sclose: %s", spath); Err bitreich.org 70 i+ if (unlockrepo(lfd) < 0) Err bitreich.org 70 i+ errx(1, "failed to unlock repository"); Err bitreich.org 70 i Err bitreich.org 70 i return 0; Err bitreich.org 70 i } Err bitreich.org 70 .