[PATCH 8 of 8 "] upgrade: support upgrade to/from zstd storage (issue6088)

Gregory Szorc gregory.szorc at gmail.com
Tue Apr 2 18:30:35 UTC 2019


On Sun, Mar 31, 2019 at 8:39 AM Pierre-Yves David <
pierre-yves.david at ens-lyon.org> wrote:

> # HG changeset patch
> # User Boris Feld <boris.feld at octobus.net>
> # Date 1549032662 -3600
> #      Fri Feb 01 15:51:02 2019 +0100
> # Node ID 7acbe373397d9fb6dfb176b1a69b4ee5f2bf18ba
> # Parent  2cfe9983fa92313d58f0420ec62f2341a810343e
> # EXP-Topic zstd-revlog
> # Available At https://bitbucket.org/octobus/mercurial-devel/
> #              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r
> 7acbe373397d
> upgrade: support upgrade to/from zstd storage (issue6088)
>
> Now that we have an official config option for a shiny format improvement,
> we
> better make it simple to migrate to/from it.
>
> diff --git a/mercurial/upgrade.py b/mercurial/upgrade.py
> --- a/mercurial/upgrade.py
> +++ b/mercurial/upgrade.py
> @@ -80,6 +80,8 @@ def supporteddestrequirements(repo):
>          'revlogv1',
>          'store',
>          localrepo.SPARSEREVLOG_REQUIREMENT,
> +        'exp-compression-zstd',
> +        'zstd-revlog',
>      }
>
>  def allowednewrequirements(repo):
> @@ -97,6 +99,8 @@ def allowednewrequirements(repo):
>          'fncache',
>          'generaldelta',
>          localrepo.SPARSEREVLOG_REQUIREMENT,
> +        'exp-compression-zstd',
> +        'zstd-revlog',
>      }
>

We shouldn't be adding zstd related requirements to static sets because
zstd support may not be available. We want to make their addition
conditional on zstd support being available.


>
>  def preservedrequirements(repo):
> diff --git a/tests/test-upgrade-repo.t b/tests/test-upgrade-repo.t
> --- a/tests/test-upgrade-repo.t
> +++ b/tests/test-upgrade-repo.t
> @@ -854,4 +854,108 @@ Check that we can remove the sparse-revl
>    generaldelta
>    revlogv1
>    store
> +
> +Check upgrading to a zstd revlog
> +--------------------------------
> +
> +upgrade
> +
>

This needs protected behind an `#if zstd`.


> +  $ hg --config format.revlog-compression=zstd debugupgraderepo --run
> >/dev/null
> +  copy of old repository backed up at
> $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
> +  the old repository will not be deleted; remove it to free up disk space
> once the upgraded repository is verified
> +  $ hg debugformat -v
> +  format-variant    repo config default
> +  fncache:           yes    yes     yes
> +  dotencode:         yes    yes     yes
> +  generaldelta:      yes    yes     yes
> +  sparserevlog:      yes    yes     yes
> +  plain-cl-delta:    yes    yes     yes
> +  compression:       zstd   zlib    zlib
> +  compression-level: default default default
> +  $ cat .hg/requires
> +  dotencode
> +  fncache
> +  generaldelta
> +  revlogv1
> +  sparserevlog
> +  store
> +  zstd-revlog
> +
> +downgrade
> +
> +  $ hg debugupgraderepo --run
> +  abort: cannot upgrade repository; requirement would be removed:
> zstd-revlog
> +  [255]
> +  $ hg debugformat -v
> +  format-variant    repo config default
> +  fncache:           yes    yes     yes
> +  dotencode:         yes    yes     yes
> +  generaldelta:      yes    yes     yes
> +  sparserevlog:      yes    yes     yes
> +  plain-cl-delta:    yes    yes     yes
> +  compression:       zstd   zlib    zlib
> +  compression-level: default default default
> +  $ cat .hg/requires
> +  dotencode
> +  fncache
> +  generaldelta
> +  revlogv1
> +  sparserevlog
> +  store
> +  zstd-revlog
> +
> +upgrade from hgrc
> +
> +  $ cat >> .hg/hgrc << EOF
> +  > [format]
> +  > revlog-compression=zstd
> +  > EOF
> +  $ hg debugupgraderepo --run
> +  upgrade will perform the following actions:
> +
> +  requirements
> +     preserved: dotencode, fncache, generaldelta, revlogv1, sparserevlog,
> store, zstd-revlog
> +
> +  beginning upgrade...
> +  repository locked and read-only
> +  creating temporary repository to stage migrated data:
> $TESTTMP/sparserevlogrepo/.hg/upgrade.* (glob)
> +  (it is safe to interrupt this process any time before data migration
> completes)
> +  migrating 3 total revisions (1 in filelogs, 1 in manifests, 1 in
> changelog)
> +  migrating 297 bytes in store; 103 bytes tracked data
> +  migrating 1 filelogs containing 1 revisions (64 bytes in store; 0 bytes
> tracked data)
> +  finished migrating 1 filelog revisions across 1 filelogs; change in
> size: 0 bytes
> +  migrating 1 manifests containing 1 revisions (110 bytes in store; 45
> bytes tracked data)
> +  finished migrating 1 manifest revisions across 1 manifests; change in
> size: 0 bytes
> +  migrating changelog containing 1 revisions (123 bytes in store; 58
> bytes tracked data)
> +  finished migrating 1 changelog revisions; change in size: 0 bytes
> +  finished migrating 3 total revisions; total change in store size: 0
> bytes
> +  copying phaseroots
> +  data fully migrated to temporary repository
> +  marking source repository as being upgraded; clients will be unable to
> read from repository
> +  starting in-place swap of repository data
> +  replaced files will be backed up at
> $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
> +  replacing store...
> +  store replacement complete; repository was inconsistent for 0.0s
> +  finalizing requirements file and making repository readable again
> +  removing temporary repository $TESTTMP/sparserevlogrepo/.hg/upgrade.*
> (glob)
> +  copy of old repository backed up at
> $TESTTMP/sparserevlogrepo/.hg/upgradebackup.* (glob)
> +  the old repository will not be deleted; remove it to free up disk space
> once the upgraded repository is verified
> +  $ hg debugformat -v
> +  format-variant    repo config default
> +  fncache:           yes    yes     yes
> +  dotencode:         yes    yes     yes
> +  generaldelta:      yes    yes     yes
> +  sparserevlog:      yes    yes     yes
> +  plain-cl-delta:    yes    yes     yes
> +  compression:       zstd   zstd    zlib
> +  compression-level: default default default
> +  $ cat .hg/requires
> +  dotencode
> +  fncache
> +  generaldelta
> +  revlogv1
> +  sparserevlog
> +  store
> +  zstd-revlog
> +
>    $ cd ..
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.mercurial-scm.org/pipermail/mercurial-devel/attachments/20190402/1a7e63e7/attachment.html>


More information about the Mercurial-devel mailing list