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:
Joey Hess 2018-09-25 14:04:12 -04:00
parent 26a02cb386
commit 16cbecbd09
No known key found for this signature in database
GPG key ID: DB12DB0FF05F8F38
6 changed files with 24 additions and 17 deletions

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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.
"""]]

View file

@ -64,3 +64,5 @@ so ssh connection seems to be ok
what could it be?
[[!meta author=yoh]]
> [[fixed|done]] --[[Joey]]

View file

@ -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.
"""]]