Replies: 7 comments 17 replies
-
An intuitive way to test the compatibility is by testing if the new dataset can be loaded and read by previous binaries. But I don't know how to do that yet. To see if you guys have any thoughts on this topic. @apache/kvrocks-committers |
Beta Was this translation helpful? Give feedback.
-
As we are trying to follow the semver flavor, when we make breaking changes, it's necessary to bump major versions. This should happen during the review phase and we can pay extra attention to known risks as listed above from now on. |
Beta Was this translation helpful? Give feedback.
-
Firstly, I think the thing you mentioned is not backward compatibility, but forward compatibility, i.e. new data can still be read by old binaries. I think the most important thing is backward compatibility, i.e. old data can still be read by new binaries. And then we can care about forward compatibility, which seems less important to me than code maintainability and feature implementation. To me, if it does not hurt code maintainability, we can keep forward compatibility, and if we cannot, we can at least alleviate it by highlighting in release note and releasing patch versions for the old version. BTW, I think it is rare to rollback from 2.3.0 to 2.0.6. Users can firstly try to rollback to more close versions like 2.2.0 or 2.1.0. |
Beta Was this translation helpful? Give feedback.
-
I guess the tile is "forward-compatible"? Since it means a old-version kvrocks read latest data. RocksDB has some flags about compatible: https://github.com/facebook/rocksdb/wiki/RocksDB-Compatibility-Between-Different-Releases#format-compatibility . It gurantee the forward compatible on a major version. As for minor version, if schema change happens, we'd better add them in document, and maybe provide some flags to control them? |
Beta Was this translation helpful? Give feedback.
-
Concretely,
|
Beta Was this translation helpful? Give feedback.
-
I have an idea for handling modifications across multiple versions. We can provide an "Upgrade paths" similar to GitLab, where we only need to ensure compatibility between 2 nearly key versions, rather than between any two versions. |
Beta Was this translation helpful? Give feedback.
-
I also have a small suggestion, I think we can add a tag mark on CR, when we CR, we take the compatibility issue as a point of consideration. |
Beta Was this translation helpful? Give feedback.
-
For example, we introduced the STREAM column family in 2.2.0 and this breaks the forward compatibility due to the missing column family in the old version, so it's impossible for users to rollback if there's something wrong with the new version. Another example is the RocksDB upgrade RocksDB from 6.29.5 to 7.x in 2.3.0 which makes kXXH3 checksum the new default value for the block, and this cause 2.3.0 can't rollback to 2.0.x(its RocksDB version is 6.19.3 and kXXH3 was introduced in 6.27.0).
For those two specific cases:
But for future compatibility, I think we can add more documents to guide developers to keep the compatibility and test cases to ensure that.
Beta Was this translation helpful? Give feedback.
All reactions