Type: New Feature
Affects Version/s: None
Fix Version/s: None
The goal of this project is to define an interface for replication protocol and implement the interface using ZAB. This project will most likely be done outside of ZooKeeper to avoid impacting the stability of the ZooKeeper code base, but I'm opening a JIRA here to gauge interest and get feedback from ZooKeeper community.
There are 2 main motivations for this project:
1. There are many use cases that need a replication protocol like ZAB, but ZooKeeper's hierarchical data model doesn't work well. It's difficult to use ZAB without ZooKeeper with the way ZooKeeper code is currently structured.
2. It's valuable to have a common interface for replication protocol to build services on. This allows you to plug in different implementations for benchmarking and testing for correctness. This point is related to ZOOKEEPER-30.
The project is roughly broken into 4 pieces:
1. Define the interface for replication protocol. It's very important to get the interface right. I'd appreciate if you guys can help define the interface.
2. Implement the interface with single node ZAB.
3. Implement a simple reference service, something like a key-value store or a benchmark tool.
4. Implement ZAB, either from scratch or by refactoring / curving off unnecessary parts from the ZooKeeper code base.
I have some questions:
- How do things like session tracker and dynamic reconfiguration fit into this? Should they be separate optional interfaces?
- Where should this project belong to? Is it worth making this an incubator project, or should I just put the code on github? I'd like to make it easy for people from different organizations to collaborate (in terms of license grant and all) from the beginning.