implemented servePutOffset and clientPutOffset
But, it's buggy: the server hangs without processing the VALIDITY, and I can't seem to work out why. As far as I can see, storefile is getting as far as running the validitycheck, which is supposed to read that, but never does. This is especially strange because what seems like the same protocol doesn't hang when servePut runs it. This made me think that it needed to use inAnnexWorker to be more like servePut, but that didn't help. Another small problem with this is that it does create an empty .git/annex/tmp/ file for the key. Since this will usually be used in combination with servePut, that doesn't seem worth worrying about much.
This commit is contained in:
parent
c36b9cd1fc
commit
3069e28dd8
6 changed files with 110 additions and 31 deletions
|
@ -482,6 +482,24 @@ put' key af sender = do
|
|||
net $ sendMessage (ERROR "expected PUT_FROM or ALREADY_HAVE")
|
||||
return Nothing
|
||||
|
||||
-- The protocol does not have a way to get the PUT offset
|
||||
-- without sending DATA, so send an empty bytestring and indicate
|
||||
-- it is not valid.
|
||||
getPutOffset :: Key -> AssociatedFile -> Proto (Either [UUID] Offset)
|
||||
getPutOffset key af = do
|
||||
net $ sendMessage (PUT (ProtoAssociatedFile af) key)
|
||||
r <- net receiveMessage
|
||||
case r of
|
||||
Just (PUT_FROM offset) -> do
|
||||
void $ sendContent' nullMeterUpdate (Len 0) L.empty $
|
||||
return Invalid
|
||||
return (Right offset)
|
||||
Just ALREADY_HAVE -> return (Left [])
|
||||
Just (ALREADY_HAVE_PLUS uuids) -> return (Left uuids)
|
||||
_ -> do
|
||||
net $ sendMessage (ERROR "expected PUT_FROM or ALREADY_HAVE")
|
||||
return (Left [])
|
||||
|
||||
data ServerHandler a
|
||||
= ServerGot a
|
||||
| ServerContinue
|
||||
|
@ -686,7 +704,7 @@ sendContent key af o offset@(Offset n) p = go =<< local (contentSize key)
|
|||
else local $ readContent key af o offset $
|
||||
sender (Len len)
|
||||
-- Content not available to send. Indicate this by sending
|
||||
-- empty data and indlicate it's invalid.
|
||||
-- empty data and indicate it's invalid.
|
||||
go Nothing = sender (Len 0) L.empty (return Invalid)
|
||||
|
||||
sender = sendContent' p'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue