Move concrete logic to concrete packages
This commit is contained in:
parent
e289fd4f89
commit
69211dfe66
@ -14,8 +14,8 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type DiffService interface {
|
type DiffService interface {
|
||||||
|
HeadNotifiable
|
||||||
HandleRangeRequest(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (resp *spacesyncproto.HeadSyncResponse, err error)
|
HandleRangeRequest(ctx context.Context, req *spacesyncproto.HeadSyncRequest) (resp *spacesyncproto.HeadSyncResponse, err error)
|
||||||
UpdateHeads(id string, heads []string)
|
|
||||||
RemoveObject(id string)
|
RemoveObject(id string)
|
||||||
AllIds() []string
|
AllIds() []string
|
||||||
|
|
||||||
|
|||||||
5
common/commonspace/diffservice/headnotifiable.go
Normal file
5
common/commonspace/diffservice/headnotifiable.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package diffservice
|
||||||
|
|
||||||
|
type HeadNotifiable interface {
|
||||||
|
UpdateHeads(id string, heads []string)
|
||||||
|
}
|
||||||
@ -91,14 +91,15 @@ func (s *service) GetSpace(ctx context.Context, id string) (Space, error) {
|
|||||||
lastConfiguration := s.configurationService.GetLast()
|
lastConfiguration := s.configurationService.GetLast()
|
||||||
confConnector := nodeconf.NewConfConnector(lastConfiguration, s.pool)
|
confConnector := nodeconf.NewConfConnector(lastConfiguration, s.pool)
|
||||||
diffService := diffservice.NewDiffService(id, s.config.SyncPeriod, st, confConnector, s.cache, log)
|
diffService := diffservice.NewDiffService(id, s.config.SyncPeriod, st, confConnector, s.cache, log)
|
||||||
syncService := syncservice.NewSyncService(id, diffService, lastConfiguration, confConnector)
|
syncService := syncservice.NewSyncService(id, confConnector)
|
||||||
sp := &space{
|
sp := &space{
|
||||||
id: id,
|
id: id,
|
||||||
syncService: syncService,
|
syncService: syncService,
|
||||||
diffService: diffService,
|
diffService: diffService,
|
||||||
cache: s.cache,
|
cache: s.cache,
|
||||||
account: s.account,
|
account: s.account,
|
||||||
storage: st,
|
configuration: lastConfiguration,
|
||||||
|
storage: st,
|
||||||
}
|
}
|
||||||
if err := sp.Init(ctx); err != nil {
|
if err := sp.Init(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@ -13,6 +13,7 @@ import (
|
|||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/treegetter"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
||||||
aclstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
aclstorage "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||||
tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
tree "github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
||||||
@ -69,12 +70,13 @@ type space struct {
|
|||||||
|
|
||||||
rpc *rpcHandler
|
rpc *rpcHandler
|
||||||
|
|
||||||
syncService syncservice.SyncService
|
syncService syncservice.SyncService
|
||||||
diffService diffservice.DiffService
|
diffService diffservice.DiffService
|
||||||
storage storage.SpaceStorage
|
storage storage.SpaceStorage
|
||||||
cache treegetter.TreeGetter
|
cache treegetter.TreeGetter
|
||||||
account account.Service
|
account account.Service
|
||||||
aclList *syncacl.SyncACL
|
aclList *syncacl.SyncACL
|
||||||
|
configuration nodeconf.Configuration
|
||||||
|
|
||||||
isClosed atomic.Bool
|
isClosed atomic.Bool
|
||||||
}
|
}
|
||||||
@ -101,7 +103,7 @@ func (s *space) Init(ctx context.Context) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
s.aclList = syncacl.NewSyncACL(aclList, s.syncService.SyncClient())
|
s.aclList = syncacl.NewSyncACL(aclList, s.syncService.StreamPool())
|
||||||
objectGetter := newCommonSpaceGetter(s.id, s.aclList, s.cache)
|
objectGetter := newCommonSpaceGetter(s.id, s.aclList, s.cache)
|
||||||
s.syncService.Init(objectGetter)
|
s.syncService.Init(objectGetter)
|
||||||
s.diffService.Init(initialIds)
|
s.diffService.Init(initialIds)
|
||||||
@ -129,12 +131,15 @@ func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePay
|
|||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
deps := synctree.SyncTreeCreateDeps{
|
deps := synctree.CreateDeps{
|
||||||
Payload: payload,
|
SpaceId: s.id,
|
||||||
SyncClient: s.syncService.SyncClient(),
|
Payload: payload,
|
||||||
Listener: listener,
|
StreamPool: s.syncService.StreamPool(),
|
||||||
AclList: s.aclList,
|
Configuration: s.configuration,
|
||||||
CreateStorage: s.storage.CreateTreeStorage,
|
HeadNotifiable: s.diffService,
|
||||||
|
Listener: listener,
|
||||||
|
AclList: s.aclList,
|
||||||
|
CreateStorage: s.storage.CreateTreeStorage,
|
||||||
}
|
}
|
||||||
return synctree.DeriveSyncTree(ctx, deps)
|
return synctree.DeriveSyncTree(ctx, deps)
|
||||||
}
|
}
|
||||||
@ -144,12 +149,15 @@ func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePay
|
|||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
deps := synctree.SyncTreeCreateDeps{
|
deps := synctree.CreateDeps{
|
||||||
Payload: payload,
|
SpaceId: s.id,
|
||||||
SyncClient: s.syncService.SyncClient(),
|
Payload: payload,
|
||||||
Listener: listener,
|
StreamPool: s.syncService.StreamPool(),
|
||||||
AclList: s.aclList,
|
Configuration: s.configuration,
|
||||||
CreateStorage: s.storage.CreateTreeStorage,
|
HeadNotifiable: s.diffService,
|
||||||
|
Listener: listener,
|
||||||
|
AclList: s.aclList,
|
||||||
|
CreateStorage: s.storage.CreateTreeStorage,
|
||||||
}
|
}
|
||||||
return synctree.CreateSyncTree(ctx, deps)
|
return synctree.CreateSyncTree(ctx, deps)
|
||||||
}
|
}
|
||||||
@ -165,9 +173,9 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return s.syncService.SyncClient().SendSync(
|
return s.syncService.StreamPool().SendSync(
|
||||||
peerId,
|
peerId,
|
||||||
s.syncService.SyncClient().CreateNewTreeRequest(id),
|
synctree.GetRequestFactory().CreateNewTreeRequest(id),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,11 +212,14 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
deps := synctree.SyncTreeBuildDeps{
|
deps := synctree.BuildDeps{
|
||||||
SyncClient: s.syncService.SyncClient(),
|
SpaceId: s.id,
|
||||||
Listener: listener,
|
StreamPool: s.syncService.StreamPool(),
|
||||||
AclList: s.aclList,
|
Configuration: s.configuration,
|
||||||
Storage: store,
|
HeadNotifiable: s.diffService,
|
||||||
|
Listener: listener,
|
||||||
|
AclList: s.aclList,
|
||||||
|
Storage: store,
|
||||||
}
|
}
|
||||||
return synctree.BuildSyncTree(ctx, isFirstBuild, deps)
|
return synctree.BuildSyncTree(ctx, isFirstBuild, deps)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,14 +8,14 @@ import (
|
|||||||
|
|
||||||
type SyncACL struct {
|
type SyncACL struct {
|
||||||
list.ACLList
|
list.ACLList
|
||||||
syncservice.SyncClient
|
|
||||||
synchandler.SyncHandler
|
synchandler.SyncHandler
|
||||||
|
streamPool syncservice.StreamPool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSyncACL(aclList list.ACLList, syncClient syncservice.SyncClient) *SyncACL {
|
func NewSyncACL(aclList list.ACLList, streamPool syncservice.StreamPool) *SyncACL {
|
||||||
return &SyncACL{
|
return &SyncACL{
|
||||||
ACLList: aclList,
|
ACLList: aclList,
|
||||||
SyncClient: syncClient,
|
|
||||||
SyncHandler: nil,
|
SyncHandler: nil,
|
||||||
|
streamPool: streamPool,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,22 +18,18 @@ var log = logger.NewNamed("syncservice").Sugar()
|
|||||||
type SyncService interface {
|
type SyncService interface {
|
||||||
ocache.ObjectLastUsage
|
ocache.ObjectLastUsage
|
||||||
synchandler.SyncHandler
|
synchandler.SyncHandler
|
||||||
SyncClient() SyncClient
|
StreamPool() StreamPool
|
||||||
|
|
||||||
Init(getter objectgetter.ObjectGetter)
|
Init(getter objectgetter.ObjectGetter)
|
||||||
Close() (err error)
|
Close() (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type HeadNotifiable interface {
|
|
||||||
UpdateHeads(id string, heads []string)
|
|
||||||
}
|
|
||||||
|
|
||||||
const respPeersStreamCheckInterval = time.Second * 10
|
const respPeersStreamCheckInterval = time.Second * 10
|
||||||
|
|
||||||
type syncService struct {
|
type syncService struct {
|
||||||
spaceId string
|
spaceId string
|
||||||
|
|
||||||
syncClient SyncClient
|
streamPool StreamPool
|
||||||
clientFactory spacesyncproto.ClientFactory
|
clientFactory spacesyncproto.ClientFactory
|
||||||
objectGetter objectgetter.ObjectGetter
|
objectGetter objectgetter.ObjectGetter
|
||||||
|
|
||||||
@ -45,17 +41,13 @@ type syncService struct {
|
|||||||
|
|
||||||
func NewSyncService(
|
func NewSyncService(
|
||||||
spaceId string,
|
spaceId string,
|
||||||
headNotifiable HeadNotifiable,
|
|
||||||
configuration nodeconf.Configuration,
|
|
||||||
confConnector nodeconf.ConfConnector) (syncService SyncService) {
|
confConnector nodeconf.ConfConnector) (syncService SyncService) {
|
||||||
streamPool := newStreamPool(func(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) {
|
streamPool := newStreamPool(func(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
return syncService.HandleMessage(ctx, senderId, message)
|
return syncService.HandleMessage(ctx, senderId, message)
|
||||||
})
|
})
|
||||||
factory := newRequestFactory()
|
|
||||||
syncClient := newSyncClient(spaceId, streamPool, headNotifiable, factory, configuration)
|
|
||||||
syncService = newSyncService(
|
syncService = newSyncService(
|
||||||
spaceId,
|
spaceId,
|
||||||
syncClient,
|
streamPool,
|
||||||
spacesyncproto.ClientFactoryFunc(spacesyncproto.NewDRPCSpaceClient),
|
spacesyncproto.ClientFactoryFunc(spacesyncproto.NewDRPCSpaceClient),
|
||||||
confConnector)
|
confConnector)
|
||||||
return
|
return
|
||||||
@ -63,11 +55,11 @@ func NewSyncService(
|
|||||||
|
|
||||||
func newSyncService(
|
func newSyncService(
|
||||||
spaceId string,
|
spaceId string,
|
||||||
syncClient SyncClient,
|
streamPool StreamPool,
|
||||||
clientFactory spacesyncproto.ClientFactory,
|
clientFactory spacesyncproto.ClientFactory,
|
||||||
connector nodeconf.ConfConnector) *syncService {
|
connector nodeconf.ConfConnector) *syncService {
|
||||||
return &syncService{
|
return &syncService{
|
||||||
syncClient: syncClient,
|
streamPool: streamPool,
|
||||||
connector: connector,
|
connector: connector,
|
||||||
clientFactory: clientFactory,
|
clientFactory: clientFactory,
|
||||||
spaceId: spaceId,
|
spaceId: spaceId,
|
||||||
@ -84,11 +76,11 @@ func (s *syncService) Init(objectGetter objectgetter.ObjectGetter) {
|
|||||||
func (s *syncService) Close() (err error) {
|
func (s *syncService) Close() (err error) {
|
||||||
s.stopStreamLoop()
|
s.stopStreamLoop()
|
||||||
<-s.streamLoopDone
|
<-s.streamLoopDone
|
||||||
return s.syncClient.Close()
|
return s.streamPool.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *syncService) LastUsage() time.Time {
|
func (s *syncService) LastUsage() time.Time {
|
||||||
return s.syncClient.LastUsage()
|
return s.streamPool.LastUsage()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *syncService) HandleMessage(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) {
|
func (s *syncService) HandleMessage(ctx context.Context, senderId string, message *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||||
@ -107,7 +99,7 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
for _, peer := range respPeers {
|
for _, peer := range respPeers {
|
||||||
if s.syncClient.HasActiveStream(peer.Id()) {
|
if s.streamPool.HasActiveStream(peer.Id()) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
stream, err := s.clientFactory.Client(peer).Stream(ctx)
|
stream, err := s.clientFactory.Client(peer).Stream(ctx)
|
||||||
@ -125,7 +117,7 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) {
|
|||||||
log.With("spaceId", s.spaceId).Errorf("failed to send first message to stream: %v", err)
|
log.With("spaceId", s.spaceId).Errorf("failed to send first message to stream: %v", err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
s.syncClient.AddAndReadStreamAsync(stream)
|
s.streamPool.AddAndReadStreamAsync(stream)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -142,6 +134,6 @@ func (s *syncService) responsibleStreamCheckLoop(ctx context.Context) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *syncService) SyncClient() SyncClient {
|
func (s *syncService) StreamPool() StreamPool {
|
||||||
return s.syncClient
|
return s.streamPool
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package syncservice
|
package synctree
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -15,8 +15,10 @@ type RequestFactory interface {
|
|||||||
CreateFullSyncResponse(t tree.ObjectTree, theirHeads, theirSnapshotPath []string, trackingId string) (*spacesyncproto.ObjectSyncMessage, error)
|
CreateFullSyncResponse(t tree.ObjectTree, theirHeads, theirSnapshotPath []string, trackingId string) (*spacesyncproto.ObjectSyncMessage, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func newRequestFactory() RequestFactory {
|
var factory = &requestFactory{}
|
||||||
return &requestFactory{}
|
|
||||||
|
func GetRequestFactory() RequestFactory {
|
||||||
|
return factory
|
||||||
}
|
}
|
||||||
|
|
||||||
type requestFactory struct{}
|
type requestFactory struct{}
|
||||||
@ -1,28 +1,35 @@
|
|||||||
package syncservice
|
package synctree
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/ocache"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type SyncClient interface {
|
type SyncClient interface {
|
||||||
StreamPool
|
syncservice.StreamPool
|
||||||
RequestFactory
|
RequestFactory
|
||||||
ocache.ObjectLastUsage
|
ocache.ObjectLastUsage
|
||||||
BroadcastAsyncOrSendResponsible(message *spacesyncproto.ObjectSyncMessage) (err error)
|
BroadcastAsyncOrSendResponsible(message *spacesyncproto.ObjectSyncMessage) (err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type syncClient struct {
|
type syncClient struct {
|
||||||
StreamPool
|
syncservice.StreamPool
|
||||||
RequestFactory
|
RequestFactory
|
||||||
spaceId string
|
spaceId string
|
||||||
notifiable HeadNotifiable
|
notifiable diffservice.HeadNotifiable
|
||||||
configuration nodeconf.Configuration
|
configuration nodeconf.Configuration
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSyncClient(spaceId string, pool StreamPool, notifiable HeadNotifiable, factory RequestFactory, configuration nodeconf.Configuration) SyncClient {
|
func newSyncClient(
|
||||||
|
spaceId string,
|
||||||
|
pool syncservice.StreamPool,
|
||||||
|
notifiable diffservice.HeadNotifiable,
|
||||||
|
factory RequestFactory,
|
||||||
|
configuration nodeconf.Configuration) SyncClient {
|
||||||
return &syncClient{
|
return &syncClient{
|
||||||
StreamPool: pool,
|
StreamPool: pool,
|
||||||
RequestFactory: factory,
|
RequestFactory: factory,
|
||||||
@ -4,9 +4,11 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/diffservice"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/nodeconf"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/list"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/storage"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
||||||
@ -19,7 +21,7 @@ var ErrSyncTreeClosed = errors.New("sync tree is closed")
|
|||||||
type SyncTree struct {
|
type SyncTree struct {
|
||||||
tree.ObjectTree
|
tree.ObjectTree
|
||||||
synchandler.SyncHandler
|
synchandler.SyncHandler
|
||||||
syncClient syncservice.SyncClient
|
syncClient SyncClient
|
||||||
listener updatelistener.UpdateListener
|
listener updatelistener.UpdateListener
|
||||||
isClosed bool
|
isClosed bool
|
||||||
}
|
}
|
||||||
@ -30,78 +32,102 @@ var createDerivedObjectTree = tree.CreateDerivedObjectTree
|
|||||||
var createObjectTree = tree.CreateObjectTree
|
var createObjectTree = tree.CreateObjectTree
|
||||||
var buildObjectTree = tree.BuildObjectTree
|
var buildObjectTree = tree.BuildObjectTree
|
||||||
|
|
||||||
type SyncTreeCreateDeps struct {
|
type CreateDeps struct {
|
||||||
Payload tree.ObjectTreeCreatePayload
|
SpaceId string
|
||||||
SyncClient syncservice.SyncClient
|
Payload tree.ObjectTreeCreatePayload
|
||||||
Listener updatelistener.UpdateListener
|
Configuration nodeconf.Configuration
|
||||||
AclList list.ACLList
|
HeadNotifiable diffservice.HeadNotifiable
|
||||||
CreateStorage storage.TreeStorageCreatorFunc
|
StreamPool syncservice.StreamPool
|
||||||
|
Listener updatelistener.UpdateListener
|
||||||
|
AclList list.ACLList
|
||||||
|
CreateStorage storage.TreeStorageCreatorFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
type SyncTreeBuildDeps struct {
|
type BuildDeps struct {
|
||||||
SyncClient syncservice.SyncClient
|
SpaceId string
|
||||||
Listener updatelistener.UpdateListener
|
StreamPool syncservice.StreamPool
|
||||||
AclList list.ACLList
|
Configuration nodeconf.Configuration
|
||||||
Storage storage.TreeStorage
|
HeadNotifiable diffservice.HeadNotifiable
|
||||||
|
Listener updatelistener.UpdateListener
|
||||||
|
AclList list.ACLList
|
||||||
|
Storage storage.TreeStorage
|
||||||
}
|
}
|
||||||
|
|
||||||
func DeriveSyncTree(
|
func DeriveSyncTree(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
deps SyncTreeCreateDeps) (t tree.ObjectTree, err error) {
|
deps CreateDeps) (t tree.ObjectTree, err error) {
|
||||||
t, err = createDerivedObjectTree(deps.Payload, deps.AclList, deps.CreateStorage)
|
t, err = createDerivedObjectTree(deps.Payload, deps.AclList, deps.CreateStorage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
syncClient := newSyncClient(
|
||||||
|
deps.SpaceId,
|
||||||
|
deps.StreamPool,
|
||||||
|
deps.HeadNotifiable,
|
||||||
|
GetRequestFactory(),
|
||||||
|
deps.Configuration)
|
||||||
syncTree := &SyncTree{
|
syncTree := &SyncTree{
|
||||||
ObjectTree: t,
|
ObjectTree: t,
|
||||||
syncClient: deps.SyncClient,
|
syncClient: syncClient,
|
||||||
listener: deps.Listener,
|
listener: deps.Listener,
|
||||||
}
|
}
|
||||||
syncHandler := newSyncTreeHandler(syncTree, deps.SyncClient)
|
syncHandler := newSyncTreeHandler(syncTree, syncClient)
|
||||||
syncTree.SyncHandler = syncHandler
|
syncTree.SyncHandler = syncHandler
|
||||||
t = syncTree
|
t = syncTree
|
||||||
|
|
||||||
headUpdate := deps.SyncClient.CreateHeadUpdate(t, nil)
|
headUpdate := syncClient.CreateHeadUpdate(t, nil)
|
||||||
err = deps.SyncClient.BroadcastAsync(headUpdate)
|
err = syncClient.BroadcastAsync(headUpdate)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func CreateSyncTree(
|
func CreateSyncTree(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
deps SyncTreeCreateDeps) (t tree.ObjectTree, err error) {
|
deps CreateDeps) (t tree.ObjectTree, err error) {
|
||||||
t, err = createObjectTree(deps.Payload, deps.AclList, deps.CreateStorage)
|
t, err = createObjectTree(deps.Payload, deps.AclList, deps.CreateStorage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
syncClient := newSyncClient(
|
||||||
|
deps.SpaceId,
|
||||||
|
deps.StreamPool,
|
||||||
|
deps.HeadNotifiable,
|
||||||
|
GetRequestFactory(),
|
||||||
|
deps.Configuration)
|
||||||
syncTree := &SyncTree{
|
syncTree := &SyncTree{
|
||||||
ObjectTree: t,
|
ObjectTree: t,
|
||||||
syncClient: deps.SyncClient,
|
syncClient: syncClient,
|
||||||
listener: deps.Listener,
|
listener: deps.Listener,
|
||||||
}
|
}
|
||||||
syncHandler := newSyncTreeHandler(syncTree, deps.SyncClient)
|
syncHandler := newSyncTreeHandler(syncTree, syncClient)
|
||||||
syncTree.SyncHandler = syncHandler
|
syncTree.SyncHandler = syncHandler
|
||||||
t = syncTree
|
t = syncTree
|
||||||
|
|
||||||
headUpdate := deps.SyncClient.CreateHeadUpdate(t, nil)
|
headUpdate := syncClient.CreateHeadUpdate(t, nil)
|
||||||
err = deps.SyncClient.BroadcastAsync(headUpdate)
|
err = syncClient.BroadcastAsync(headUpdate)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func BuildSyncTree(
|
func BuildSyncTree(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
isFirstBuild bool,
|
isFirstBuild bool,
|
||||||
deps SyncTreeBuildDeps) (t tree.ObjectTree, err error) {
|
deps BuildDeps) (t tree.ObjectTree, err error) {
|
||||||
|
|
||||||
t, err = buildObjectTree(deps.Storage, deps.AclList)
|
t, err = buildObjectTree(deps.Storage, deps.AclList)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
syncClient := newSyncClient(
|
||||||
|
deps.SpaceId,
|
||||||
|
deps.StreamPool,
|
||||||
|
deps.HeadNotifiable,
|
||||||
|
GetRequestFactory(),
|
||||||
|
deps.Configuration)
|
||||||
syncTree := &SyncTree{
|
syncTree := &SyncTree{
|
||||||
ObjectTree: t,
|
ObjectTree: t,
|
||||||
syncClient: deps.SyncClient,
|
syncClient: syncClient,
|
||||||
listener: deps.Listener,
|
listener: deps.Listener,
|
||||||
}
|
}
|
||||||
syncHandler := newSyncTreeHandler(syncTree, deps.SyncClient)
|
syncHandler := newSyncTreeHandler(syncTree, syncClient)
|
||||||
syncTree.SyncHandler = syncHandler
|
syncTree.SyncHandler = syncHandler
|
||||||
t = syncTree
|
t = syncTree
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package synctree
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice"
|
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/mock_syncservice"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/mock_syncservice"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener/mock_updatelistener"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/synctree/updatelistener/mock_updatelistener"
|
||||||
@ -21,7 +20,7 @@ import (
|
|||||||
|
|
||||||
type syncTreeMatcher struct {
|
type syncTreeMatcher struct {
|
||||||
objTree tree2.ObjectTree
|
objTree tree2.ObjectTree
|
||||||
client syncservice.SyncClient
|
client SyncClient
|
||||||
listener updatelistener.UpdateListener
|
listener updatelistener.UpdateListener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package synctree
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/spacesyncproto"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice"
|
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace/syncservice/synchandler"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/tree"
|
||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/util/slice"
|
||||||
@ -11,10 +10,10 @@ import (
|
|||||||
|
|
||||||
type syncTreeHandler struct {
|
type syncTreeHandler struct {
|
||||||
objTree tree.ObjectTree
|
objTree tree.ObjectTree
|
||||||
syncClient syncservice.SyncClient
|
syncClient SyncClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSyncTreeHandler(objTree tree.ObjectTree, syncClient syncservice.SyncClient) synchandler.SyncHandler {
|
func newSyncTreeHandler(objTree tree.ObjectTree, syncClient SyncClient) synchandler.SyncHandler {
|
||||||
return &syncTreeHandler{
|
return &syncTreeHandler{
|
||||||
objTree: objTree,
|
objTree: objTree,
|
||||||
syncClient: syncClient,
|
syncClient: syncClient,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user