Subject: Re: [PATCH 2/2] commit-graph: fix murmur3, bump filter ver. to 2

From: Derrick Stolee <[email-masked]>
Date: Fri, 26 May 2023 09:19:41 -0400

On 5/24/2023 5:26 PM, Jonathan Tan wrote:
> Junio C Hamano <[email-masked]> writes:

>> IOW, even if the version of Git is
>> capable of writing and reading v2, it does not have to use v2,
>> right?  To put it the other way around, we will have to and can keep
>> supporting data that is labeled as v1, no?
> 
> I think this is the main point - whether we want to continue supporting
> data labeled as v1. I personally think that we should migrate to v2
> as quickly as possible. But if the consensus is that we should support
> both, at least for a few releases of Git, I'll go with that.

I agree on migrating quickly as possible, within basic safety guidelines.

Shipping a Git change that suddenly is unable to use on-disk data that
it has previously relied upon is not a safe change. And that is the
absolute minimum amount of safety required. The other side is to not
make a Git change that suddenly changes the on-disk format without a
switch to disable it.

Think about it this way: if there was a bug in the code, could we
safely roll it back? If we are immediately writing v2 filters after
the deployment, then rolling it back will cause the previous version
to not recognize those filters, leading to a delayed recovery.

I'd be willing to modify my suggested steps:

>>> 1. v2.42.0 includes writing v2 format, off by default.
>>> 2. v2.43.0 writes v2 format by default.
>>> 3. v2.44.0 no longer parses v1 format (ignored without error).

to something simpler:

 1. v2.42.0 writes v2 format by default, but can be disabled by config.
 2. v2.43.0 no longer parses or writes v1 format.

With this, we could proactively set the config value that disables the
v2 format in our production environment, then slowly re-enable that
config after the binaries have deployed. This allows us to limit the
blast radius if something goes wrong, which is really important.

Further, I'm describing an environment where we control all of the Git
versions that are interacting with the repositories. Other environments
don't have that luxury, such as typical client users.

Even the three-version plan is an accelerated deprecation plan, based
on previous examples in Git.

Thanks,
-Stolee