Fix peer getting in sync tree
This commit is contained in:
parent
8097445e6e
commit
bc08acd36c
@ -54,6 +54,10 @@ var log = logger.NewNamed("commonspace.synctree")
|
||||
var buildObjectTree = objecttree.BuildObjectTree
|
||||
var createSyncClient = newSyncClient
|
||||
|
||||
type ResponsiblePeersGetter interface {
|
||||
GetResponsiblePeers(ctx context.Context) (peers []peer.Peer, err error)
|
||||
}
|
||||
|
||||
type BuildDeps struct {
|
||||
SpaceId string
|
||||
ObjectSync objectsync.ObjectSync
|
||||
@ -65,15 +69,35 @@ type BuildDeps struct {
|
||||
TreeStorage treestorage.TreeStorage
|
||||
TreeUsage *atomic.Int32
|
||||
SyncStatus syncstatus.StatusUpdater
|
||||
PeerGetter ResponsiblePeersGetter
|
||||
WaitTreeRemoteSync bool
|
||||
}
|
||||
|
||||
func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t SyncTree, err error) {
|
||||
getTreeRemote := func() (msg *treechangeproto.TreeSyncMessage, err error) {
|
||||
peerId, err := peer.CtxPeerId(ctx)
|
||||
getPeer := func(ctx context.Context) (peerId string, err error) {
|
||||
peerId, err = peer.CtxPeerId(ctx)
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
err = nil
|
||||
log.WarnCtx(ctx, "peer not found in context, use responsible")
|
||||
respPeers, err := deps.PeerGetter.GetResponsiblePeers(ctx)
|
||||
if err != nil {
|
||||
log.WarnCtx(ctx, "peer not found in context, use first responsible")
|
||||
peerId = deps.Configuration.NodeIds(deps.SpaceId)[0]
|
||||
return
|
||||
}
|
||||
if len(respPeers) == 0 {
|
||||
err = fmt.Errorf("no responsible peers")
|
||||
return
|
||||
}
|
||||
// TODO: maybe we can check different peers here
|
||||
peerId = respPeers[0].Id()
|
||||
return
|
||||
}
|
||||
|
||||
getTreeRemote := func() (msg *treechangeproto.TreeSyncMessage, err error) {
|
||||
peerId, err := getPeer(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
newTreeRequest := GetRequestFactory().CreateNewTreeRequest()
|
||||
|
||||
@ -16,6 +16,7 @@ import (
|
||||
"github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto"
|
||||
"github.com/anytypeio/any-sync/commonspace/object/tree/treestorage"
|
||||
"github.com/anytypeio/any-sync/commonspace/objectsync"
|
||||
"github.com/anytypeio/any-sync/commonspace/peermanager"
|
||||
"github.com/anytypeio/any-sync/commonspace/settings"
|
||||
"github.com/anytypeio/any-sync/commonspace/settings/deletionstate"
|
||||
"github.com/anytypeio/any-sync/commonspace/spacestorage"
|
||||
@ -122,6 +123,7 @@ type space struct {
|
||||
aclList *syncacl.SyncAcl
|
||||
configuration nodeconf.Configuration
|
||||
settingsObject settings.SettingsObject
|
||||
peerManager peermanager.PeerManager
|
||||
|
||||
handleQueue multiqueue.MultiQueue[HandleMessage]
|
||||
|
||||
@ -295,6 +297,7 @@ func (s *space) PutTree(ctx context.Context, payload treestorage.TreeStorageCrea
|
||||
SpaceStorage: s.storage,
|
||||
TreeUsage: &s.treesUsed,
|
||||
SyncStatus: s.syncStatus,
|
||||
PeerGetter: s.peerManager,
|
||||
}
|
||||
return synctree.PutSyncTree(ctx, payload, deps)
|
||||
}
|
||||
@ -326,6 +329,7 @@ func (s *space) BuildTree(ctx context.Context, id string, opts BuildTreeOpts) (t
|
||||
TreeUsage: &s.treesUsed,
|
||||
SyncStatus: s.syncStatus,
|
||||
WaitTreeRemoteSync: opts.WaitTreeRemoteSync,
|
||||
PeerGetter: s.peerManager,
|
||||
}
|
||||
return synctree.BuildSyncTreeOrGetRemote(ctx, id, deps)
|
||||
}
|
||||
|
||||
@ -139,6 +139,7 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
|
||||
cache: getter,
|
||||
account: s.account,
|
||||
configuration: lastConfiguration,
|
||||
peerManager: peerManager,
|
||||
storage: st,
|
||||
}
|
||||
return sp, nil
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user