Configuration changes within the *same* version, such as going from
NAKACK to NAKACK2, would also have to go through the mechanism you
suggested.
Handling class loader issues alone will be tricky...
I thought about a simple&stupid approach: at the end of the day, all we
care about is the data, in-memory and on-disk (cacheloaders). So how
about the following:
- Cluster A is running on version 4
- Start a cluster B, running on version 5
- Slowly transfer the state of cluster A into B
- When done, switch the clients over to B. If the clients run inside the
same JVM, activate them in cluster B
- Shut down cluster A
The state transfer from A to B would be similar to the non-blocking
state transfer:
- Perhaps insert a new interceptor (at runtime) into all nodes in A
- Copy all modification in A to a queue
- Iterate over the data and send it to cluster B. This could potentially
be done via Hot Rod.
- When done, send the queued data to B and clear the queue (short period
of synchrionization here)
We would have to make sure that state on-disk (e.g. persisted via a
cacheloader to a DB) would also get transferred. Hmm, maybe not, if
Infinispan can handle data stored in version A from version B...
WDYT ?
--
Bela Ban, JGroups lead (
http://www.jgroups.org)