On 4/16/19 12:28 PM, Gregory Szorc wrote:
On Mon, Apr 15, 2019 at 8:34 AM Augie Fackler <r...@durin42.com <mailto:r...@durin42.com>> wrote:

    Greg: ping on these? I'm aware you had some unease on this topic, and
    I'd like to figure out if we should ship this. Thanks!


I've been enjoying my holiday away from the computer. I met with Pierre-Yves and Georges yesterday and agreed to review these before the freeze...


    On Tue, Apr 09, 2019 at 12:06:00PM +0200, Pierre-Yves David wrote:
     > # HG changeset patch
     > # User Pierre-Yves David <pierre-yves.da...@octobus.net
    <mailto:pierre-yves.da...@octobus.net>>
     > # Date 1553707623 -3600
     > #      Wed Mar 27 18:27:03 2019 +0100
     > # Node ID 8ce788576265eb8b84cb697ea2e09b2246fb7b81
     > # Parent  456c37433c433ee59d321315da24eb944e495f08
     > # EXP-Topic zstd-revlog
     > # Available At https://bitbucket.org/octobus/mercurial-devel/
     > #              hg pull
    https://bitbucket.org/octobus/mercurial-devel/ -r 8ce788576265
     > compression: introduce an official `zstd-revlog` requirement
     >
     > This requirement supersedes `exp-compression-zstd`. However, we
    keep support for
     > the old requirement.
     >
     > Strictly speaking, we do not need to add a new requirement, there
    are no logic
     > change making "new" repo incompatible with mercurial client using
    a version
     > that support `exp-compression-zstd`.
     >
     > The choice to introduce a new requirement is motivated by the
    following:
     >
     > * The previous requirement was explicitly "experimental". Using
    it by default
     >   could confuse users.
     >
     > * adding support for a hypothetical third compression engine will
    requires new
     >   code, and will comes with its own requirement tool.
     >
     > * We won't use it as the default for a while since I do not think
    we support
     >   zstd on all platform. I can imagine we'll gain another
    (unrelated but on my
     >   default) requirement by the time we turn this zstd by default.


So, the reason why I named things "compression-<format>" was so we could have a per-compressor requirement that could potentially allow *anything* to use that compressor. For example, "compression-zstd" could allow random on-disk files to be compressed with zstd.

Of course, *any* time you make a BC change to how the repository is read from the filesystem, you need a new requirement, otherwise old clients may attempt to open the repo and get confused or cause corruption. So even if we have an e.g. "compression-zstd" requirement, we would still need additional requirements to denote when zstd support is added to individual components. e.g. we'd need a dedicated requirement for "zstd in revlogs."

I think I'm OK with the approach in this patch.

     >
     > diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
     > --- a/mercurial/localrepo.py
     > +++ b/mercurial/localrepo.py
     > @@ -645,6 +645,8 @@ def gathersupportedrequirements(ui):
     >          engine = util.compengines[name]
     >          if engine.revlogheader():
     >              supported.add(b'exp-compression-%s' % name)
     > +            if engine.name <http://engine.name>() == 'zstd':
     > +                supported.add(b'revlog-compression-zstd')


I'm still not a fan of special casing zstd: there should be something on the compression engine API doing this. But I'm willing to look the other way for now because doing it as part of the compression engine API means stabilizing the "exp-compression-<format>" bit and I don't want to do that just yet.

There is also an existing bug where we fail to check engine.available(). This will result in Mercurial thinking it can open zstd repositories and then failing when it tries to use zstd when it isn't available. (Compression engines are always present/registered but they may not be available at run-time due to missing dependencies.)

Could you please send a patch (either standalone or a v4 of this one) that adds a check for engine.available() and skips engines that aren't usable?

I am on it. It looks like only one line needs to be updated. I am sending a V4 with this extra patch + update to the last patch.

--
Pierre-Yves David
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to