Switch peers when getting tree
This commit is contained in:
parent
bc08acd36c
commit
086b99ede2
@ -74,9 +74,10 @@ type BuildDeps struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t SyncTree, err error) {
|
func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t SyncTree, err error) {
|
||||||
getPeer := func(ctx context.Context) (peerId string, err error) {
|
getPeers := func(ctx context.Context) (peerIds []string, err error) {
|
||||||
peerId, err = peer.CtxPeerId(ctx)
|
peerId, err := peer.CtxPeerId(ctx)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
peerIds = []string{peerId}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = nil
|
err = nil
|
||||||
@ -89,17 +90,13 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
|
|||||||
err = fmt.Errorf("no responsible peers")
|
err = fmt.Errorf("no responsible peers")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// TODO: maybe we can check different peers here
|
for _, p := range respPeers {
|
||||||
peerId = respPeers[0].Id()
|
peerIds = append(peerIds, p.Id())
|
||||||
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
getTreeRemote := func() (msg *treechangeproto.TreeSyncMessage, err error) {
|
getTreeRemote := func(peerId string) (msg *treechangeproto.TreeSyncMessage, err error) {
|
||||||
peerId, err := getPeer(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
newTreeRequest := GetRequestFactory().CreateNewTreeRequest()
|
newTreeRequest := GetRequestFactory().CreateNewTreeRequest()
|
||||||
objMsg, err := marshallTreeMessage(newTreeRequest, deps.SpaceId, id, "")
|
objMsg, err := marshallTreeMessage(newTreeRequest, deps.SpaceId, id, "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -117,14 +114,22 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
|
|||||||
}
|
}
|
||||||
|
|
||||||
waitTree := func(wait bool) (msg *treechangeproto.TreeSyncMessage, err error) {
|
waitTree := func(wait bool) (msg *treechangeproto.TreeSyncMessage, err error) {
|
||||||
if !wait {
|
availablePeers, err := getPeers(ctx)
|
||||||
return getTreeRemote()
|
if err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !wait {
|
||||||
|
return getTreeRemote(availablePeers[0])
|
||||||
|
}
|
||||||
|
peerIdx := 0
|
||||||
for {
|
for {
|
||||||
msg, err = getTreeRemote()
|
peerIdx = peerIdx % len(availablePeers)
|
||||||
|
msg, err = getTreeRemote(availablePeers[peerIdx])
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
peerIdx++
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
err = fmt.Errorf("waiting for object %s interrupted, context closed", id)
|
err = fmt.Errorf("waiting for object %s interrupted, context closed", id)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user