The fix is as follows,
1. When Creating a trasaction chain create a unique identifier for the transaction chain
using the member name and the current timestamp
2. When a transaction is created using the transaction chain pass the transaction chain id
along to the remote shard
3. If the remote shard receives a transaction with a valid transaction chain (one which is
not empty) then it creates a new transaction chain if one does not exist. If one does exist
then the Shard just creates a new transaction on the existing transaction chain.
This way if a single transaction chai was used to create transactions on multiple
different shards the a transaction chain would be created on each one of those shards.
4. When a transaction chain is closed a Close Transaction Chain message is broadcast to all
the Shards in the system. If those shards had a transaction chain with the specified id
then the transaction chain would be closed. The sender does not care about receiving a
response
5. When a state change occurs on a Shard we check if the Shard is not a leader. If that is
the case we automatically close all existing transaction chains on that shard and clear
the map which tracks the transaction chains for that shard
Change-Id: I6bcfb9de3d0ec666e4152afb69c702dda4f38171
Signed-off-by: Moiz Raja <moraja@cisco.com>