From e4112d888cf555b5e4819c2800e94d9c3aca90dc Mon Sep 17 00:00:00 2001 From: 3nprob <3nprob@example.com> Date: Thu, 19 May 2022 20:32:37 +0900 Subject: [PATCH] add ZREPL_DESTROY_MAX_BATCH_SIZE env var to control max batch destroy size fixes #508 closes https://github.com/zrepl/zrepl/pull/604 --- docs/changelog.rst | 3 ++- zfs/versions_destroy.go | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index ad0660a..189ec84 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -21,6 +21,7 @@ Developers should consult the git commit log or GitHub issue tracker. * `Feature Wishlist on GitHub `_ +* |feature| Add ``ZREPL_DESTROY_MAX_BATCH_SIZE`` env var (default 0=unlimited). * |break| |feature| convert Prometheus metric ``zrepl_version_daemon`` to ``zrepl_start_time`` metric * The metric still reports the zrepl version in a label. @@ -275,7 +276,7 @@ Changes * |feature| Proper timeout handling for the :ref:`SSH transport ` * |break| Requires Go 1.11 or later. - + * |break| |break_config|: mappings are no longer supported * Receiving sides (``pull`` and ``sink`` job) specify a single ``root_fs``. diff --git a/zfs/versions_destroy.go b/zfs/versions_destroy.go index efb8bd5..d65689d 100644 --- a/zfs/versions_destroy.go +++ b/zfs/versions_destroy.go @@ -115,9 +115,10 @@ func buildBatches(reqs []*DestroySnapOp) [][]*DestroySnapOp { // group by fs var perFS [][]*DestroySnapOp consumed := 0 + maxBatchSize := envconst.Int("ZREPL_DESTROY_MAX_BATCH_SIZE", 0) for consumed < len(sorted) { batchConsumedUntil := consumed - for ; batchConsumedUntil < len(sorted) && sorted[batchConsumedUntil].Filesystem == sorted[consumed].Filesystem; batchConsumedUntil++ { + for ; batchConsumedUntil < len(sorted) && (maxBatchSize < 1 || batchConsumedUntil-consumed < maxBatchSize) && sorted[batchConsumedUntil].Filesystem == sorted[consumed].Filesystem; batchConsumedUntil++ { } perFS = append(perFS, sorted[consumed:batchConsumedUntil]) consumed = batchConsumedUntil