on master help sign in
Merge pull request #750 from kazu-yamamoto/time-manager

Time manager

commit5af14729ecdde699ec319bba65d265269677dd1f authorKazu Yamamoto <kazu@iij.ad.jp> dateTue 4 Jun 2019, 10:21 (7 years ago) parente15f41b93b97fd
14 files changed+80−42
time-manager/LICENSE+20 warp/Network/Wai/Handler/Warp/Timeout.hs → time-manager/System/TimeManager.hs+2−3 time-manager/time-manager.cabal+19 warp/Network/Wai/Handler/Warp.hs+1−1 warp/Network/Wai/Handler/Warp/HTTP2/Manager.hs+1−1 warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+1−1 warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+2−3 warp/Network/Wai/Handler/Warp/Internal.hs+3−2 warp/Network/Wai/Handler/Warp/Request.hs+1−1 warp/Network/Wai/Handler/Warp/Response.hs+1−1 warp/Network/Wai/Handler/Warp/Run.hs+1−1 warp/Network/Wai/Handler/Warp/Settings.hs+1−1 warp/Network/Wai/Handler/Warp/Types.hs+1−1 warp/warp.cabal+26−26
time-manager/LICENSEnew file+20
@@ -0,0 +1,20 @@
1+Copyright (c) 2012 Michael Snoyman, http://www.yesodweb.com/
2+
3+Permission is hereby granted, free of charge, to any person obtaining
4+a copy of this software and associated documentation files (the
5+"Software"), to deal in the Software without restriction, including
6+without limitation the rights to use, copy, modify, merge, publish,
7+distribute, sublicense, and/or sell copies of the Software, and to
8+permit persons to whom the Software is furnished to do so, subject to
9+the following conditions:
10+
11+The above copyright notice and this permission notice shall be
12+included in all copies or substantial portions of the Software.
13+
14+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
warp/Network/Wai/Handler/Warp/Timeout.hs → time-manager/System/TimeManager.hsrenamed+2−3
@@ -1,7 +1,6 @@
1−{-# LANGUAGE CPP #-}
21{-# LANGUAGE DeriveDataTypeable #-}
32
4−module Network.Wai.Handler.Warp.Timeout (
3+module System.TimeManager (
54 -- ** Types
65 Manager
76 , TimeoutAction
@@ -115,7 +114,7 @@ instance E.Exception TimeoutThread where
115114 toException = E.asyncExceptionToException
116115 fromException = E.asyncExceptionFromException
117116instance Show TimeoutThread where
118− show TimeoutThread = "Thread killed by Warp's timeout reaper"
117+ show TimeoutThread = "Thread killed by timeout manager"
119118
120119----------------------------------------------------------------
121120
time-manager/time-manager.cabalnew file+19
@@ -0,0 +1,19 @@
1+Name: time-manager
2+Version: 0.0.0
3+Synopsis: Scalable timer
4+License: MIT
5+License-file: LICENSE
6+Author: Michael Snoyman and Kazu Yamamoto
7+Maintainer: kazu@iij.ad.jp
8+Homepage: http://github.com/yesodweb/wai
9+Category: System
10+Build-Type: Simple
11+Cabal-Version: >=1.8
12+Stability: Stable
13+Description: Scalable timer functions provided by a timer manager.
14+
15+Library
16+ Build-Depends: base >= 4.8 && < 5
17+ , auto-update
18+ Exposed-modules: System.TimeManager
19+ Ghc-Options: -Wall
warp/Network/Wai/Handler/Warp.hs+1−1
@@ -124,6 +124,7 @@ import qualified Data.Vault.Lazy as Vault
124124import qualified Network.HTTP.Types as H
125125import Network.Socket (SockAddr)
126126import Network.Wai (Request, Response, vault)
127+import System.TimeManager
127128
128129import Network.Wai.Handler.Warp.FileInfoCache
129130import Network.Wai.Handler.Warp.HTTP2.Request (getHTTP2Data, setHTTP2Data, modifyHTTP2Data)
@@ -133,7 +134,6 @@ import Network.Wai.Handler.Warp.Request
133134import Network.Wai.Handler.Warp.Response (warpVersion)
134135import Network.Wai.Handler.Warp.Run
135136import Network.Wai.Handler.Warp.Settings
136−import Network.Wai.Handler.Warp.Timeout
137137import Network.Wai.Handler.Warp.Types hiding (getFileInfo)
138138import Network.Wai.Handler.Warp.WithApplication
139139
warp/Network/Wai/Handler/Warp/HTTP2/Manager.hs+1−1
@@ -19,10 +19,10 @@ import Data.Foldable
1919import Data.IORef
2020import Data.Set (Set)
2121import qualified Data.Set as Set
22+import qualified System.TimeManager as T
2223
2324import Network.Wai.Handler.Warp.Imports
2425import Network.Wai.Handler.Warp.Settings
25−import qualified Network.Wai.Handler.Warp.Timeout as T
2626
2727----------------------------------------------------------------
2828
warp/Network/Wai/Handler/Warp/HTTP2/Sender.hs+1−1
@@ -22,7 +22,7 @@ import qualified System.IO as IO
2222#else
2323import Network.Wai.Handler.Warp.FdCache
2424import Network.Wai.Handler.Warp.SendFile (positionRead)
25−import qualified Network.Wai.Handler.Warp.Timeout as T
25+import qualified System.TimeManager as T
2626#endif
2727
2828import Network.Wai.Handler.Warp.Buffer
warp/Network/Wai/Handler/Warp/HTTP2/Worker.hs+2−3
@@ -23,8 +23,8 @@ import qualified Network.HTTP.Types as H
2323import Network.HTTP2
2424import Network.HTTP2.Priority
2525import Network.Wai
26−import qualified Network.Wai.Handler.Warp.Timeout as Timeout
2726import Network.Wai.Internal (Response(..), ResponseReceived(..), ResponseReceived(..), getRequestBodyChunk)
27+import qualified System.TimeManager as T
2828
2929import Network.Wai.Handler.Warp.FileInfoCache
3030import Network.Wai.Handler.Warp.HTTP2.EncodeFrame
@@ -36,7 +36,6 @@ import Network.Wai.Handler.Warp.Imports hiding (insert)
3636import Network.Wai.Handler.Warp.Request (pauseTimeoutKey)
3737import qualified Network.Wai.Handler.Warp.Response as R
3838import qualified Network.Wai.Handler.Warp.Settings as S
39−import qualified Network.Wai.Handler.Warp.Timeout as T
4039import Network.Wai.Handler.Warp.Types
4140
4241----------------------------------------------------------------
@@ -253,7 +252,7 @@ worker ctx@Context{inputQ,controlQ} set app responder tm = do
253252 bs <- body
254253 T.resume th
255254 return bs
256− !vaultValue = Vault.insert pauseTimeoutKey (Timeout.pause th) $ vault req
255+ !vaultValue = Vault.insert pauseTimeoutKey (T.pause th) $ vault req
257256 !req' = req { vault = vaultValue, requestBody = body' }
258257 mr <- E.try $ app req' $ responder ii' reqvt tcont strm req'
259258 case mr of
warp/Network/Wai/Handler/Warp/Internal.hs+3−2
@@ -53,7 +53,7 @@ module Network.Wai.Handler.Warp.Internal (
5353 -- resumed as soon as we return from user code.
5454 --
5555 -- * Every time data is successfully sent to the client, the timeout is tickled.
56− , module Network.Wai.Handler.Warp.Timeout
56+ , module System.TimeManager
5757 -- * File descriptor cache
5858 , module Network.Wai.Handler.Warp.FdCache
5959 -- * File information cache
@@ -69,6 +69,8 @@ module Network.Wai.Handler.Warp.Internal (
6969 , windowsThreadBlockHack
7070 ) where
7171
72+import System.TimeManager
73+
7274import Network.Wai.Handler.Warp.Buffer
7375import Network.Wai.Handler.Warp.Date
7476import Network.Wai.Handler.Warp.FdCache
@@ -80,6 +82,5 @@ import Network.Wai.Handler.Warp.Response
8082import Network.Wai.Handler.Warp.Run
8183import Network.Wai.Handler.Warp.SendFile
8284import Network.Wai.Handler.Warp.Settings
83−import Network.Wai.Handler.Warp.Timeout
8485import Network.Wai.Handler.Warp.Types
8586import Network.Wai.Handler.Warp.Windows
warp/Network/Wai/Handler/Warp/Request.hs+1−1
@@ -24,11 +24,11 @@ import qualified Data.Vault.Lazy as Vault
2424import qualified Network.HTTP.Types as H
2525import Network.Socket (SockAddr)
2626import Network.Wai
27−import qualified Network.Wai.Handler.Warp.Timeout as Timeout
2827import Network.Wai.Handler.Warp.Types
2928import Network.Wai.Internal
3029import Prelude hiding (lines)
3130import System.IO.Unsafe (unsafePerformIO)
31+import qualified System.TimeManager as Timeout
3232
3333import Network.Wai.Handler.Warp.Conduit
3434import Network.Wai.Handler.Warp.FileInfoCache
warp/Network/Wai/Handler/Warp/Response.hs+1−1
@@ -30,6 +30,7 @@ import qualified Network.HTTP.Types.Header as H
3030import Network.Wai
3131import Network.Wai.Internal
3232import qualified Paths_warp
33+import qualified System.TimeManager as T
3334
3435import Network.Wai.Handler.Warp.Buffer (toBuilderBuffer)
3536import qualified Network.Wai.Handler.Warp.Date as D
@@ -39,7 +40,6 @@ import Network.Wai.Handler.Warp.IO (toBufIOWith)
3940import Network.Wai.Handler.Warp.Imports
4041import Network.Wai.Handler.Warp.ResponseHeader
4142import Network.Wai.Handler.Warp.Settings
42−import qualified Network.Wai.Handler.Warp.Timeout as T
4343import Network.Wai.Handler.Warp.Types
4444
4545-- $setup
warp/Network/Wai/Handler/Warp/Run.hs+1−1
@@ -25,6 +25,7 @@ import Network.Wai
2525import Network.Wai.Internal (ResponseReceived (ResponseReceived))
2626import System.Environment (lookupEnv)
2727import System.Timeout (timeout)
28+import qualified System.TimeManager as T
2829
2930import Network.Wai.Handler.Warp.Buffer
3031import Network.Wai.Handler.Warp.Counter
@@ -40,7 +41,6 @@ import Network.Wai.Handler.Warp.Request
4041import Network.Wai.Handler.Warp.Response
4142import Network.Wai.Handler.Warp.SendFile
4243import Network.Wai.Handler.Warp.Settings
43−import qualified Network.Wai.Handler.Warp.Timeout as T
4444import Network.Wai.Handler.Warp.Types
4545
4646
warp/Network/Wai/Handler/Warp/Settings.hs+1−1
@@ -21,9 +21,9 @@ import Network.Wai
2121import qualified Paths_warp
2222import System.IO (stderr)
2323import System.IO.Error (ioeGetErrorType)
24+import System.TimeManager
2425
2526import Network.Wai.Handler.Warp.Imports
26−import Network.Wai.Handler.Warp.Timeout
2727import Network.Wai.Handler.Warp.Types
2828
2929-- | Various Warp server settings. This is purposely kept as an abstract data
warp/Network/Wai/Handler/Warp/Types.hs+1−1
@@ -10,12 +10,12 @@ import Data.IORef (IORef, readIORef, writeIORef, newIORef)
1010import Data.Typeable (Typeable)
1111import Foreign.Ptr (Ptr)
1212import System.Posix.Types (Fd)
13+import qualified System.TimeManager as T
1314
1415import qualified Network.Wai.Handler.Warp.Date as D
1516import qualified Network.Wai.Handler.Warp.FdCache as F
1617import qualified Network.Wai.Handler.Warp.FileInfoCache as I
1718import Network.Wai.Handler.Warp.Imports
18−import qualified Network.Wai.Handler.Warp.Timeout as T
1919
2020----------------------------------------------------------------
2121
warp/warp.cabal+26−26
@@ -42,19 +42,20 @@ Library
4242 , case-insensitive >= 0.2
4343 , containers
4444 , ghc-prim
45+ , hashable
46+ , http-date
4547 , http-types >= 0.11
46− , iproute >= 1.3.1
4748 , http2 >= 1.6 && < 1.7
49+ , iproute >= 1.3.1
4850 , simple-sendfile >= 0.2.7 && < 0.3
49− , unix-compat >= 0.2
50− , wai >= 3.2 && < 3.3
51− , text
51+ , stm >= 2.3
5252 , streaming-commons >= 0.1.10
53+ , text
54+ , time-manager
55+ , unix-compat >= 0.2
5356 , vault >= 0.3
54− , stm >= 2.3
57+ , wai >= 3.2 && < 3.3
5558 , word8
56− , hashable
57− , http-date
5859 if impl(ghc < 8)
5960 Build-Depends: semigroups
6061 if flag(network-bytestring)
@@ -95,7 +96,6 @@ Library
9596 Network.Wai.Handler.Warp.Run
9697 Network.Wai.Handler.Warp.SendFile
9798 Network.Wai.Handler.Warp.Settings
98− Network.Wai.Handler.Warp.Timeout
9999 Network.Wai.Handler.Warp.Types
100100 Network.Wai.Handler.Warp.Windows
101101 Network.Wai.Handler.Warp.WithApplication
@@ -171,7 +171,6 @@ Test-Suite spec
171171 Network.Wai.Handler.Warp.Run
172172 Network.Wai.Handler.Warp.SendFile
173173 Network.Wai.Handler.Warp.Settings
174− Network.Wai.Handler.Warp.Timeout
175174 Network.Wai.Handler.Warp.Types
176175 Network.Wai.Handler.Warp.Windows
177176 Network.Wai.Handler.Warp.WithApplication
@@ -182,37 +181,38 @@ Test-Suite spec
182181
183182 Ghc-Options: -Wall -threaded
184183 Build-Depends: base >= 4.8 && < 5
184+ , HUnit
185+ , QuickCheck
185186 , array
187+ , async
186188 , auto-update
187189 , bsb-http-chunked < 0.1
188190 , bytestring >= 0.9.1.4
189191 , case-insensitive >= 0.2
192+ , containers
193+ , directory
190194 , ghc-prim
195+ , hashable
196+ , hspec >= 1.3
191197 , http-client
198+ , http-date
192199 , http-types >= 0.8.5
200+ , http2 >= 1.6 && < 1.7
193201 , iproute >= 1.3.1
194202 , lifted-base >= 0.1
203+ , network
204+ , process
195205 , simple-sendfile >= 0.2.4 && < 0.3
206+ , stm >= 2.3
207+ , streaming-commons >= 0.1.10
208+ , text
209+ , time
210+ , time-manager
196211 , transformers >= 0.2.2
197212 , unix-compat >= 0.2
198− , wai >= 3.2 && < 3.3
199− , network
200− , HUnit
201− , QuickCheck
202− , hspec >= 1.3
203− , time
204− , text
205− , streaming-commons >= 0.1.10
206− , async
207213 , vault
208− , stm >= 2.3
209− , directory
210− , process
211− , containers
212− , http2 >= 1.6 && < 1.7
214+ , wai >= 3.2 && < 3.3
213215 , word8
214− , hashable
215− , http-date
216216 -- Build-Tool-Depends: hspec-discover:hspec-discover
217217 if impl(ghc < 8)
218218 Build-Depends: semigroups
@@ -233,7 +233,6 @@ Benchmark parser
233233 Network.Wai.Handler.Warp.HashMap
234234 Network.Wai.Handler.Warp.Imports
235235 Network.Wai.Handler.Warp.MultiMap
236− Network.Wai.Handler.Warp.Timeout
237236 Network.Wai.Handler.Warp.Types
238237 HS-Source-Dirs: bench .
239238 Build-Depends: base >= 4.8 && < 5
@@ -246,6 +245,7 @@ Benchmark parser
246245 , http-types
247246 , network
248247 , network
248+ , time-manager
249249 , unix-compat
250250 if impl(ghc < 8)
251251 Build-Depends: semigroups