git.iko.soy/typeable/katip-rollbar
on master help sign in
Simplify queue

It doesn't seem like we need to switch threads to finalize. Maybe there's some reason for it, but it's unclear what that reason is. Instead of cargo culting this part, let's try the naive approach first.

commitbe4f5e38a5d10e7881e98db2ce0255953d488ff2 authorjoneshf <jones3.hardy@gmail.com> dateMon 19 Feb 2018, 07:26 (9 years ago) parent1aee31f
1 file changed+3−21
src/Katip/Scribes/Rollbar.hs+3−21
src/Katip/Scribes/Rollbar.hs+3−21
@@ -12,7 +12,6 @@ module Katip.Scribes.Rollbar
1212
1313import Prelude hiding (error)
1414
15−import "base" Control.Concurrent.MVar (MVar, newEmptyMVar, putMVar, takeMVar)
1615import "base" Control.Monad (replicateM, when)
1716import "base" Data.Foldable (for_)
1817import "base" Data.Functor (void)
@@ -89,14 +88,13 @@ mkRollbarScribe ::
8988 IO Scribe
9089mkRollbarScribe proxy accessToken branch codeVersion manager severity verbosity = do
9190 queue <- newTBMQueueIO queueSize
92− finalize <- newEmptyMVar
93− setupWorkers proxy queue finalize manager
91+ workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
9492 let liPush item = when (permitItem severity item) $
9593 atomically (writeTBMQueue queue $ rollbarItem' item)
9694 rollbarItem' item = rollbarItem proxy accessToken branch codeVersion verbosity item
9795 scribeFinalizer = do
98− putMVar finalize ()
99− takeMVar finalize
96+ atomically (closeTBMQueue queue)
97+ for_ workers waitCatch
10098 pure Scribe { liPush, scribeFinalizer }
10199
102100rollbarItem ::
@@ -141,22 +139,6 @@ rollbarItem _ accessToken branch serverCodeVersion verbosity item =
141139 value :: Value
142140 value = itemJson verbosity item
143141
144−-- | Setup the workers and wait until the finalizer is evaluated.
145−-- Then, close the queueu, wait for the workers and continue finalization.
146−setupWorkers ::
147− RemoveHeaders headers =>
148− proxy headers ->
149− TBMQueue (Item Value ("Authorization" ': headers)) ->
150− MVar () ->
151− Manager ->
152− IO ()
153−setupWorkers proxy queue finalize manager = void $ async $ do
154− workers <- replicateM workerSize (async $ mkWorker proxy manager queue)
155− takeMVar finalize
156− atomically (closeTBMQueue queue)
157− for_ workers waitCatch
158− putMVar finalize ()
159−
160142mkWorker ::
161143 (RemoveHeaders headers) =>
162144 proxy headers ->