* To Do list ** DONE remove the escript* stuff from machi_util.erl ** DONE Add functions to manipulate 1-chain projections - Add epoch ID = epoch number + checksum of projection! Done via compare() func. ** DONE Change all protocol ops to add epoch ID ** DONE Add projection store to each FLU. *** DONE What should the API look like? (borrow from chain mgr PoC?) Yeah, I think that's pretty complete. Steal it now, worry later. *** DONE Choose protocol & TCP port. Share with get/put? Separate? Hrm, I like the idea of having a single TCP port to talk to any single FLU. To make the protocol "easy" to hack, how about using the same basic method as append/write where there's a variable size blob. But we'll format that blob as a term_to_binary(). Then dispatch to a single func, and pattern match Erlang style in that func. *** DONE Do it. ** TODO Fix all known bugs with Chain Manager *** DONE Fix known bugs *** DONE Clean up crufty TODO comments and other obvious cruft *** TODO Re-add verification step of stable epochs, including inner projections! *** TODO Attempt to remove cruft items in flapping_i? ** TODO Finish OTP'izing the Chain Manager with FLU & proj store processes ** TODO Add gproc and get rid of registered name rendezvous *** TODO Fixes the atom table leak *** TODO Fixes the problem of having active sequencer for the same prefix on two FLUS in the same VM ** TODO Eliminate the timeout exception for the client: just {error,timeout} ret ** TODO Change all protocol ops to enforce the epoch ID ** TODO Add projection wedging logic to each FLU. - Add no-wedging state to make testing easier? ** TODO Move prototype/chain-manager code to "top" of source tree *** TODO Preserve current test code (leave as-is? tiny changes?) *** TODO Make chain manager code flexible enough to run "real world" or "sim" ** TODO Move the FLU server to gen_server behavior? ** TODO Implement real data repair, orchestrated by the chain manager