Skip to content

Commit 36f05e2

Browse files
authored
agent: support different timeouts for interactive and background requests (#1582)
* agent: support different timeouts for interactive and background requests * fix tests * use one constructor for the first request and for retries
1 parent 660c429 commit 36f05e2

File tree

14 files changed

+579
-493
lines changed

14 files changed

+579
-493
lines changed

src/Simplex/FileTransfer/Client.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,10 @@ import Simplex.FileTransfer.Protocol
3636
import Simplex.FileTransfer.Transport
3737
import Simplex.Messaging.Client
3838
( NetworkConfig (..),
39+
NetworkRequestMode (..),
3940
ProtocolClientError (..),
4041
TransportSession,
42+
netTimeoutInt,
4143
chooseTransportHost,
4244
defaultNetworkConfig,
4345
transportClientConfig,
@@ -107,7 +109,7 @@ getXFTPClient transportSession@(_, srv, _) config@XFTPClientConfig {clientALPN,
107109
let socksCreds = clientSocksCredentials xftpNetworkConfig proxySessTs transportSession
108110
ProtocolServer _ host port keyHash = srv
109111
useHost <- liftEither $ chooseTransportHost xftpNetworkConfig host
110-
let tcConfig = transportClientConfig xftpNetworkConfig useHost False clientALPN
112+
let tcConfig = transportClientConfig xftpNetworkConfig NRMBackground useHost False clientALPN
111113
http2Config = xftpHTTP2Config tcConfig config
112114
clientVar <- newTVarIO Nothing
113115
let usePort = if null port then "443" else port
@@ -178,7 +180,7 @@ xftpHTTP2Config transportConfig XFTPClientConfig {xftpNetworkConfig = NetworkCon
178180
defaultHTTP2ClientConfig
179181
{ bodyHeadSize = xftpBlockSize,
180182
suportedTLSParams = defaultSupportedParams,
181-
connTimeout = tcpConnectTimeout,
183+
connTimeout = netTimeoutInt tcpConnectTimeout NRMBackground,
182184
transportConfig
183185
}
184186

@@ -268,11 +270,11 @@ downloadXFTPChunk g c@XFTPClient {config} rpKey fId chunkSpec@XFTPRcvChunkSpec {
268270

269271
xftpReqTimeout :: XFTPClientConfig -> Maybe Word32 -> Int
270272
xftpReqTimeout cfg@XFTPClientConfig {xftpNetworkConfig = NetworkConfig {tcpTimeout}} chunkSize_ =
271-
maybe tcpTimeout (chunkTimeout cfg) chunkSize_
273+
maybe (netTimeoutInt tcpTimeout NRMBackground) (chunkTimeout cfg) chunkSize_
272274

273275
chunkTimeout :: XFTPClientConfig -> Word32 -> Int
274276
chunkTimeout XFTPClientConfig {xftpNetworkConfig = NetworkConfig {tcpTimeout, tcpTimeoutPerKb}} sz =
275-
tcpTimeout + fromIntegral (min ((fromIntegral sz `div` 1024) * tcpTimeoutPerKb) (fromIntegral (maxBound :: Int)))
277+
netTimeoutInt tcpTimeout NRMBackground + fromIntegral (min ((fromIntegral sz `div` 1024) * tcpTimeoutPerKb) (fromIntegral (maxBound :: Int)))
276278

277279
deleteXFTPChunk :: XFTPClient -> C.APrivateAuthKey -> SenderId -> ExceptT XFTPClientError IO ()
278280
deleteXFTPChunk c spKey sId = sendXFTPCommand c spKey sId FDEL Nothing >>= okResponse

src/Simplex/FileTransfer/Client/Agent.hs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import Data.Text.Encoding (decodeUtf8)
1919
import Data.Time.Clock (UTCTime, getCurrentTime)
2020
import Simplex.FileTransfer.Client
2121
import Simplex.Messaging.Agent.RetryInterval
22-
import Simplex.Messaging.Client (NetworkConfig (..), ProtocolClientError (..), temporaryClientError)
22+
import Simplex.Messaging.Client (NetworkConfig (..), NetworkRequestMode (..), ProtocolClientError (..), netTimeoutInt, temporaryClientError)
2323
import Simplex.Messaging.Encoding.String
2424
import Simplex.Messaging.Protocol (ProtocolServer (..), XFTPServer)
2525
import Simplex.Messaging.TMap (TMap)
@@ -90,7 +90,7 @@ getXFTPServerClient XFTPClientAgent {xftpClients, startedAt, config} srv = do
9090
waitForXFTPClient :: XFTPClientVar -> ME XFTPClient
9191
waitForXFTPClient clientVar = do
9292
let XFTPClientConfig {xftpNetworkConfig = NetworkConfig {tcpConnectTimeout}} = xftpConfig config
93-
client_ <- liftIO $ tcpConnectTimeout `timeout` atomically (readTMVar clientVar)
93+
client_ <- liftIO $ netTimeoutInt tcpConnectTimeout NRMBackground `timeout` atomically (readTMVar clientVar)
9494
liftEither $ case client_ of
9595
Just (Right c) -> Right c
9696
Just (Left e) -> Left e
@@ -127,6 +127,6 @@ closeXFTPServerClient XFTPClientAgent {xftpClients, config} srv =
127127
where
128128
closeClient cVar = do
129129
let NetworkConfig {tcpConnectTimeout} = xftpNetworkConfig $ xftpConfig config
130-
tcpConnectTimeout `timeout` atomically (readTMVar cVar) >>= \case
130+
netTimeoutInt tcpConnectTimeout NRMBackground `timeout` atomically (readTMVar cVar) >>= \case
131131
Just (Right client) -> closeXFTPClient client `catchAll_` pure ()
132132
_ -> pure ()

src/Simplex/Messaging/Agent.hs

Lines changed: 141 additions & 139 deletions
Large diffs are not rendered by default.

src/Simplex/Messaging/Agent/Client.hs

Lines changed: 164 additions & 160 deletions
Large diffs are not rendered by default.

src/Simplex/Messaging/Agent/NtfSubSupervisor.hs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ import Simplex.Messaging.Agent.Stats
4545
import Simplex.Messaging.Agent.Store
4646
import Simplex.Messaging.Agent.Store.AgentStore
4747
import qualified Simplex.Messaging.Agent.Store.DB as DB
48+
import Simplex.Messaging.Client (NetworkRequestMode (..))
4849
import qualified Simplex.Messaging.Crypto as C
4950
import Simplex.Messaging.Notifications.Protocol
5051
import Simplex.Messaging.Notifications.Types
@@ -572,7 +573,7 @@ runNtfTknDelWorker c srv Worker {doWork} =
572573
notifyInternalError' c (show e)
573574
processTknToDelete :: NtfTokenToDelete -> AM ()
574575
processTknToDelete (tknDbId, ntfPrivKey, tknId) = do
575-
agentNtfDeleteToken c srv ntfPrivKey tknId
576+
agentNtfDeleteToken c NRMBackground srv ntfPrivKey tknId
576577
withStore' c $ \db -> deleteNtfTokenToDelete db tknDbId
577578

578579
closeNtfSupervisor :: NtfSupervisor -> IO ()

0 commit comments

Comments
 (0)