freckle-app 1.9.1.0 → 1.9.1.1
raw patch · 4 files changed
+47/−19 lines, 4 files
Files
- CHANGELOG.md +5/−1
- freckle-app.cabal +1/−1
- library/Freckle/App/Kafka.hs +40/−16
- package.yaml +1/−1
CHANGELOG.md view
@@ -1,4 +1,8 @@-## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.0...main)+## [_Unreleased_](https://github.com/freckle/freckle-app/compare/v1.9.1.1...main)++## [v1.9.1.1](https://github.com/freckle/freckle-app/compare/v1.9.1.0...v1.9.1.1)++- Add `KafkaProducerPoolConfig` for controlling Kafka producer pool parameters ## [v1.9.1.0](https://github.com/freckle/freckle-app/compare/v1.9.0.3...v1.9.1.0)
freckle-app.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.18 name: freckle-app-version: 1.9.1.0+version: 1.9.1.1 license: MIT license-file: LICENSE maintainer: Freckle Education
library/Freckle/App/Kafka.hs view
@@ -1,7 +1,10 @@+{-# LANGUAGE ApplicativeDo #-} {-# LANGUAGE NamedFieldPuns #-} module Freckle.App.Kafka ( envKafkaBrokerAddresses+ , KafkaProducerPoolConfig (..)+ , envKafkaProducerPoolConfig , KafkaProducerPool (..) , HasKafkaProducerPool (..) , createKafkaProducerPool@@ -40,37 +43,58 @@ | x /= "" -> Right $ BrokerAddress <$> xs _ -> Left "Broker Address cannot be empty" -data KafkaProducerPool- = NullKafkaProducerPool- | KafkaProducerPool (Pool KafkaProducer)--class HasKafkaProducerPool env where- kafkaProducerPoolL :: Lens' env KafkaProducerPool--instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where- kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL--createKafkaProducerPool- :: NonEmpty BrokerAddress- -> Int+data KafkaProducerPoolConfig = KafkaProducerPoolConfig+ { kafkaProducerPoolConfigStripes :: Int -- ^ The number of stripes (distinct sub-pools) to maintain. -- The smallest acceptable value is 1.- -> NominalDiffTime+ , kafkaProducerPoolConfigIdleTimeout :: NominalDiffTime -- ^ Amount of time for which an unused resource is kept open. -- The smallest acceptable value is 0.5 seconds. -- -- The elapsed time before destroying a resource may be a little -- longer than requested, as the reaper thread wakes at 1-second -- intervals.- -> Int+ , kafkaProducerPoolConfigSize :: Int -- ^ Maximum number of resources to keep open per stripe. The -- smallest acceptable value is 1. -- -- Requests for resources will block if this limit is reached on a -- single stripe, even if other stripes have idle resources -- available.+ }+ deriving stock (Show)++-- | Same defaults as 'Database.Persist.Sql.ConnectionPoolConfig'+defaultKafkaProducerPoolConfig :: KafkaProducerPoolConfig+defaultKafkaProducerPoolConfig = KafkaProducerPoolConfig 1 600 10++envKafkaProducerPoolConfig+ :: Env.Parser Env.Error KafkaProducerPoolConfig+envKafkaProducerPoolConfig = do+ poolSize <- Env.var Env.auto "KAFKA_PRODUCER_POOL_SIZE" $ Env.def 10+ pure $ defaultKafkaProducerPoolConfig {kafkaProducerPoolConfigSize = poolSize}++data KafkaProducerPool+ = NullKafkaProducerPool+ | KafkaProducerPool (Pool KafkaProducer)++class HasKafkaProducerPool env where+ kafkaProducerPoolL :: Lens' env KafkaProducerPool++instance HasKafkaProducerPool site => HasKafkaProducerPool (HandlerData child site) where+ kafkaProducerPoolL = envL . siteL . kafkaProducerPoolL++createKafkaProducerPool+ :: NonEmpty BrokerAddress+ -> KafkaProducerPoolConfig -> IO (Pool KafkaProducer)-createKafkaProducerPool addresses = Pool.createPool mkProducer closeProducer+createKafkaProducerPool addresses KafkaProducerPoolConfig {..} =+ Pool.createPool+ mkProducer+ closeProducer+ kafkaProducerPoolConfigStripes+ kafkaProducerPoolConfigIdleTimeout+ kafkaProducerPoolConfigSize where mkProducer = either throw pure =<< newProducer (brokersList $ toList addresses)
package.yaml view
@@ -1,5 +1,5 @@ name: freckle-app-version: 1.9.1.0+version: 1.9.1.1 maintainer: Freckle Education category: Utils github: freckle/freckle-app