Revert "clean P2P protocol shutdown on EOF"
This reverts commit b18fb1e343
.
That broke support for old git-annex-shell before p2pstdio was added.
The immediate problem is that postAuth had a fallthrough case
that sent an error back to the peer, but sending an error back when the
connection is closed is surely not going to work.
But thinking about it some more, making every function that uses receiveMessage
need to handle ProtocolEOF adds a lot of complication, so I don't want
to do that.
The commit only cleaned up the test suite output a tiny bit, so I'm just
gonna revert it for now.
This commit is contained in:
parent
26a02cb386
commit
16cbecbd09
6 changed files with 24 additions and 17 deletions
|
@ -1,6 +1,8 @@
|
|||
git-annex (6.20180914) UNRELEASED; urgency=medium
|
||||
|
||||
[ Joey Hess ]
|
||||
* Fixes a reversion in the last release that broke interoperation with
|
||||
older versions of git-annex-shell.
|
||||
* S3: Fix url construction bug when the publicurl has been set to an url
|
||||
that does not end with a slash.
|
||||
* --debug shows urls accessed by git-annex, like it used to do when
|
||||
|
|
|
@ -38,7 +38,6 @@ import Annex.ChangedRefs
|
|||
import Control.Monad.Free
|
||||
import Control.Monad.IO.Class
|
||||
import System.Exit (ExitCode(..))
|
||||
import System.IO.Error
|
||||
import Network.Socket
|
||||
import Control.Concurrent
|
||||
import Control.Concurrent.Async
|
||||
|
@ -160,11 +159,9 @@ runNet runst conn runner f = case f of
|
|||
Left e -> return (Left (show e))
|
||||
Right () -> runner next
|
||||
ReceiveMessage next -> do
|
||||
v <- liftIO $ tryIOError $ getProtocolLine (connIhdl conn)
|
||||
v <- liftIO $ tryNonAsync $ getProtocolLine (connIhdl conn)
|
||||
case v of
|
||||
Left e
|
||||
| isEOFError e -> runner (next (Just ProtocolEOF))
|
||||
| otherwise -> return (Left (show e))
|
||||
Left e -> return (Left (show e))
|
||||
Right Nothing -> return (Left "protocol error")
|
||||
Right (Just l) -> case parseMessage l of
|
||||
Just m -> do
|
||||
|
|
|
@ -83,7 +83,6 @@ data Message
|
|||
| DATA Len -- followed by bytes of data
|
||||
| VALIDITY Validity
|
||||
| ERROR String
|
||||
| ProtocolEOF
|
||||
deriving (Show)
|
||||
|
||||
instance Proto.Sendable Message where
|
||||
|
@ -109,7 +108,6 @@ instance Proto.Sendable Message where
|
|||
formatMessage (VALIDITY Invalid) = ["INVALID"]
|
||||
formatMessage (DATA len) = ["DATA", Proto.serialize len]
|
||||
formatMessage (ERROR err) = ["ERROR", Proto.serialize err]
|
||||
formatMessage (ProtocolEOF) = []
|
||||
|
||||
instance Proto.Receivable Message where
|
||||
parseCommand "AUTH" = Proto.parse2 AUTH
|
||||
|
@ -369,8 +367,6 @@ serverLoop :: (Message -> Proto (ServerHandler a)) -> Proto (Maybe a)
|
|||
serverLoop a = do
|
||||
mcmd <- net receiveMessage
|
||||
case mcmd of
|
||||
-- Stop loop at EOF
|
||||
Just ProtocolEOF -> return Nothing
|
||||
-- When the client sends ERROR to the server, the server
|
||||
-- gives up, since it's not clear what state the client
|
||||
-- is in, and so not possible to recover.
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2018-09-25T17:18:14Z"
|
||||
content="""
|
||||
Ok, reproduced by downgrading git-annex, so it is a reversion in the
|
||||
fallback from p2pstdio.
|
||||
"""]]
|
|
@ -64,3 +64,5 @@ so ssh connection seems to be ok
|
|||
what could it be?
|
||||
|
||||
[[!meta author=yoh]]
|
||||
|
||||
> [[fixed|done]] --[[Joey]]
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
[[!comment format=mdwn
|
||||
username="joey"
|
||||
subject="""comment 1"""
|
||||
date="2018-09-25T17:18:14Z"
|
||||
content="""
|
||||
Ok, reproduced by downgrading git-annex, so it is a reversion in the
|
||||
fallback from p2pstdio.
|
||||
|
||||
It is indeed caused by [[!commit b18fb1e343e9654207fbebacf686659c75d0fb4c]],
|
||||
because that adds a new ProtocolEOF value, and postAuth has a fallthrough
|
||||
case that tries to then send a ERROR message back over the connection, but
|
||||
by that time the pipe has closed.
|
||||
|
||||
So that was an easy fix. I do still wonder how a system that displays
|
||||
/etc/issue or whatever to noninteractive logins could have ever worked with
|
||||
rsync or git-annex. But if that system doesn't work after this fix, it's an
|
||||
unrelated problem.
|
||||
"""]]
|
Loading…
Add table
Reference in a new issue