Wire up the stuff
This commit is contained in:
parent
796b66478b
commit
815bc7927d
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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
|
||||||
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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{
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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()).
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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")
|
||||||
|
|||||||
@ -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).
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user