]> dgit.raspbian.org Git - git-annex.git/commitdiff
fix display when proxied GET yields ERROR
authorJoey Hess <joeyh@joeyh.name>
Mon, 1 Jul 2024 15:19:02 +0000 (11:19 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 1 Jul 2024 15:19:02 +0000 (11:19 -0400)
The error message is not displayed to the use, but this mirrors the
behavior when a regular get from a special remote fails. At least now
there is not a protocol error.

Annex/Proxy.hs
P2P/IO.hs
P2P/Protocol.hs
P2P/Proxy.hs
doc/todo/git-annex_proxies.mdwn

index 50b108bab4da2a8dbce8dc80c89a18e294346b7d..167a76ca477e873cc596e1f24ee1eddc345783fe 100644 (file)
@@ -114,7 +114,7 @@ proxySpecialRemote protoversion r ihdl ohdl owaitv endv = go
                        liftIO $ sendmessage $
                                ERROR "NOTIFYCHANGE unsupported for a special remote"
                        go
-               Just _ -> giveup "protocol error"
+               Just _ -> giveup "protocol error M"
                Nothing -> return ()
 
        getnextmessageorend = 
@@ -167,9 +167,9 @@ proxySpecialRemote protoversion r ihdl ohdl owaitv endv = go
                                                                store
                                                        Just (VALIDITY Invalid) ->
                                                                return ()
-                                                       _ -> giveup "protocol error"
+                                                       _ -> giveup "protocol error N"
                                                else store
-                               _ -> giveup "protocol error"
+                               _ -> giveup "protocol error O"
 
        proxyget offset af k = withproxytmpfile k $ \tmpfile -> do
                -- Don't verify the content from the remote,
@@ -206,6 +206,6 @@ proxySpecialRemote protoversion r ihdl ohdl owaitv endv = go
                        receivemessage >>= \case
                                Just SUCCESS -> return ()
                                Just FAILURE -> return ()
-                               Just _ -> giveup "protocol error"
+                               Just _ -> giveup "protocol error P"
                                Nothing -> return ()
                                                
index 42b53a671ae7472ad43a797e01434e8a51a5ba81..14c588dac5b8d7873bf093f56c0e10834b204804 100644 (file)
--- a/P2P/IO.hs
+++ b/P2P/IO.hs
@@ -216,7 +216,7 @@ runNet runst conn runner f = case f of
                        Right () -> runner next
        ReceiveMessage next ->
                let protoerr = return $ Left $
-                       ProtoFailureMessage "protocol error"
+                       ProtoFailureMessage "protocol error 1"
                    gotmessage m = do
                        liftIO $ debugMessage conn "P2P <" m
                        runner (next (Just m))
@@ -263,7 +263,7 @@ runNet runst conn runner f = case f of
                                liftIO (atomically (takeTMVar mv)) >>= \case
                                        Left b -> runner (next b)
                                        Right _ -> return $ Left $
-                                               ProtoFailureMessage "protocol error"
+                                               ProtoFailureMessage "protocol error 2"
        CheckAuthToken _u t next -> do
                let authed = connCheckAuth conn t
                runner (next authed)
index 1a3bcd5d7ecb4077e9a68856448b8c37b5d3b24f..79d8fbd8a32592e69ee64fd57d64ce4c02578c04 100644 (file)
@@ -623,6 +623,8 @@ receiveContent mm p sizer storer mkmsg = do
                                validitycheck
                        sendSuccess (observeBool v)
                        return v
+               Just (ERROR _err) ->
+                       return observeFailure
                _ -> do
                        net $ sendMessage (ERROR "expected DATA")
                        return observeFailure
index 45085f4734a702eedc4081dc23260f93062d5209..53cc4ff947b1437430adad4131ae23784d17e260 100644 (file)
@@ -315,8 +315,8 @@ proxy proxydone proxymethods servermode (ClientSide clientrunst clientconn) remo
                                        to $ net $ sendMessage message
        
        protoerr = do
-               _ <- client $ net $ sendMessage (ERROR "protocol error")
-               giveup "protocol error"
+               _ <- client $ net $ sendMessage (ERROR "protocol error X")
+               giveup "protocol error M"
        
        handleREMOVE [] _ _ =
                -- When no places are provided to remove from,
@@ -357,7 +357,10 @@ proxy proxydone proxymethods servermode (ClientSide clientrunst clientconn) remo
                                                else FAILURE_PLUS us
 
        handleGET remoteside message = getresponse (runRemoteSide remoteside) message $
-               withDATA (relayGET remoteside)
+               withDATA (relayGET remoteside) $ \case
+                       ERROR err -> protoerrhandler proxynextclientmessage $
+                               client $ net $ sendMessage (ERROR err)
+                       _ -> protoerr
 
        handlePUT (remoteside:[]) k message
                | Remote.uuid (remote remoteside) == remoteuuid =
@@ -368,7 +371,9 @@ proxy proxydone proxymethods servermode (ClientSide clientrunst clientconn) remo
                                        client $ net $ sendMessage resp
                                PUT_FROM _ -> 
                                        getresponse client resp $ 
-                                               withDATA (relayPUT remoteside k)
+                                               withDATA
+                                                       (relayPUT remoteside k)
+                                                       (const protoerr)
                                _ -> protoerr
        handlePUT [] _ _ = 
                protoerrhandler proxynextclientmessage $
@@ -376,8 +381,8 @@ proxy proxydone proxymethods servermode (ClientSide clientrunst clientconn) remo
        handlePUT remotesides k message = 
                handlePutMulti remotesides k message
 
-       withDATA a message@(DATA len) = a len message
-       withDATA _ _ = protoerr
+       withDATA a _ message@(DATA len) = a len message
+       withDATA _ a message = a message
        
        relayGET remoteside len = relayDATAStart client $
                relayDATACore len (runRemoteSide remoteside) client $
@@ -438,7 +443,8 @@ proxy proxydone proxymethods servermode (ClientSide clientrunst clientconn) remo
                                        let l' = rights (rights l)
                                        let minoffset = minimum (map snd l')
                                        getresponse client (PUT_FROM (Offset minoffset)) $
-                                               withDATA (relayPUTMulti minoffset l' k) 
+                                               withDATA (relayPUTMulti minoffset l' k)
+                                                       (const protoerr)
        
        relayPUTMulti minoffset remotes k (Len datalen) _ = do
                let totallen = datalen + minoffset
index fb8ece8da6f1131d637bf992449fafe78df6b856..ed2770212237f7f44308eaa2b4d244c5ac04dfdd 100644 (file)
@@ -31,9 +31,6 @@ For June's work on [[design/passthrough_proxy]], remaining todos:
   needs some disk. And it could minimize to eg, the last 2 or so.
   The design doc has some more thoughts about this.
 
-* If GET from a proxied special remote sends an ERROR with a message
-  from the special remote, currently the user sees "protocol error".
-
 * Streaming download from proxied special remotes. See design.
 
 * Check annex.diskreserve when proxying for special remotes.