packages feed

multipool 0.1.0.1 → 0.2.0.0

raw patch · 2 files changed

+28/−17 lines, 2 files

Files

multipool.cabal view
@@ -1,11 +1,13 @@--- This file has been generated from package.yaml by hpack version 0.28.2.+cabal-version: 1.12++-- This file has been generated from package.yaml by hpack version 0.31.1. -- -- see: https://github.com/sol/hpack ----- hash: 94857348efe4280780cf43aafdfa4d309b7f052c478231a8894f01882519533b+-- hash: 038273645193a39608f132b11aa88c25325bba2abb8d3f74b86f4a90a376e90c  name:           multipool-version:        0.1.0.1+version:        0.2.0.0 synopsis:       Generalized system for reading and writing to distributed systems that have primary/replica topologies. description:    Please see the README on GitHub at <https://github.com/iand675/multipool#readme> category:       Database@@ -17,10 +19,9 @@ license:        BSD3 license-file:   LICENSE build-type:     Simple-cabal-version:  >= 1.10 extra-source-files:-    ChangeLog.md     README.md+    ChangeLog.md  source-repository head   type: git
src/Data/MultiPool.hs view
@@ -43,38 +43,48 @@ instance (Show (InstanceDoesNotExist backend), Typeable backend) => Exception (InstanceDoesNotExist backend)  class Monad m => MultiPoolBackend m backend where-  type Masters backend :: *-  type Masters backend = Pool (MasterConnection backend)+  type Primaries backend :: *+  type Primaries backend = Pool (PrimaryConnection backend)   type Replicas backend :: *   type Replicas backend = HashMap (ReplicaIdentifier backend) (Pool (ReplicaConnection backend)) -  type MasterConnection backend :: *+  type LocalPrimary backend :: *+  type LocalPrimary backend = LocalPool (PrimaryConnection backend)+  type LocalReplica backend :: *+  type LocalReplica backend = LocalPool (ReplicaConnection backend)++  type PrimaryConnection backend :: *   type ReplicaConnection backend :: * -  type MasterIdentifier backend :: *-  type MasterIdentifier backend = ()+  type PrimaryIdentifier backend :: *+  type PrimaryIdentifier backend = ()   type ReplicaIdentifier backend :: *   type ReplicaIdentifier backend = InstanceName backend -  runWriteAny :: MultiPool backend -> ReaderT (MasterConnection backend) m a -> m a-  runWrite :: MultiPool backend -> MasterIdentifier backend -> ReaderT (MasterConnection backend) m a -> m a+  runWriteAny :: MultiPool backend -> ReaderT (PrimaryConnection backend) m a -> m a+  runWrite :: MultiPool backend -> PrimaryIdentifier backend -> ReaderT (PrimaryConnection backend) m a -> m a -  runReadMaster :: MultiPool backend -> MasterIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a-  runReadAnyMaster :: MultiPool backend -> ReaderT (ReplicaConnection backend) m a -> m a+  runReadPrimary :: MultiPool backend -> PrimaryIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a+  runReadAnyPrimary :: MultiPool backend -> ReaderT (ReplicaConnection backend) m a -> m a   runReadAny :: MultiPool backend -> ReaderT (ReplicaConnection backend) m a -> m a   runRead :: MultiPool backend -> ReplicaIdentifier backend -> ReaderT (ReplicaConnection backend) m a -> m a +  takePrimary :: MultiPool backend -> PrimaryIdentifier backend -> m (PrimaryConnection backend, LocalPrimary backend)+  putPrimary :: MultiPool backend -> LocalPrimary backend -> PrimaryConnection backend -> m () +  takeReplica :: MultiPool backend -> ReplicaIdentifier backend -> m (ReplicaConnection backend, LocalReplica backend)+  putReplica :: MultiPool backend -> LocalReplica backend -> ReplicaConnection backend -> m ()+ -- Invariant: MultiPool should not be modified after creation? data MultiPool backend = MultiPool-  { multiPoolMaster :: !(Masters backend)+  { multiPoolPrimary :: !(Primaries backend)   , multiPoolReplica :: !(Replicas backend)-  , multiPoolAnyMasterSelector :: MultiPool backend -> IO (MasterIdentifier backend)+  , multiPoolAnyPrimarySelector :: MultiPool backend -> IO (PrimaryIdentifier backend)   , multiPoolAnyReplicaSelector :: MultiPool backend -> IO (Maybe (ReplicaIdentifier backend))   }  forReplicas :: (MultiPoolBackend m backend, Replicas backend ~ HashMap k v) => MultiPool backend -> (k -> v -> m a) -> m [a]-forReplicas pool f = forM (HM.toList (multiPoolReplica pool)) $ \(k, v) -> f k v+forReplicas pool f = forM (HM.toList $ multiPoolReplica pool) $ \(k, v) -> f k v  roundRobin :: MonadIO m => [choice] -> m (a -> IO (Maybe choice)) roundRobin [] = return $ const $ return Nothing