We have been working on a PR that introduces a framework that we call special-key-space. Special keys are keys prefixed with \xff\xff. The framework associates all these keys with their corresponding client functions. In particular, each function will be registered to a range under (\xff\xff, \xff\xff\xff). The framework will proxy calls to corresponding functions and aggregate results if cross-range read happens. (A more detailed documentation for the context here.)
This post wants to get an agreement on how this should behave across different versions.
Currently, our proposal is to obey the
API_VERSION that each client passes when initializing the client like this:
- Each range-module would be tagged with an API-version when it was introduced
- The overall framework would then ignore all modules whose API-versions are larger than the one the client set.
- Each submodule could read the API-version as well, which would allow it to behave differently depending on the API version. This would allow for a schema change
Any other ideas are welcome to discuss and any concerns should be solved before implementation.