Forward Compatibility Policy #5099
Replies: 4 comments 2 replies
-
I can see reasons for wanting either of these. I think probably a major versions-based policy is best if we can also pair it with a committed major release schedule. That way users get a predictable time-based upgrade cycle and they also know from the version string whether two release are guaranteed compatible. |
Beta Was this translation helpful? Give feedback.
-
I think there are different kinds of effort to be concerned with:
Maybe other kinds of effort as well? I wonder how much we expect to gain from a tighter policy in the second bucket. For the first bucket, I am curious how big the difference will be in practice because for a policy of full forward-compatibility it would be untenable to maintain a full matrix of possible upgrades/downgrades, and even in the limited case we won't test all forward compatibility across releases within all majors (that would also be too many), so in some sense we need to solve that problem no matter what the policy is. |
Beta Was this translation helpful? Give feedback.
-
The thing that worries me about this particular example as well as the proposal of If we have any sort of rule about what versions are readable, I'd prefer it was based on the format version, not a library version. The feature flags are meant to be a sort of versioning scheme, that help with compatibility checks. |
Beta Was this translation helpful? Give feedback.
-
This discussion does bring up a new idea for testing, which I think is worth discussing: compatibility with the format spec. For example, we could create a Python program that uses the raw protobufs to generate random datasets that are spec-compliant (but don't necessarily follow the conventions in the Rust program). Then we make sure that pylance can successfully open them and scan them. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
What policy do we want regarding forward compatibility breaks. Note: this is different from API breaks which are covered by #5056. Also see #5100 for a discussion on backwards compatibility.
Background
I'll further divide forwards compatibility breaks into two kinds:
I don't think "Flagged break" is a problem. This is always allowed and it is the reason we have feature flags.
However, unflagged breaks can be a problem for any kind of data storage solution. Users are not able to upgrade all of their software at once. In addition, users often have less control over what clients their users (our grand-users?) are using. For example, a dataset might be written with version 0.38 and read by a client using version 0.20.
So far, we have done our best to avoid forward compatibility breaks, but this has also been lightly tested, and some of these have snuck in. We would like to increase our testing to prevent these (this is not really under discussion here).
Question
How much effort do we want to make to avoid unflagged breaks? Do we want some kind of "minimum supported client" policy?
Proposals
Specific Example
A specific problem that happened recently is that we started to write the version classifier (e.g. -beta.X) in the writer version field in the dataset manifest. Old clients were not able to parse that and failed. Either we give up on this change, split the proto into two fields (writer_version and writer_version_classifier), or first fix the client and then wait X months/versions before we start writing the classifiers (I'm sure there are other approaches too).
Beta Was this translation helpful? Give feedback.
All reactions