P2P protocol version 2, adding SUCCESS-PLUS and ALREADY-HAVE-PLUS
Client side support for SUCCESS-PLUS and ALREADY-HAVE-PLUS is complete, when a PUT stores to additional repositories than the expected on, the location log is updated with the additional UUIDs that contain the content. Started implementing PUT fanout to multiple remotes for clusters. It is untested, and I fear fencepost errors in the relative offset calculations. And it is missing proxying for the protocol after DATA.
This commit is contained in:
parent
ca08f3fcc2
commit
f18740699e
12 changed files with 206 additions and 61 deletions
|
@ -50,8 +50,9 @@ proxyCluster clusteruuid proxydone servermode clientside protoerrhandler = do
|
|||
-- that we and the client both speak.
|
||||
let protocolversion = min maxProtocolVersion clientmaxversion
|
||||
selectnode <- clusterProxySelector clusteruuid protocolversion
|
||||
proxy proxydone proxymethods servermode clientside selectnode
|
||||
protocolversion othermsg protoerrhandler
|
||||
proxy proxydone proxymethods servermode clientside
|
||||
(fromClusterUUID clusteruuid)
|
||||
selectnode protocolversion othermsg protoerrhandler
|
||||
withclientversion Nothing = proxydone
|
||||
|
||||
clusterProxySelector :: ClusterUUID -> ProtocolVersion -> Annex ProxySelector
|
||||
|
@ -64,7 +65,10 @@ clusterProxySelector clusteruuid protocolversion = do
|
|||
return $ ProxySelector
|
||||
{ proxyCHECKPRESENT = nodecontaining remotesides
|
||||
, proxyGET = nodecontaining remotesides
|
||||
, proxyPUT = \k -> error "TODO"
|
||||
-- Send the key to every node that does not yet contain it.
|
||||
, proxyPUT = \k -> do
|
||||
locs <- S.fromList <$> loggedLocations k
|
||||
return $ filter (flip S.notMember locs . remoteUUID) remotesides
|
||||
, proxyREMOVE = \k -> error "TODO"
|
||||
-- Content is not locked on the cluster as a whole,
|
||||
-- instead it can be locked on individual nodes that are
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue