grpc-etcd-client 0.1.0.1 → 0.1.1.0
raw patch · 2 files changed
+67/−18 lines, 2 filesdep ~grpc-api-etcdPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: grpc-api-etcd
API changes (from Hackage documentation)
+ Network.EtcdV3: data AcquiredLock
+ Network.EtcdV3: delete :: GrpcClient -> KeyRange -> EtcdQuery DeleteRangeResponse
+ Network.EtcdV3: fromLockResponse :: LockResponse -> AcquiredLock
+ Network.EtcdV3: instance GHC.Show.Show Network.EtcdV3.AcquiredLock
+ Network.EtcdV3: lock :: GrpcClient -> ByteString -> GrantedLease -> EtcdQuery LockResponse
+ Network.EtcdV3: unlock :: GrpcClient -> AcquiredLock -> EtcdQuery UnlockResponse
Files
- grpc-etcd-client.cabal +3/−3
- src/Network/EtcdV3.hs +64/−15
grpc-etcd-client.cabal view
@@ -2,10 +2,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 1d9f9189c8c70a4bd052ee37baeeb5aa737942e526ae686d9b645e6816af3490+-- hash: 3392648f92ab73a947ea1cebfa2c865ee727a9c4d122aca95a316bbbb2f3ea99 name: grpc-etcd-client-version: 0.1.0.1+version: 0.1.1.0 synopsis: gRPC client for etcd description: Please see the README on GitHub at <https://github.com/lucasdicioccio/etcd-grpc#readme> category: Distributed Computing@@ -38,7 +38,7 @@ base >=4.7 && <5 , bytestring , data-default-class- , grpc-api-etcd ==0.1.0.0+ , grpc-api-etcd ==0.1.0.1 , http2-client , http2-client-grpc >=0.5 && <0.6 , lens
src/Network/EtcdV3.hs view
@@ -17,11 +17,15 @@ , keepAlive -- * Writing. , put+ , delete+ -- * Locking.+ , AcquiredLock+ , fromLockResponse+ , lock+ , unlock -- * re-exports , def , module Control.Lens- , module EtcdPB- , module EtcdRPC ) where import Control.Lens@@ -33,8 +37,10 @@ import Network.GRPC.Client import Network.GRPC.Client.Helpers import Network.Socket (HostName, PortNumber)-import Proto.Etcd.Etcdserver.Etcdserverpb.Rpc as EtcdRPC-import Proto.Etcd.Etcdserver.Etcdserverpb.Rpc_Fields as EtcdPB+import qualified Proto.Etcd.Etcdserver.Etcdserverpb.Rpc as EtcdRPC+import qualified Proto.Etcd.Etcdserver.Etcdserverpb.Rpc_Fields as EtcdPB+import qualified Proto.Etcd.Etcdserver.Api.V3lock.V3lockpb.V3lock as LockRPC+import qualified Proto.Etcd.Etcdserver.Api.V3lock.V3lockpb.V3lock_Fields as LockPB -- | EtcdClient configuration. etcdClientConfigSimple :: HostName -> PortNumber -> UseTlsOrNot -> GrpcClientConfig@@ -67,9 +73,9 @@ -- ^ Initialized gRPC client. -> KeyRange -- ^ Looked-up range.- -> EtcdQuery RangeResponse+ -> EtcdQuery EtcdRPC.RangeResponse range grpc r = preview unaryOutput <$>- rawUnary (RPC :: RPC KV "range") grpc (def & key .~ k0 & rangeEnd .~ kend)+ rawUnary (RPC :: RPC EtcdRPC.KV "range") grpc (def & EtcdPB.key .~ k0 & EtcdPB.rangeEnd .~ kend) where (k0, kend) = rangePairForRangeQuery r @@ -84,8 +90,8 @@ -- documentation to understand what you will miss out (e.g., whether the list -- is complete or not). rangeResponsePairs- :: Getting (Endo [(ByteString, ByteString)]) RangeResponse (ByteString, ByteString)-rangeResponsePairs = kvs . traverse . to (\x -> (x ^. key, x ^. value))+ :: Getting (Endo [(ByteString, ByteString)]) EtcdRPC.RangeResponse (ByteString, ByteString)+rangeResponsePairs = EtcdPB.kvs . traverse . to (\x -> (x ^. EtcdPB.key, x ^. EtcdPB.value)) -- | Internal helper for turning a 'KeyRange' into the start/end queries Etcd -- 'range' RPC needs.@@ -103,9 +109,9 @@ -- ^ Initialized gRPC client. -> Int64 -- ^ TTL for the lease.- -> EtcdQuery LeaseGrantResponse+ -> EtcdQuery EtcdRPC.LeaseGrantResponse grantLease grpc seconds =- preview unaryOutput <$> rawUnary (RPC :: RPC Lease "leaseGrant") grpc (def & ttl .~ seconds)+ preview unaryOutput <$> rawUnary (RPC :: RPC EtcdRPC.Lease "leaseGrant") grpc (def & EtcdPB.ttl .~ seconds) -- | Opaque lease result. --@@ -116,7 +122,7 @@ show (GrantedLease n) = "(lease #" <> show n <> ")" -- | Constructor for 'GrantedLease'.-fromLeaseGrantResponse :: LeaseGrantResponse -> GrantedLease+fromLeaseGrantResponse :: EtcdRPC.LeaseGrantResponse -> GrantedLease fromLeaseGrantResponse r = GrantedLease $ r ^. EtcdPB.id -- | Keep a lease alive.@@ -125,9 +131,9 @@ -- ^ Initialized gRPC client. -> GrantedLease -- ^ A previously-granted lease.- -> EtcdQuery LeaseKeepAliveResponse+ -> EtcdQuery EtcdRPC.LeaseKeepAliveResponse keepAlive grpc (GrantedLease leaseID) =- preview unaryOutput <$> rawUnary (RPC :: RPC Lease "leaseKeepAlive") grpc (def & EtcdPB.id .~ leaseID)+ preview unaryOutput <$> rawUnary (RPC :: RPC EtcdRPC.Lease "leaseKeepAlive") grpc (def & EtcdPB.id .~ leaseID) -- | Put one value. put@@ -140,8 +146,51 @@ -- ^ Value. -> Maybe GrantedLease -- ^ Lease on the key.- -> EtcdQuery PutResponse+ -> EtcdQuery EtcdRPC.PutResponse put grpc k v gl =- preview unaryOutput <$> rawUnary (RPC :: RPC KV "put") grpc (def & key .~ k & value .~ v & lease .~ l)+ preview unaryOutput <$> rawUnary (RPC :: RPC EtcdRPC.KV "put") grpc (def & EtcdPB.key .~ k & EtcdPB.value .~ v & EtcdPB.lease .~ l) where l = maybe 0 _getGrantedLeaseId gl++-- | Delete a range of values.+delete+ :: GrpcClient+ -- ^ Initialized gRPC client.+ -> KeyRange+ -- ^ Deleted range.+ -> EtcdQuery EtcdRPC.DeleteRangeResponse+delete grpc r = preview unaryOutput <$>+ rawUnary (RPC :: RPC EtcdRPC.KV "deleteRange") grpc (def & EtcdPB.key .~ k0 & EtcdPB.rangeEnd .~ kend)+ where+ (k0, kend) = rangePairForRangeQuery r++-- | Opaque lock.+--+-- Show instance used for printing purposes only.+newtype AcquiredLock = AcquiredLock { _getAcquiredLock :: ByteString }++instance Show AcquiredLock where+ show (AcquiredLock n) = "(lock #" <> show n <> ")"++fromLockResponse :: LockRPC.LockResponse -> AcquiredLock+fromLockResponse l = AcquiredLock $ l ^. LockPB.key++lock+ :: GrpcClient+ -- ^ Initialized gRPC client.+ -> ByteString+ -- ^ Lock Name+ -> GrantedLease+ -- ^ Previously-granted lease that will bound the lifetime of the lock ownership.+ -> EtcdQuery LockRPC.LockResponse+lock grpc n (GrantedLease leaseID) = preview unaryOutput <$>+ rawUnary (RPC :: RPC LockRPC.Lock "lock") grpc (def & LockPB.name .~ n & LockPB.lease .~ leaseID)++unlock+ :: GrpcClient+ -- ^ Initialized gRPC client.+ -> AcquiredLock+ -- ^ Previously-acquired lock.+ -> EtcdQuery LockRPC.UnlockResponse+unlock grpc (AcquiredLock k) = preview unaryOutput <$>+ rawUnary (RPC :: RPC LockRPC.Lock "unlock") grpc (def & LockPB.key .~ k)