Wire up the stuff

This commit is contained in:
mcrakhman 2023-06-02 00:59:33 +02:00
parent 796b66478b
commit 815bc7927d
No known key found for this signature in database
GPG Key ID: DED12CFEF5B8396B
18 changed files with 81 additions and 59 deletions

View File

@ -3,6 +3,7 @@ package credentialprovider
import ( import (
"context" "context"
"github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/spacesyncproto"
) )
@ -13,12 +14,21 @@ func NewNoOp() CredentialProvider {
} }
type CredentialProvider interface { type CredentialProvider interface {
app.Component
GetCredential(ctx context.Context, spaceHeader *spacesyncproto.RawSpaceHeaderWithId) ([]byte, error) GetCredential(ctx context.Context, spaceHeader *spacesyncproto.RawSpaceHeaderWithId) ([]byte, error)
} }
type noOpProvider struct { type noOpProvider struct {
} }
func (n noOpProvider) Init(a *app.App) (err error) {
return nil
}
func (n noOpProvider) Name() (name string) {
return CName
}
func (n noOpProvider) GetCredential(ctx context.Context, spaceHeader *spacesyncproto.RawSpaceHeaderWithId) ([]byte, error) { func (n noOpProvider) GetCredential(ctx context.Context, spaceHeader *spacesyncproto.RawSpaceHeaderWithId) ([]byte, error) {
return nil, nil return nil, nil
} }

View File

@ -79,7 +79,7 @@ func TestSpaceDeleteIds(t *testing.T) {
// creating a tree // creating a tree
bytes := make([]byte, 32) bytes := make([]byte, 32)
rand.Read(bytes) rand.Read(bytes)
doc, err := spc.CreateTree(ctx, objecttree.ObjectTreeCreatePayload{ doc, err := spc.TreeBuilder().CreateTree(ctx, objecttree.ObjectTreeCreatePayload{
PrivKey: acc.SignKey, PrivKey: acc.SignKey,
ChangeType: "some", ChangeType: "some",
SpaceId: spc.Id(), SpaceId: spc.Id(),
@ -88,7 +88,7 @@ func TestSpaceDeleteIds(t *testing.T) {
Timestamp: time.Now().Unix(), Timestamp: time.Now().Unix(),
}) })
require.NoError(t, err) require.NoError(t, err)
tr, err := spc.PutTree(ctx, doc, nil) tr, err := spc.TreeBuilder().PutTree(ctx, doc, nil)
require.NoError(t, err) require.NoError(t, err)
ids = append(ids, tr.Id()) ids = append(ids, tr.Id())
tr.Close() tr.Close()
@ -106,7 +106,7 @@ func TestSpaceDeleteIds(t *testing.T) {
func createTree(t *testing.T, ctx context.Context, spc Space, acc *accountdata.AccountKeys) string { func createTree(t *testing.T, ctx context.Context, spc Space, acc *accountdata.AccountKeys) string {
bytes := make([]byte, 32) bytes := make([]byte, 32)
rand.Read(bytes) rand.Read(bytes)
doc, err := spc.CreateTree(ctx, objecttree.ObjectTreeCreatePayload{ doc, err := spc.TreeBuilder().CreateTree(ctx, objecttree.ObjectTreeCreatePayload{
PrivKey: acc.SignKey, PrivKey: acc.SignKey,
ChangeType: "some", ChangeType: "some",
SpaceId: spc.Id(), SpaceId: spc.Id(),
@ -115,7 +115,7 @@ func createTree(t *testing.T, ctx context.Context, spc Space, acc *accountdata.A
Timestamp: time.Now().Unix(), Timestamp: time.Now().Unix(),
}) })
require.NoError(t, err) require.NoError(t, err)
tr, err := spc.PutTree(ctx, doc, nil) tr, err := spc.TreeBuilder().PutTree(ctx, doc, nil)
require.NoError(t, err) require.NoError(t, err)
tr.Close() tr.Close()
return tr.Id() return tr.Id()
@ -149,7 +149,7 @@ func TestSpaceDeleteIdsIncorrectSnapshot(t *testing.T) {
err = spc.Init(ctx) err = spc.Init(ctx)
require.NoError(t, err) require.NoError(t, err)
settingsObject := spc.(*space).settingsObject settingsObject := spc.(*space).app.MustComponent(settings.CName).(settings.Settings).SettingsObject()
var ids []string var ids []string
for i := 0; i < totalObjs; i++ { for i := 0; i < totalObjs; i++ {
id := createTree(t, ctx, spc, acc) id := createTree(t, ctx, spc, acc)
@ -193,7 +193,7 @@ func TestSpaceDeleteIdsIncorrectSnapshot(t *testing.T) {
require.Equal(t, len(ids), len(fx.treeManager.deletedIds)) require.Equal(t, len(ids), len(fx.treeManager.deletedIds))
// checking that new snapshot will contain all the changes // checking that new snapshot will contain all the changes
settingsObject = spc.(*space).settingsObject settingsObject = spc.(*space).app.MustComponent(settings.CName).(settings.Settings).SettingsObject()
settings.DoSnapshot = func(treeLen int) bool { settings.DoSnapshot = func(treeLen int) bool {
return true return true
} }
@ -231,7 +231,7 @@ func TestSpaceDeleteIdsMarkDeleted(t *testing.T) {
err = spc.Init(ctx) err = spc.Init(ctx)
require.NoError(t, err) require.NoError(t, err)
settingsObject := spc.(*space).settingsObject settingsObject := spc.(*space).app.MustComponent(settings.CName).(settings.Settings).SettingsObject()
var ids []string var ids []string
for i := 0; i < totalObjs; i++ { for i := 0; i < totalObjs; i++ {
id := createTree(t, ctx, spc, acc) id := createTree(t, ctx, spc, acc)

View File

@ -4,7 +4,6 @@ package deletionstate
import ( import (
"github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/app/logger" "github.com/anyproto/any-sync/app/logger"
"github.com/anyproto/any-sync/commonspace/spacestate"
"github.com/anyproto/any-sync/commonspace/spacestorage" "github.com/anyproto/any-sync/commonspace/spacestorage"
"go.uber.org/zap" "go.uber.org/zap"
"sync" "sync"
@ -36,7 +35,7 @@ type objectDeletionState struct {
} }
func (st *objectDeletionState) Init(a *app.App) (err error) { func (st *objectDeletionState) Init(a *app.App) (err error) {
st.storage = a.MustComponent(spacestate.CName).(*spacestate.SpaceState).SpaceStorage st.storage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
return nil return nil
} }

View File

@ -67,18 +67,18 @@ func New() HeadSync {
func (h *headSync) Init(a *app.App) (err error) { func (h *headSync) Init(a *app.App) (err error) {
shared := a.MustComponent(spacestate.CName).(*spacestate.SpaceState) shared := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
cfg := a.MustComponent("cfg").(config2.ConfigGetter) cfg := a.MustComponent("config").(config2.ConfigGetter)
h.spaceId = shared.SpaceId h.spaceId = shared.SpaceId
h.spaceIsDeleted = shared.SpaceIsDeleted h.spaceIsDeleted = shared.SpaceIsDeleted
h.syncPeriod = cfg.GetSpace().SyncPeriod h.syncPeriod = cfg.GetSpace().SyncPeriod
h.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf) h.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
h.log = log.With(zap.String("spaceId", h.spaceId)) h.log = log.With(zap.String("spaceId", h.spaceId))
h.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) h.storage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
h.diff = ldiff.New(16, 16) h.diff = ldiff.New(16, 16)
h.peerManager = a.MustComponent(peermanager.CName).(peermanager.PeerManager) h.peerManager = a.MustComponent(peermanager.ManagerName).(peermanager.PeerManager)
h.credentialProvider = a.MustComponent(credentialprovider.CName).(credentialprovider.CredentialProvider) h.credentialProvider = a.MustComponent(credentialprovider.CName).(credentialprovider.CredentialProvider)
h.syncStatus = a.MustComponent(syncstatus.CName).(syncstatus.StatusProvider) h.syncStatus = a.MustComponent(syncstatus.CName).(syncstatus.StatusProvider)
h.treeManager = a.MustComponent(treemanager.CName).(treemanager.TreeManager) h.treeManager = app.MustComponent[treemanager.TreeManager](a)
h.deletionState = a.MustComponent(deletionstate.CName).(deletionstate.ObjectDeletionState) h.deletionState = a.MustComponent(deletionstate.CName).(deletionstate.ObjectDeletionState)
h.syncer = newDiffSyncer(h) h.syncer = newDiffSyncer(h)
sync := func(ctx context.Context) (err error) { sync := func(ctx context.Context) (err error) {

View File

@ -24,7 +24,7 @@ func (s *SyncAcl) HandleMessage(ctx context.Context, senderId string, request *s
} }
func (s *SyncAcl) Init(a *app.App) (err error) { func (s *SyncAcl) Init(a *app.App) (err error) {
storage := a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) storage := a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
aclStorage, err := storage.AclStorage() aclStorage, err := storage.AclStorage()
if err != nil { if err != nil {
return err return err

View File

@ -25,6 +25,7 @@ type syncTreeHandler struct {
const maxQueueSize = 5 const maxQueueSize = 5
// TODO: Make sync and async message handling
func newSyncTreeHandler(spaceId string, objTree objecttree.ObjectTree, syncClient syncclient.SyncClient, syncStatus syncstatus.StatusUpdater) synchandler.SyncHandler { func newSyncTreeHandler(spaceId string, objTree objecttree.ObjectTree, syncClient syncclient.SyncClient, syncStatus syncstatus.StatusUpdater) synchandler.SyncHandler {
return &syncTreeHandler{ return &syncTreeHandler{
objTree: objTree, objTree: objTree,
@ -119,7 +120,7 @@ func (s *syncTreeHandler) handleHeadUpdate(
return return
} }
return s.syncClient.QueueRequest(ctx, senderId, treeId, fullRequest, replyId) return s.syncClient.QueueRequest(senderId, treeId, fullRequest)
} }
if s.alreadyHasHeads(objTree, update.Heads) { if s.alreadyHasHeads(objTree, update.Heads) {
@ -143,7 +144,7 @@ func (s *syncTreeHandler) handleHeadUpdate(
return return
} }
return s.syncClient.QueueRequest(ctx, senderId, treeId, fullRequest, replyId) return s.syncClient.QueueRequest(senderId, treeId, fullRequest)
} }
func (s *syncTreeHandler) handleFullSyncRequest( func (s *syncTreeHandler) handleFullSyncRequest(
@ -169,7 +170,7 @@ func (s *syncTreeHandler) handleFullSyncRequest(
defer func() { defer func() {
if err != nil { if err != nil {
log.ErrorCtx(ctx, "full sync request finished with error", zap.Error(err)) log.ErrorCtx(ctx, "full sync request finished with error", zap.Error(err))
s.syncClient.QueueRequest(ctx, senderId, treeId, treechangeproto.WrapError(treechangeproto.ErrFullSync, header), replyId) s.syncClient.QueueRequest(senderId, treeId, treechangeproto.WrapError(treechangeproto.ErrFullSync, header))
return return
} else if fullResponse != nil { } else if fullResponse != nil {
cnt := fullResponse.Content.GetFullSyncResponse() cnt := fullResponse.Content.GetFullSyncResponse()
@ -192,7 +193,7 @@ func (s *syncTreeHandler) handleFullSyncRequest(
return return
} }
return s.syncClient.QueueRequest(ctx, senderId, treeId, fullResponse, replyId) return s.syncClient.QueueRequest(senderId, treeId, fullResponse)
} }
func (s *syncTreeHandler) handleFullSyncResponse( func (s *syncTreeHandler) handleFullSyncResponse(

View File

@ -1,7 +1,8 @@
package commonspace package objectmanager
import ( import (
"context" "context"
"errors"
"github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl" "github.com/anyproto/any-sync/commonspace/object/acl/syncacl"
"github.com/anyproto/any-sync/commonspace/object/syncobjectgetter" "github.com/anyproto/any-sync/commonspace/object/syncobjectgetter"
@ -12,6 +13,12 @@ import (
"sync/atomic" "sync/atomic"
) )
var (
ErrSpaceClosed = errors.New("space is closed")
)
const CName = "common.commonspace.objectmanager"
type ObjectManager interface { type ObjectManager interface {
treemanager.TreeManager treemanager.TreeManager
AddObject(object syncobjectgetter.SyncObject) AddObject(object syncobjectgetter.SyncObject)
@ -25,7 +32,7 @@ type objectManager struct {
spaceIsClosed *atomic.Bool spaceIsClosed *atomic.Bool
} }
func NewObjectManager(manager treemanager.TreeManager) ObjectManager { func New(manager treemanager.TreeManager) ObjectManager {
return &objectManager{ return &objectManager{
TreeManager: manager, TreeManager: manager,
} }
@ -54,6 +61,10 @@ func (o *objectManager) AddObject(object syncobjectgetter.SyncObject) {
o.reservedObjects = append(o.reservedObjects, object) o.reservedObjects = append(o.reservedObjects, object)
} }
func (o *objectManager) Name() string {
return CName
}
func (o *objectManager) GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) { func (o *objectManager) GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) {
if o.spaceIsClosed.Load() { if o.spaceIsClosed.Load() {
return nil, ErrSpaceClosed return nil, ErrSpaceClosed

View File

@ -5,7 +5,6 @@ import (
"context" "context"
"fmt" "fmt"
"github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/commonspace/object/treemanager"
"github.com/anyproto/any-sync/commonspace/objectsync/syncclient" "github.com/anyproto/any-sync/commonspace/objectsync/syncclient"
"github.com/anyproto/any-sync/commonspace/spacestate" "github.com/anyproto/any-sync/commonspace/spacestate"
"github.com/anyproto/any-sync/metric" "github.com/anyproto/any-sync/metric"
@ -69,11 +68,14 @@ type objectSync struct {
func (s *objectSync) Init(a *app.App) (err error) { func (s *objectSync) Init(a *app.App) (err error) {
s.syncClient = a.MustComponent(syncclient.CName).(syncclient.SyncClient) s.syncClient = a.MustComponent(syncclient.CName).(syncclient.SyncClient)
s.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) s.spaceStorage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
s.objectGetter = a.MustComponent(treemanager.CName).(treemanager.TreeManager).(syncobjectgetter.SyncObjectGetter) s.objectGetter = app.MustComponent[syncobjectgetter.SyncObjectGetter](a)
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf) s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
sharedData := a.MustComponent(spacestate.CName).(*spacestate.SpaceState) sharedData := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
s.metric = a.MustComponent(metric.CName).(metric.Metric) mc := a.Component(metric.CName)
if mc != nil {
s.metric = mc.(metric.Metric)
}
s.spaceIsDeleted = sharedData.SpaceIsDeleted s.spaceIsDeleted = sharedData.SpaceIsDeleted
s.spaceId = sharedData.SpaceId s.spaceId = sharedData.SpaceId
s.handleQueue = multiqueue.New[HandleMessage](s.processHandleMessage, 100) s.handleQueue = multiqueue.New[HandleMessage](s.processHandleMessage, 100)

View File

@ -81,11 +81,11 @@ func (t *treeBuilder) Init(a *app.App) (err error) {
t.treesUsed = state.TreesUsed t.treesUsed = state.TreesUsed
t.builder = state.TreeBuilderFunc t.builder = state.TreeBuilderFunc
t.aclList = a.MustComponent(syncacl.CName).(*syncacl.SyncAcl) t.aclList = a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
t.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) t.spaceStorage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
t.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf) t.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
t.headsNotifiable = a.MustComponent(headsync.CName).(headsync.HeadSync) t.headsNotifiable = a.MustComponent(headsync.CName).(headsync.HeadSync)
t.syncStatus = a.MustComponent(syncstatus.CName).(syncstatus.StatusUpdater) t.syncStatus = a.MustComponent(syncstatus.CName).(syncstatus.StatusUpdater)
t.peerManager = a.MustComponent(peermanager.CName).(peermanager.PeerManager) t.peerManager = a.MustComponent(peermanager.ManagerName).(peermanager.PeerManager)
t.objectSync = a.MustComponent(objectsync.CName).(objectsync.ObjectSync) t.objectSync = a.MustComponent(objectsync.CName).(objectsync.ObjectSync)
t.log = log.With(zap.String("spaceId", t.spaceId)) t.log = log.With(zap.String("spaceId", t.spaceId))
return nil return nil

View File

@ -8,7 +8,10 @@ import (
"github.com/anyproto/any-sync/net/peer" "github.com/anyproto/any-sync/net/peer"
) )
const CName = "common.commonspace.peermanager" const (
ProviderName = "common.commonspace.peermanagerprovider"
ManagerName = "common.commonspace.peermanager"
)
type PeerManager interface { type PeerManager interface {
app.Component app.Component

View File

@ -48,14 +48,14 @@ type settings struct {
func (s *settings) Init(a *app.App) (err error) { func (s *settings) Init(a *app.App) (err error) {
s.account = a.MustComponent(accountservice.CName).(accountservice.Service) s.account = a.MustComponent(accountservice.CName).(accountservice.Service)
s.treeManager = a.MustComponent(treemanager.CName).(treemanager.TreeManager) s.treeManager = app.MustComponent[treemanager.TreeManager](a)
s.headsync = a.MustComponent(headsync.CName).(headsync.HeadSync) s.headsync = a.MustComponent(headsync.CName).(headsync.HeadSync)
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf) s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
s.deletionState = a.MustComponent(deletionstate.CName).(deletionstate.ObjectDeletionState) s.deletionState = a.MustComponent(deletionstate.CName).(deletionstate.ObjectDeletionState)
s.treeBuilder = a.MustComponent(objecttreebuilder.CName).(objecttreebuilder.TreeBuilderComponent) s.treeBuilder = a.MustComponent(objecttreebuilder.CName).(objecttreebuilder.TreeBuilderComponent)
sharedState := a.MustComponent(spacestate.CName).(*spacestate.SpaceState) sharedState := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
s.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) s.storage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
s.spaceIsDeleted = sharedState.SpaceIsDeleted s.spaceIsDeleted = sharedState.SpaceIsDeleted
deps := Deps{ deps := Deps{

View File

@ -2,7 +2,6 @@ package commonspace
import ( import (
"context" "context"
"errors"
"github.com/anyproto/any-sync/app" "github.com/anyproto/any-sync/app"
"github.com/anyproto/any-sync/commonspace/headsync" "github.com/anyproto/any-sync/commonspace/headsync"
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
@ -21,10 +20,6 @@ import (
"time" "time"
) )
var (
ErrSpaceClosed = errors.New("space is closed")
)
type SpaceCreatePayload struct { type SpaceCreatePayload struct {
// SigningKey is the signing key of the owner // SigningKey is the signing key of the owner
SigningKey crypto.PrivKey SigningKey crypto.PrivKey
@ -126,7 +121,7 @@ func (s *space) Init(ctx context.Context) (err error) {
s.syncStatus = s.app.MustComponent(syncstatus.CName).(syncstatus.StatusProvider) s.syncStatus = s.app.MustComponent(syncstatus.CName).(syncstatus.StatusProvider)
s.settings = s.app.MustComponent(settings.CName).(settings.Settings) s.settings = s.app.MustComponent(settings.CName).(settings.Settings)
s.objectSync = s.app.MustComponent(objectsync.CName).(objectsync.ObjectSync) s.objectSync = s.app.MustComponent(objectsync.CName).(objectsync.ObjectSync)
s.storage = s.app.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) s.storage = s.app.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
return nil return nil
} }

View File

@ -14,6 +14,7 @@ import (
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto" "github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
"github.com/anyproto/any-sync/commonspace/object/treemanager" "github.com/anyproto/any-sync/commonspace/object/treemanager"
"github.com/anyproto/any-sync/commonspace/objectmanager"
"github.com/anyproto/any-sync/commonspace/objectsync" "github.com/anyproto/any-sync/commonspace/objectsync"
"github.com/anyproto/any-sync/commonspace/objectsync/syncclient" "github.com/anyproto/any-sync/commonspace/objectsync/syncclient"
"github.com/anyproto/any-sync/commonspace/objecttreebuilder" "github.com/anyproto/any-sync/commonspace/objecttreebuilder"
@ -24,7 +25,6 @@ import (
"github.com/anyproto/any-sync/commonspace/spacestorage" "github.com/anyproto/any-sync/commonspace/spacestorage"
"github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/spacesyncproto"
"github.com/anyproto/any-sync/commonspace/streamsender" "github.com/anyproto/any-sync/commonspace/streamsender"
"github.com/anyproto/any-sync/commonspace/syncstatus"
"github.com/anyproto/any-sync/metric" "github.com/anyproto/any-sync/metric"
"github.com/anyproto/any-sync/net/peer" "github.com/anyproto/any-sync/net/peer"
"github.com/anyproto/any-sync/net/pool" "github.com/anyproto/any-sync/net/pool"
@ -69,16 +69,10 @@ type spaceService struct {
func (s *spaceService) Init(a *app.App) (err error) { func (s *spaceService) Init(a *app.App) (err error) {
s.config = a.MustComponent("config").(config.ConfigGetter).GetSpace() s.config = a.MustComponent("config").(config.ConfigGetter).GetSpace()
s.account = a.MustComponent(accountservice.CName).(accountservice.Service) s.account = a.MustComponent(accountservice.CName).(accountservice.Service)
s.storageProvider = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorageProvider) s.storageProvider = a.MustComponent(spacestorage.ProviderName).(spacestorage.SpaceStorageProvider)
s.configurationService = a.MustComponent(nodeconf.CName).(nodeconf.Service) s.configurationService = a.MustComponent(nodeconf.CName).(nodeconf.Service)
s.treeManager = a.MustComponent(treemanager.CName).(treemanager.TreeManager) s.treeManager = a.MustComponent(treemanager.CName).(treemanager.TreeManager)
s.peermanagerProvider = a.MustComponent(peermanager.CName).(peermanager.PeerManagerProvider) s.peermanagerProvider = a.MustComponent(peermanager.ProviderName).(peermanager.PeerManagerProvider)
credProvider := a.Component(credentialprovider.CName)
if credProvider != nil {
s.credentialProvider = credProvider.(credentialprovider.CredentialProvider)
} else {
s.credentialProvider = credentialprovider.NewNoOp()
}
s.pool = a.MustComponent(pool.CName).(pool.Pool) s.pool = a.MustComponent(pool.CName).(pool.Pool)
s.metric, _ = a.Component(metric.CName).(metric.Metric) s.metric, _ = a.Component(metric.CName).(metric.Metric)
s.app = a s.app = a
@ -169,13 +163,6 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
} else { } else {
state.TreeBuilderFunc = objecttree.BuildEmptyDataObjectTree state.TreeBuilderFunc = objecttree.BuildEmptyDataObjectTree
} }
var syncStatus syncstatus.StatusProvider
if !s.configurationService.IsResponsible(st.Id()) {
// TODO: move it to the client package and add possibility to inject StatusProvider from the client
syncStatus = syncstatus.NewSyncStatusProvider()
} else {
syncStatus = syncstatus.NewNoOpSyncStatus()
}
peerManager, err := s.peermanagerProvider.NewPeerManager(ctx, id) peerManager, err := s.peermanagerProvider.NewPeerManager(ctx, id)
if err != nil { if err != nil {
return nil, err return nil, err
@ -185,12 +172,11 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
Register(peerManager). Register(peerManager).
Register(newCommonStorage(st)). Register(newCommonStorage(st)).
Register(syncacl.New()). Register(syncacl.New()).
Register(syncStatus).
Register(streamsender.New()). Register(streamsender.New()).
Register(requestsender.New()). Register(requestsender.New()).
Register(deletionstate.New()). Register(deletionstate.New()).
Register(settings.New()). Register(settings.New()).
Register(NewObjectManager(s.treeManager)). Register(objectmanager.New(s.treeManager)).
Register(syncclient.New()). Register(syncclient.New()).
Register(objecttreebuilder.New()). Register(objecttreebuilder.New()).
Register(objectsync.New()). Register(objectsync.New()).

View File

@ -22,7 +22,7 @@ func (i *InMemorySpaceStorageProvider) Init(a *app.App) (err error) {
} }
func (i *InMemorySpaceStorageProvider) Name() (name string) { func (i *InMemorySpaceStorageProvider) Name() (name string) {
return CName return ProviderName
} }
func (i *InMemorySpaceStorageProvider) WaitSpaceStorage(ctx context.Context, id string) (SpaceStorage, error) { func (i *InMemorySpaceStorageProvider) WaitSpaceStorage(ctx context.Context, id string) (SpaceStorage, error) {

View File

@ -27,7 +27,7 @@ func (i *InMemorySpaceStorage) Init(a *app.App) (err error) {
} }
func (i *InMemorySpaceStorage) Name() (name string) { func (i *InMemorySpaceStorage) Name() (name string) {
return CName return StorageName
} }
func NewInMemorySpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error) { func NewInMemorySpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error) {

View File

@ -12,7 +12,10 @@ import (
"github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/spacesyncproto"
) )
const CName = "common.commonspace.spacestorage" const (
ProviderName = "common.commonspace.spacestorageprovider"
StorageName = "common.commonspace.spacestorage"
)
var ( var (
ErrSpaceStorageExists = errors.New("space storage exists") ErrSpaceStorageExists = errors.New("space storage exists")

View File

@ -10,9 +10,11 @@ import (
"github.com/anyproto/any-sync/commonspace/credentialprovider" "github.com/anyproto/any-sync/commonspace/credentialprovider"
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree" "github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
"github.com/anyproto/any-sync/commonspace/object/treemanager" "github.com/anyproto/any-sync/commonspace/object/treemanager"
"github.com/anyproto/any-sync/commonspace/objecttreebuilder"
"github.com/anyproto/any-sync/commonspace/peermanager" "github.com/anyproto/any-sync/commonspace/peermanager"
"github.com/anyproto/any-sync/commonspace/spacestorage" "github.com/anyproto/any-sync/commonspace/spacestorage"
"github.com/anyproto/any-sync/commonspace/spacesyncproto" "github.com/anyproto/any-sync/commonspace/spacesyncproto"
"github.com/anyproto/any-sync/commonspace/syncstatus"
"github.com/anyproto/any-sync/net/peer" "github.com/anyproto/any-sync/net/peer"
"github.com/anyproto/any-sync/net/pool" "github.com/anyproto/any-sync/net/pool"
"github.com/anyproto/any-sync/nodeconf" "github.com/anyproto/any-sync/nodeconf"
@ -129,6 +131,14 @@ func (m *mockConf) NodeTypes(nodeId string) []nodeconf.NodeType {
type mockPeerManager struct { type mockPeerManager struct {
} }
func (p *mockPeerManager) Init(a *app.App) (err error) {
return nil
}
func (p *mockPeerManager) Name() (name string) {
return peermanager.ManagerName
}
func (p *mockPeerManager) SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error) { func (p *mockPeerManager) SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error) {
return nil return nil
} }
@ -153,7 +163,7 @@ func (m *mockPeerManagerProvider) Init(a *app.App) (err error) {
} }
func (m *mockPeerManagerProvider) Name() (name string) { func (m *mockPeerManagerProvider) Name() (name string) {
return peermanager.CName return peermanager.ProviderName
} }
func (m *mockPeerManagerProvider) NewPeerManager(ctx context.Context, spaceId string) (sm peermanager.PeerManager, err error) { func (m *mockPeerManagerProvider) NewPeerManager(ctx context.Context, spaceId string) (sm peermanager.PeerManager, err error) {
@ -250,7 +260,7 @@ func (t *mockTreeManager) MarkTreeDeleted(ctx context.Context, spaceId, treeId s
func (t *mockTreeManager) Init(a *app.App) (err error) { func (t *mockTreeManager) Init(a *app.App) (err error) {
t.cache = ocache.New(func(ctx context.Context, id string) (value ocache.Object, err error) { t.cache = ocache.New(func(ctx context.Context, id string) (value ocache.Object, err error) {
return t.space.BuildTree(ctx, id, BuildTreeOpts{}) return t.space.TreeBuilder().BuildTree(ctx, id, objecttreebuilder.BuildTreeOpts{})
}, },
ocache.WithGCPeriod(time.Minute), ocache.WithGCPeriod(time.Minute),
ocache.WithTTL(time.Duration(60)*time.Second)) ocache.WithTTL(time.Duration(60)*time.Second))
@ -325,6 +335,8 @@ func newFixture(t *testing.T) *spaceFixture {
} }
fx.app.Register(fx.account). fx.app.Register(fx.account).
Register(fx.config). Register(fx.config).
Register(syncstatus.NewNoOpSyncStatus()).
Register(credentialprovider.NewNoOp()).
Register(fx.configurationService). Register(fx.configurationService).
Register(fx.storageProvider). Register(fx.storageProvider).
Register(fx.peermanagerProvider). Register(fx.peermanagerProvider).

View File

@ -104,7 +104,7 @@ func (s *syncStatusProvider) Init(a *app.App) (err error) {
s.updateTimeout = syncTimeout s.updateTimeout = syncTimeout
s.spaceId = sharedState.SpaceId s.spaceId = sharedState.SpaceId
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf) s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
s.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage) s.storage = a.MustComponent(spacestorage.StorageName).(spacestorage.SpaceStorage)
return return
} }