Further components rearrange
This commit is contained in:
parent
eeb87dd144
commit
796b66478b
@ -73,7 +73,7 @@ func (h *headSync) Init(a *app.App) (err error) {
|
||||
h.syncPeriod = cfg.GetSpace().SyncPeriod
|
||||
h.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||
h.log = log.With(zap.String("spaceId", h.spaceId))
|
||||
h.storage = a.MustComponent("spacestorage").(spacestorage.SpaceStorage)
|
||||
h.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
h.diff = ldiff.New(16, 16)
|
||||
h.peerManager = a.MustComponent(peermanager.CName).(peermanager.PeerManager)
|
||||
h.credentialProvider = a.MustComponent(credentialprovider.CName).(credentialprovider.CredentialProvider)
|
||||
|
||||
@ -1,18 +1,39 @@
|
||||
package syncacl
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/anyproto/any-sync/accountservice"
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||
"github.com/anyproto/any-sync/commonspace/objectsync/synchandler"
|
||||
"github.com/anyproto/any-sync/commonspace/spacestorage"
|
||||
"github.com/anyproto/any-sync/commonspace/spacesyncproto"
|
||||
)
|
||||
|
||||
const CName = "common.acl.syncacl"
|
||||
|
||||
func New() *SyncAcl {
|
||||
return &SyncAcl{}
|
||||
}
|
||||
|
||||
type SyncAcl struct {
|
||||
list.AclList
|
||||
synchandler.SyncHandler
|
||||
}
|
||||
|
||||
func NewSyncAcl(aclList list.AclList) *SyncAcl {
|
||||
return &SyncAcl{
|
||||
AclList: aclList,
|
||||
SyncHandler: nil,
|
||||
func (s *SyncAcl) HandleMessage(ctx context.Context, senderId string, request *spacesyncproto.ObjectSyncMessage) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *SyncAcl) Init(a *app.App) (err error) {
|
||||
storage := a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
aclStorage, err := storage.AclStorage()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
acc := a.MustComponent(accountservice.CName).(accountservice.Service)
|
||||
s.AclList, err = list.BuildAclListWithIdentity(acc.Account(), aclStorage)
|
||||
return err
|
||||
}
|
||||
|
||||
func (s *SyncAcl) Name() (name string) {
|
||||
return CName
|
||||
}
|
||||
|
||||
@ -3,9 +3,11 @@ package commonspace
|
||||
import (
|
||||
"context"
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl"
|
||||
"github.com/anyproto/any-sync/commonspace/object/syncobjectgetter"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
||||
"github.com/anyproto/any-sync/commonspace/object/treemanager"
|
||||
"github.com/anyproto/any-sync/commonspace/settings"
|
||||
"github.com/anyproto/any-sync/commonspace/spacestate"
|
||||
"sync/atomic"
|
||||
)
|
||||
@ -29,37 +31,41 @@ func NewObjectManager(manager treemanager.TreeManager) ObjectManager {
|
||||
}
|
||||
}
|
||||
|
||||
func (c *objectManager) Init(a *app.App) (err error) {
|
||||
func (o *objectManager) Init(a *app.App) (err error) {
|
||||
state := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||
c.spaceId = state.SpaceId
|
||||
c.spaceIsClosed = state.SpaceIsClosed
|
||||
o.spaceId = state.SpaceId
|
||||
o.spaceIsClosed = state.SpaceIsClosed
|
||||
settingsObject := a.MustComponent(settings.CName).(settings.Settings).SettingsObject()
|
||||
acl := a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
|
||||
o.AddObject(settingsObject)
|
||||
o.AddObject(acl)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *objectManager) Run(ctx context.Context) (err error) {
|
||||
func (o *objectManager) Run(ctx context.Context) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *objectManager) Close(ctx context.Context) (err error) {
|
||||
func (o *objectManager) Close(ctx context.Context) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *objectManager) AddObject(object syncobjectgetter.SyncObject) {
|
||||
c.reservedObjects = append(c.reservedObjects, object)
|
||||
func (o *objectManager) AddObject(object syncobjectgetter.SyncObject) {
|
||||
o.reservedObjects = append(o.reservedObjects, object)
|
||||
}
|
||||
|
||||
func (c *objectManager) GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) {
|
||||
if c.spaceIsClosed.Load() {
|
||||
func (o *objectManager) GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) {
|
||||
if o.spaceIsClosed.Load() {
|
||||
return nil, ErrSpaceClosed
|
||||
}
|
||||
if obj := c.getReservedObject(treeId); obj != nil {
|
||||
if obj := o.getReservedObject(treeId); obj != nil {
|
||||
return obj.(objecttree.ObjectTree), nil
|
||||
}
|
||||
return c.TreeManager.GetTree(ctx, spaceId, treeId)
|
||||
return o.TreeManager.GetTree(ctx, spaceId, treeId)
|
||||
}
|
||||
|
||||
func (c *objectManager) getReservedObject(id string) syncobjectgetter.SyncObject {
|
||||
for _, obj := range c.reservedObjects {
|
||||
func (o *objectManager) getReservedObject(id string) syncobjectgetter.SyncObject {
|
||||
for _, obj := range o.reservedObjects {
|
||||
if obj != nil && obj.Id() == id {
|
||||
return obj
|
||||
}
|
||||
@ -67,14 +73,14 @@ func (c *objectManager) getReservedObject(id string) syncobjectgetter.SyncObject
|
||||
return nil
|
||||
}
|
||||
|
||||
func (c *objectManager) GetObject(ctx context.Context, objectId string) (obj syncobjectgetter.SyncObject, err error) {
|
||||
if c.spaceIsClosed.Load() {
|
||||
func (o *objectManager) GetObject(ctx context.Context, objectId string) (obj syncobjectgetter.SyncObject, err error) {
|
||||
if o.spaceIsClosed.Load() {
|
||||
return nil, ErrSpaceClosed
|
||||
}
|
||||
if obj := c.getReservedObject(objectId); obj != nil {
|
||||
if obj := o.getReservedObject(objectId); obj != nil {
|
||||
return obj, nil
|
||||
}
|
||||
t, err := c.TreeManager.GetTree(ctx, c.spaceId, objectId)
|
||||
t, err := o.TreeManager.GetTree(ctx, o.spaceId, objectId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@ -69,6 +69,7 @@ type objectSync struct {
|
||||
|
||||
func (s *objectSync) Init(a *app.App) (err error) {
|
||||
s.syncClient = a.MustComponent(syncclient.CName).(syncclient.SyncClient)
|
||||
s.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
s.objectGetter = a.MustComponent(treemanager.CName).(treemanager.TreeManager).(syncobjectgetter.SyncObjectGetter)
|
||||
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||
sharedData := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||
|
||||
@ -7,6 +7,7 @@ import (
|
||||
"github.com/anyproto/any-sync/app/logger"
|
||||
"github.com/anyproto/any-sync/commonspace/headsync"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/synctree"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/synctree/updatelistener"
|
||||
@ -76,14 +77,13 @@ type treeBuilder struct {
|
||||
func (t *treeBuilder) Init(a *app.App) (err error) {
|
||||
state := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||
t.spaceId = state.SpaceId
|
||||
t.aclList = state.AclList
|
||||
t.isClosed = state.SpaceIsClosed
|
||||
t.spaceStorage = state.SpaceStorage
|
||||
t.treesUsed = state.TreesUsed
|
||||
t.builder = state.TreeBuilderFunc
|
||||
t.aclList = a.MustComponent(syncacl.CName).(*syncacl.SyncAcl)
|
||||
t.spaceStorage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
t.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||
t.headsNotifiable = a.MustComponent(headsync.CName).(headsync.HeadSync)
|
||||
t.spaceStorage = state.SpaceStorage
|
||||
t.syncStatus = a.MustComponent(syncstatus.CName).(syncstatus.StatusUpdater)
|
||||
t.peerManager = a.MustComponent(peermanager.CName).(peermanager.PeerManager)
|
||||
t.objectSync = a.MustComponent(objectsync.CName).(objectsync.ObjectSync)
|
||||
|
||||
@ -11,6 +11,7 @@ import (
|
||||
const CName = "common.commonspace.peermanager"
|
||||
|
||||
type PeerManager interface {
|
||||
app.Component
|
||||
// SendPeer sends a message to a stream by peerId
|
||||
SendPeer(ctx context.Context, peerId string, msg *spacesyncproto.ObjectSyncMessage) (err error)
|
||||
// Broadcast sends a message to all subscribed peers
|
||||
|
||||
@ -25,6 +25,7 @@ type Settings interface {
|
||||
DeleteTree(ctx context.Context, id string) (err error)
|
||||
SpaceDeleteRawChange(ctx context.Context) (raw *treechangeproto.RawTreeChangeWithId, err error)
|
||||
DeleteSpace(ctx context.Context, deleteChange *treechangeproto.RawTreeChangeWithId) (err error)
|
||||
SettingsObject() SettingsObject
|
||||
app.ComponentRunnable
|
||||
}
|
||||
|
||||
@ -54,7 +55,7 @@ func (s *settings) Init(a *app.App) (err error) {
|
||||
s.treeBuilder = a.MustComponent(objecttreebuilder.CName).(objecttreebuilder.TreeBuilderComponent)
|
||||
|
||||
sharedState := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||
s.storage = sharedState.SpaceStorage
|
||||
s.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
s.spaceIsDeleted = sharedState.SpaceIsDeleted
|
||||
|
||||
deps := Deps{
|
||||
@ -115,3 +116,7 @@ func (s *settings) onSpaceDelete() {
|
||||
}
|
||||
s.spaceIsDeleted.Swap(true)
|
||||
}
|
||||
|
||||
func (s *settings) SettingsObject() SettingsObject {
|
||||
return s.settingsObject
|
||||
}
|
||||
|
||||
@ -89,6 +89,7 @@ type space struct {
|
||||
objectSync objectsync.ObjectSync
|
||||
syncStatus syncstatus.StatusProvider
|
||||
settings settings.Settings
|
||||
storage spacestorage.SpaceStorage
|
||||
}
|
||||
|
||||
func (s *space) DeleteTree(ctx context.Context, id string) (err error) {
|
||||
@ -125,19 +126,16 @@ func (s *space) Init(ctx context.Context) (err error) {
|
||||
s.syncStatus = s.app.MustComponent(syncstatus.CName).(syncstatus.StatusProvider)
|
||||
s.settings = s.app.MustComponent(settings.CName).(settings.Settings)
|
||||
s.objectSync = s.app.MustComponent(objectsync.CName).(objectsync.ObjectSync)
|
||||
s.storage = s.app.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *space) HeadSync() headsync.HeadSyncExternal {
|
||||
return s.headSync
|
||||
}
|
||||
|
||||
func (s *space) SyncStatus() syncstatus.StatusUpdater {
|
||||
return s.syncStatus
|
||||
}
|
||||
|
||||
func (s *space) Storage() spacestorage.SpaceStorage {
|
||||
return s.state.SpaceStorage
|
||||
return s.storage
|
||||
}
|
||||
|
||||
func (s *space) Close() error {
|
||||
|
||||
@ -10,7 +10,6 @@ import (
|
||||
"github.com/anyproto/any-sync/commonspace/deletionstate"
|
||||
"github.com/anyproto/any-sync/commonspace/headsync"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/syncacl"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
|
||||
@ -159,22 +158,11 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
|
||||
return nil, err
|
||||
}
|
||||
spaceIsDeleted.Swap(isDeleted)
|
||||
aclStorage, err := st.AclStorage()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
aclList, err := list.BuildAclListWithIdentity(s.account.Account(), aclStorage)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
aclList = syncacl.NewSyncAcl(aclList)
|
||||
state := &spacestate.SpaceState{
|
||||
SpaceId: st.Id(),
|
||||
SpaceIsDeleted: spaceIsDeleted,
|
||||
SpaceIsClosed: spaceIsClosed,
|
||||
TreesUsed: &atomic.Int32{},
|
||||
AclList: aclList,
|
||||
SpaceStorage: st,
|
||||
}
|
||||
if s.config.KeepTreeDataInMemory {
|
||||
state.TreeBuilderFunc = objecttree.BuildObjectTree
|
||||
@ -188,20 +176,21 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) {
|
||||
} else {
|
||||
syncStatus = syncstatus.NewNoOpSyncStatus()
|
||||
}
|
||||
//lastConfiguration := s.configurationService
|
||||
//
|
||||
//peerManager, err := s.peermanagerProvider.NewPeerManager(ctx, id)
|
||||
//if err != nil {
|
||||
// return nil, err
|
||||
//}
|
||||
peerManager, err := s.peermanagerProvider.NewPeerManager(ctx, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
spaceApp := s.app.ChildApp()
|
||||
spaceApp.Register(state).
|
||||
Register(peerManager).
|
||||
Register(newCommonStorage(st)).
|
||||
Register(syncacl.New()).
|
||||
Register(syncStatus).
|
||||
Register(NewObjectManager(s.treeManager)).
|
||||
Register(streamsender.New()).
|
||||
Register(requestsender.New()).
|
||||
Register(deletionstate.New()).
|
||||
Register(settings.New()).
|
||||
Register(NewObjectManager(s.treeManager)).
|
||||
Register(syncclient.New()).
|
||||
Register(objecttreebuilder.New()).
|
||||
Register(objectsync.New()).
|
||||
|
||||
@ -2,21 +2,17 @@ package spacestate
|
||||
|
||||
import (
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/list"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/objecttree"
|
||||
"github.com/anyproto/any-sync/commonspace/spacestorage"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
const CName = "common.commonspace.shareddata"
|
||||
const CName = "common.commonspace.spacestate"
|
||||
|
||||
type SpaceState struct {
|
||||
SpaceId string
|
||||
SpaceIsDeleted *atomic.Bool
|
||||
SpaceIsClosed *atomic.Bool
|
||||
TreesUsed *atomic.Int32
|
||||
AclList list.AclList
|
||||
SpaceStorage spacestorage.SpaceStorage
|
||||
TreeBuilderFunc objecttree.BuildObjectTreeFunc
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package spacestorage
|
||||
|
||||
import (
|
||||
"github.com/anyproto/any-sync/app"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/aclrecordproto"
|
||||
"github.com/anyproto/any-sync/commonspace/object/acl/liststorage"
|
||||
"github.com/anyproto/any-sync/commonspace/object/tree/treechangeproto"
|
||||
@ -21,6 +22,14 @@ type InMemorySpaceStorage struct {
|
||||
sync.Mutex
|
||||
}
|
||||
|
||||
func (i *InMemorySpaceStorage) Init(a *app.App) (err error) {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (i *InMemorySpaceStorage) Name() (name string) {
|
||||
return CName
|
||||
}
|
||||
|
||||
func NewInMemorySpaceStorage(payload SpaceStorageCreatePayload) (SpaceStorage, error) {
|
||||
aclStorage, err := liststorage.NewInMemoryAclListStorage(payload.AclWithId.Id, []*aclrecordproto.RawAclRecordWithId{payload.AclWithId})
|
||||
if err != nil {
|
||||
|
||||
@ -27,8 +27,8 @@ const (
|
||||
TreeDeletedStatusDeleted = "deleted"
|
||||
)
|
||||
|
||||
// TODO: consider moving to some file with all common interfaces etc
|
||||
type SpaceStorage interface {
|
||||
app.Component
|
||||
Id() string
|
||||
SetSpaceDeleted() error
|
||||
IsSpaceDeleted() (bool, error)
|
||||
|
||||
@ -1 +0,0 @@
|
||||
package spacestorage
|
||||
@ -102,9 +102,9 @@ func (s *syncStatusProvider) Init(a *app.App) (err error) {
|
||||
sharedState := a.MustComponent(spacestate.CName).(*spacestate.SpaceState)
|
||||
s.updateIntervalSecs = syncUpdateInterval
|
||||
s.updateTimeout = syncTimeout
|
||||
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||
s.storage = sharedState.SpaceStorage
|
||||
s.spaceId = sharedState.SpaceId
|
||||
s.configuration = a.MustComponent(nodeconf.CName).(nodeconf.NodeConf)
|
||||
s.storage = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorage)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user