Skip to content

Commit dea03e0

Browse files
committed
remote/server: propagate errors from proxy handler
1 parent 4aeee1e commit dea03e0

File tree

3 files changed

+16
-19
lines changed

3 files changed

+16
-19
lines changed

hnix-store-remote/src/System/Nix/Store/Remote.hs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ runStoreSocket sockFamily sockAddr code =
9494

9595
justdoit :: Run IO (Bool, Bool)
9696
justdoit = do
97-
runDaemonConnection handler (pure ()) (StoreConnection_Socket "/tmp/dsock") $
97+
runDaemonConnection runStore (pure ()) (StoreConnection_Socket "/tmp/dsock") $
9898
runStoreConnection (StoreConnection_Socket "/tmp/dsock")
9999
$ do
100100
a <- isValidPath pth
@@ -108,11 +108,6 @@ justdoit = do
108108
def
109109
"/nix/store/yyznqbwam67cmp7zfwk0rkgmi9yqsdsm-hnix-store-core-0.8.0.0"
110110

111-
handler :: RemoteStoreT IO a -> IO a
112-
handler k = do
113-
x <- runStore k
114-
either (error . show) pure (fst x)
115-
116111
runDaemon
117112
:: forall m a
118113
. ( MonadIO m

hnix-store-remote/src/System/Nix/Store/Remote/Server.hs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import Data.Void (Void, absurd)
2020
import Data.Word (Word32)
2121
import Network.Socket (Socket, accept, close, listen, maxListenQueue)
2222
import System.Nix.Nar (NarSource)
23-
import System.Nix.Store.Remote.Client (doReq)
23+
import System.Nix.Store.Remote.Client (Run, doReq)
2424
import System.Nix.Store.Remote.Serializer (LoggerSError, mapErrorS, storeRequest, workerMagic, protoVersion, int, logger, text, trustedFlag)
2525
import System.Nix.Store.Remote.Socket
2626
import System.Nix.Store.Remote.Types.StoreRequest as R
@@ -42,7 +42,7 @@ type WorkerHelper m
4242
, StoreReply a
4343
)
4444
=> RemoteStoreT m a
45-
-> m a
45+
-> Run m a
4646

4747
chatty :: Bool
4848
chatty = False
@@ -138,19 +138,22 @@ processConnection workerHelper postGreet sock = do
138138
pure $ setNarSource proxyNarSource
139139
_ -> pure $ pure ()
140140

141-
resp <-
141+
res <-
142142
bracketLogger
143143
tunnelLogger
144144
$ lift
145145
$ workerHelper
146146
$ special >> doReq req
147147

148-
sockPutS
149-
(mapErrorS
150-
RemoteStoreError_SerializerReply
151-
$ getReplyS
152-
)
153-
resp
148+
case fst res of
149+
Left e -> throwError e
150+
Right reply ->
151+
sockPutS
152+
(mapErrorS
153+
RemoteStoreError_SerializerReply
154+
$ getReplyS
155+
)
156+
reply
154157

155158
-- Process client requests.
156159
let loop = do

hnix-store-remote/tests-io/NixDaemonSpec.hs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module NixDaemonSpec
55
, spec
66
) where
77

8-
import Control.Monad (forM_, unless, void, (<=<))
8+
import Control.Monad (forM_, unless, void)
99
import Control.Monad.Catch (MonadMask)
1010
import Control.Monad.Conc.Class (MonadConc)
1111
import Control.Monad.IO.Class (MonadIO, liftIO)
@@ -209,9 +209,8 @@ withManInTheMiddleNixDaemon action =
209209
storeConn2 = StoreConnection_Socket $ StoreSocketPath sockFp2
210210

211211
handler :: WorkerHelper m
212-
handler = either (error . show) pure
213-
<=< fmap fst
214-
. runStoreConnection storeConn
212+
handler =
213+
runStoreConnection storeConn
215214
. (setStoreDir storeDir >>)
216215

217216
in action $ \(mstore :: RemoteStoreT m a) ->

0 commit comments

Comments
 (0)