title: Cassandra Transaction with ZooKeeper - Does this work?
body: <p>I am trying to implement a transaction system for Cassandra with the help of ZooKeeper. Since I don't think I have enough experience in database implementation, I would like to know if my idea would work in principle, or is there any major flaw.</p>
  
  <p>Here is the high level description of the steps:</p>
  
  <ol>
  <li>identify all the rows(keys) and columns to be edited. Let the keys be [K0..Kn]</li>
  <li>apply write lock on all the rows involved (locks are in-memory Zookeeper implementation)</li>
  <li>copy the old values to separate locations in Cassandra which are uniquely identified by key: [K'0..K'n]</li>
  <li>store [K'0..K'n] and the mapping of them to [K0..Kn] in ZooKeeper using persistent mode</li>
  <li>go ahead apply the update to the data</li>
  <li>delete the entries in ZooKeeper</li>
  <li>unlock the rows</li>
  <li>delete the entries of [K'0..K'n] lazily on a maintenance thread (cassandra deletion uses timestamp, so K'0..K'n can be reused for another transaction with a newer time stamp)</li>
  </ol>
  
  <p>Justification:</p>
  
  <ol>
  <li>if the transaction failed on step 1-4, no change is applied, I can abort the transaction and delete whatever is stored in zookeeper and backup-ed in cassandra, if any.</li>
  <li>if the transaction failed on step 5, the information saved on step 3 is used to rollback the any changes.</li>
  <li>if the server happen to be failed/crashed/stolen by cleaning man, upon restart before serving any request, I check if there is any keys persisted in the zookeeper from step 4, if so, i will use those keys to fetch backed up data stored by step 3, and put those data to where they were, thus roll-back any failed transactions.</li>
  </ol>
  
  <p>One of my concern is what would happen if some of the servers are partitioned from the cluster. I have no experience in this area, does my scheme work at all? and does it work if partition happens?</p>