Hi - I'm working on a system where we'd like to be able to add a node 'on-the-fly' as it were, via a GUI interaction. The intent is to link 2 instances of a Cassandra based application together, into what we're calling a 'domain'. Each separate system is made aware of the others like it, and we can locate and add another into the domain via the GUI. What we need to do then is to have the Cassandra DBs join together into the ring, and coexist from that point on. What this means is that we need to add the other Cass instance into the ring, then update its replication factor, and perform a nodetool repair.
My question is, is anyone aware of a best practice to achieve this? The application has the means to call its own shell scripts which we have secured - but the problem we're encountering is that the process of updating the replication factor and then the subsequent nodetool repair commands is not an immediate process, and it takes time before the UI starts to see the appropriate data (because it is taking time for the data to then propogate around the ring).
Our app is EXT-JS on the front, PHP in the middle, using PHPCassa's thrift client, and then of course our Cassandra DB.
In essence, here is the desired process:
1) User logs into the UI on system A, and chooses to add a new system B to the domain - UI is put in state of 'In Process'
2) Upon this add, scripts are run server-side to add the selected system's Cass node to the ring
3) Once the node is in the ring, the scripts call cassandra-cli and issue a replication factor update - on each node
a) After replication factor is updated on a node, run nodetool repair command
4) Once R-factor and nodetool repairs are complete on all nodes, UI receives notification of completion, and is again useable
Is this something anyone here has been able to achieve? If so, what was your solution? Or is this process better suited for a scheduled overnight procedure?