Content addressable storage system for packages.
Issues: https://github.com/wrengr/stm-chans/issues/1
Development Notes: Upstream Failure Test Cases:
We need to consider how requests that happen in parallel will hit the cache while the first request is still downloading the cache. This needs to be done by using a queue of readers and writers that have locks, where these locks are stored in the multi keyed database. We will need to consider using a locking manager such as etcd, zookeeper or software transactional memory.
We might also need to consider the actor model in implementation. See the following resources:
https://en.wikipedia.org/wiki/Distributed_lock_manager
https://github.com/dmbarbour/haskell-vcache GitHub dmbarbour/haskell-vcache haskell-vcache - large, persistent, memcached values and structure sharing for Haskell
zookeeper vs etcd
https://github.com/jepst/distributed-process-global GitHub jepst/distributed-process-global distributed-process-global - Distributed locks, RPC, and global registration for Cloud Haskell
http://book.realworldhaskell.org/read/software-transactional-memory.html
http://haskell-distributed.github.io/
http://adit.io/posts/2013-05-15-Locks,-Actors,-And-STM-In-Pictures.html adit.io Locks, Actors, And STM In Pictures - adit.io Aditya Bhargava's personal blog.
http://stackoverflow.com/questions/17721243/haskell-actor-based-mutability stackoverflow.com Haskell - Actor based mutability I'm working on a haskell network application and I use the actor pattern to manage multithreading. One thing I came across is how to store for example a set of client sockets/handles. Which of course
https://mnot.github.io/I-D/httpbis-retry/ mnot.github.io Retrying HTTP Requests HTTP allows requests to be automatically retried under certain circumstances. This draft explores how this is implemented, requirements for similar functionality from other parts of the stack, and potential future improvements.