I am thinking of adding a delta rebalancer that simple compares the delta between idealstate and currentstate and generate transitions for the delta. The main difference from existing implementation is that this does not need a state machine or any constraints on the state.

Where can this be useful
One scenario where this can be useful is managing the config versions. For example we can say 


Each version can correspond to a set a config properties. If a new config is uploaded with new version, we send the transition for each node to refresh the config. The benefit of this is clients will know what is the config version the participant is running. And leader can ensure that all participants are upgraded to latest config.

We can take this a step further and allow the idealstate to be more expressive

for example the state can be composed of multiple attributes

N1: {a: aval, b:bval, c:cval}
N1: {a: aval, b:bval, c:cval}

And we can change each value independently.

N1:{a:avalnew, b:bval, c:cval}

we could then invoke the appropriate call back on the participant that a changed and once the callback is processed the current state changes.

This kind of becomes a general way to manage configuration and keep track of what config the node is using. Note this is not supposed to say every single config property but it could be used to represent high level config properties.

Thoughts/feedback? At LinkedIn, i think this will help us manage schema versions.

Kishore G