avoid loop between cluster gateways
The VIA extension is still needed to avoid some extra work and ugly messages, but this is enough that it actually works. This filters out the RemoteSides that are a proxied connection via a remote gateway to the cluster. The VIA extension will not filter those out, but will send VIA to them on connect, which will cause the ones that are accessed via the listed gateways to be filtered out.
This commit is contained in:
parent
4172109c8d
commit
effaf51b1f
2 changed files with 12 additions and 7 deletions
|
@ -96,8 +96,8 @@ clusterProxySelector clusteruuid protocolversion = do
|
|||
where
|
||||
-- Nodes of the cluster have remote.name.annex-cluster-node
|
||||
-- containing its name. Or they are proxied by a remote
|
||||
-- that has remote.name.annex-cluster-node containing the cluster's
|
||||
-- UUID.
|
||||
-- that has remote.name.annex-cluster-gateway
|
||||
-- containing the cluster's UUID.
|
||||
isnode rs nodeuuids clusternames r =
|
||||
case remoteAnnexClusterNode (Remote.gitconfig r) of
|
||||
Just names
|
||||
|
@ -106,11 +106,13 @@ clusterProxySelector clusteruuid protocolversion = do
|
|||
ClusterNodeUUID $ Remote.uuid r
|
||||
| otherwise -> False
|
||||
Nothing -> case remoteAnnexProxiedBy (Remote.gitconfig r) of
|
||||
Just proxyuuid -> not $ null $
|
||||
Just proxyuuid
|
||||
| Remote.uuid r /= fromClusterUUID clusteruuid ->
|
||||
not $ null $
|
||||
filter (== clusteruuid) $
|
||||
concatMap (remoteAnnexClusterGateway . Remote.gitconfig) $
|
||||
filter (\p -> Remote.uuid p == proxyuuid) rs
|
||||
Nothing -> False
|
||||
_ -> False
|
||||
|
||||
isclustername clusternames name =
|
||||
M.lookup name clusternames == Just clusteruuid
|
||||
|
|
|
@ -33,6 +33,9 @@ For June's work on [[design/passthrough_proxy]], remaining todos:
|
|||
protocol messages on to any remotes that have the same UUID as
|
||||
the cluster. Needs VIA extension to P2P protocol to avoid cycles.
|
||||
|
||||
Status: works, but needs VIA extension to avoid ugly messages and extra
|
||||
work
|
||||
|
||||
* Getting a key from a cluster currently always selects the lowest cost
|
||||
remote, and always the same remote if cost is the same. Should
|
||||
round-robin amoung remotes, and prefer to avoid using remotes that
|
||||
|
|
Loading…
Reference in a new issue