mirror of
https://github.com/anyproto/any-sync.git
synced 2025-06-08 05:57:03 +09:00
Change tree creation logic
This commit is contained in:
parent
86ba8e33d0
commit
9d9867a632
5 changed files with 36 additions and 91 deletions
|
@ -53,11 +53,7 @@ func (s *service) CreateDocument(spaceId string) (id string, err error) {
|
|||
if err != nil {
|
||||
return
|
||||
}
|
||||
doc, err := textdocument.CreateTextDocument(context.Background(), space, s.account, nil)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
id = doc.ID()
|
||||
id, err = textdocument.CreateTextDocument(context.Background(), space, s.account)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -27,22 +27,13 @@ type textDocument struct {
|
|||
func CreateTextDocument(
|
||||
ctx context.Context,
|
||||
space commonspace.Space,
|
||||
account account.Service,
|
||||
listener updatelistener.UpdateListener) (doc TextDocument, err error) {
|
||||
account account.Service) (id string, err error) {
|
||||
payload := tree.ObjectTreeCreatePayload{
|
||||
SignKey: account.Account().SignKey,
|
||||
SpaceId: space.Id(),
|
||||
Identity: account.Account().Identity,
|
||||
}
|
||||
t, err := space.CreateTree(ctx, payload, listener)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
return &textDocument{
|
||||
ObjectTree: t,
|
||||
account: account,
|
||||
}, nil
|
||||
return space.CreateTree(ctx, payload)
|
||||
}
|
||||
|
||||
func NewTextDocument(ctx context.Context, space commonspace.Space, id string, listener updatelistener.UpdateListener, account account.Service) (doc TextDocument, err error) {
|
||||
|
|
|
@ -75,8 +75,8 @@ type Space interface {
|
|||
|
||||
SpaceSyncRpc() RpcHandler
|
||||
|
||||
DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
||||
CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
||||
DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error)
|
||||
CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error)
|
||||
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
||||
DeleteTree(ctx context.Context, id string) (err error)
|
||||
|
||||
|
@ -210,40 +210,34 @@ func (s *space) DebugAllHeads() []diffservice.TreeHeads {
|
|||
return s.diffService.DebugAllHeads()
|
||||
}
|
||||
|
||||
func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tr tree.ObjectTree, err error) {
|
||||
func (s *space) DeriveTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) {
|
||||
if s.isClosed.Load() {
|
||||
err = ErrSpaceClosed
|
||||
return
|
||||
}
|
||||
deps := synctree.CreateDeps{
|
||||
SpaceId: s.id,
|
||||
Payload: payload,
|
||||
StreamPool: s.syncService.StreamPool(),
|
||||
Configuration: s.configuration,
|
||||
HeadNotifiable: s.diffService,
|
||||
Listener: listener,
|
||||
AclList: s.aclList,
|
||||
SpaceStorage: s.storage,
|
||||
TreeUsage: &s.treesUsed,
|
||||
SpaceId: s.id,
|
||||
Payload: payload,
|
||||
StreamPool: s.syncService.StreamPool(),
|
||||
Configuration: s.configuration,
|
||||
AclList: s.aclList,
|
||||
SpaceStorage: s.storage,
|
||||
}
|
||||
return synctree.DeriveSyncTree(ctx, deps)
|
||||
}
|
||||
|
||||
func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload, listener updatelistener.UpdateListener) (tr tree.ObjectTree, err error) {
|
||||
func (s *space) CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (id string, err error) {
|
||||
if s.isClosed.Load() {
|
||||
err = ErrSpaceClosed
|
||||
return
|
||||
}
|
||||
deps := synctree.CreateDeps{
|
||||
SpaceId: s.id,
|
||||
Payload: payload,
|
||||
StreamPool: s.syncService.StreamPool(),
|
||||
Configuration: s.configuration,
|
||||
HeadNotifiable: s.diffService,
|
||||
Listener: listener,
|
||||
AclList: s.aclList,
|
||||
SpaceStorage: s.storage,
|
||||
TreeUsage: &s.treesUsed,
|
||||
SpaceId: s.id,
|
||||
Payload: payload,
|
||||
StreamPool: s.syncService.StreamPool(),
|
||||
Configuration: s.configuration,
|
||||
AclList: s.aclList,
|
||||
SpaceStorage: s.storage,
|
||||
}
|
||||
return synctree.CreateSyncTree(ctx, deps)
|
||||
}
|
||||
|
|
|
@ -55,15 +55,12 @@ var buildObjectTree = tree.BuildObjectTree
|
|||
var createSyncClient = newSyncClient
|
||||
|
||||
type CreateDeps struct {
|
||||
SpaceId string
|
||||
Payload tree.ObjectTreeCreatePayload
|
||||
Configuration nodeconf.Configuration
|
||||
HeadNotifiable HeadNotifiable
|
||||
StreamPool syncservice.StreamPool
|
||||
Listener updatelistener.UpdateListener
|
||||
AclList list.ACLList
|
||||
SpaceStorage spacestorage.SpaceStorage
|
||||
TreeUsage *atomic.Int32
|
||||
SpaceId string
|
||||
Payload tree.ObjectTreeCreatePayload
|
||||
Configuration nodeconf.Configuration
|
||||
StreamPool syncservice.StreamPool
|
||||
AclList list.ACLList
|
||||
SpaceStorage spacestorage.SpaceStorage
|
||||
}
|
||||
|
||||
type BuildDeps struct {
|
||||
|
@ -78,36 +75,25 @@ type BuildDeps struct {
|
|||
TreeUsage *atomic.Int32
|
||||
}
|
||||
|
||||
func DeriveSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) {
|
||||
func DeriveSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) {
|
||||
objTree, err := createDerivedObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
syncClient := createSyncClient(
|
||||
deps.SpaceId,
|
||||
deps.StreamPool,
|
||||
sharedFactory,
|
||||
deps.Configuration)
|
||||
syncTree := &syncTree{
|
||||
ObjectTree: objTree,
|
||||
syncClient: syncClient,
|
||||
notifiable: deps.HeadNotifiable,
|
||||
treeUsage: deps.TreeUsage,
|
||||
listener: deps.Listener,
|
||||
}
|
||||
syncHandler := newSyncTreeHandler(syncTree, syncClient)
|
||||
syncTree.SyncHandler = syncHandler
|
||||
t = syncTree
|
||||
syncTree.Lock()
|
||||
defer syncTree.Unlock()
|
||||
syncTree.afterBuild()
|
||||
|
||||
headUpdate := syncClient.CreateHeadUpdate(t, nil)
|
||||
err = syncClient.BroadcastAsync(headUpdate)
|
||||
headUpdate := syncClient.CreateHeadUpdate(objTree, nil)
|
||||
syncClient.BroadcastAsync(headUpdate)
|
||||
id = objTree.ID()
|
||||
return
|
||||
}
|
||||
|
||||
func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error) {
|
||||
func CreateSyncTree(ctx context.Context, deps CreateDeps) (id string, err error) {
|
||||
objTree, err := createObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage)
|
||||
if err != nil {
|
||||
return
|
||||
|
@ -117,23 +103,10 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
|
|||
deps.StreamPool,
|
||||
GetRequestFactory(),
|
||||
deps.Configuration)
|
||||
syncTree := &syncTree{
|
||||
ObjectTree: objTree,
|
||||
syncClient: syncClient,
|
||||
notifiable: deps.HeadNotifiable,
|
||||
treeUsage: deps.TreeUsage,
|
||||
listener: deps.Listener,
|
||||
}
|
||||
syncHandler := newSyncTreeHandler(syncTree, syncClient)
|
||||
syncTree.SyncHandler = syncHandler
|
||||
t = syncTree
|
||||
syncTree.Lock()
|
||||
defer syncTree.Unlock()
|
||||
// TODO: refactor here because the code is duplicated, when we create a tree we should only create a storage and then build a tree
|
||||
syncTree.afterBuild()
|
||||
|
||||
headUpdate := syncClient.CreateHeadUpdate(t, nil)
|
||||
err = syncClient.BroadcastAsync(headUpdate)
|
||||
headUpdate := syncClient.CreateHeadUpdate(objTree, nil)
|
||||
syncClient.BroadcastAsync(headUpdate)
|
||||
id = objTree.ID()
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -16,7 +16,6 @@ import (
|
|||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||
"github.com/golang/mock/gomock"
|
||||
"github.com/stretchr/testify/require"
|
||||
"sync/atomic"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
@ -43,7 +42,6 @@ func Test_DeriveSyncTree(t *testing.T) {
|
|||
ctrl := gomock.NewController(t)
|
||||
defer ctrl.Finish()
|
||||
|
||||
updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl)
|
||||
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
||||
aclListMock := mock_list.NewMockACLList(ctrl)
|
||||
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
||||
|
@ -59,16 +57,13 @@ func Test_DeriveSyncTree(t *testing.T) {
|
|||
return syncClientMock
|
||||
}
|
||||
headUpdate := &treechangeproto.TreeSyncMessage{}
|
||||
syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate)
|
||||
syncClientMock.EXPECT().CreateHeadUpdate(gomock.Any(), gomock.Nil()).Return(headUpdate)
|
||||
syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil)
|
||||
updateListenerMock.EXPECT().Rebuild(gomock.Any())
|
||||
deps := CreateDeps{
|
||||
AclList: aclListMock,
|
||||
SpaceId: spaceId,
|
||||
Payload: expectedPayload,
|
||||
Listener: updateListenerMock,
|
||||
SpaceStorage: spaceStorageMock,
|
||||
TreeUsage: &atomic.Int32{},
|
||||
}
|
||||
|
||||
_, err := DeriveSyncTree(ctx, deps)
|
||||
|
@ -80,7 +75,6 @@ func Test_CreateSyncTree(t *testing.T) {
|
|||
ctrl := gomock.NewController(t)
|
||||
defer ctrl.Finish()
|
||||
|
||||
updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl)
|
||||
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
||||
aclListMock := mock_list.NewMockACLList(ctrl)
|
||||
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
||||
|
@ -96,16 +90,13 @@ func Test_CreateSyncTree(t *testing.T) {
|
|||
return syncClientMock
|
||||
}
|
||||
headUpdate := &treechangeproto.TreeSyncMessage{}
|
||||
syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate)
|
||||
syncClientMock.EXPECT().CreateHeadUpdate(gomock.Any(), gomock.Nil()).Return(headUpdate)
|
||||
syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil)
|
||||
updateListenerMock.EXPECT().Rebuild(gomock.Any())
|
||||
deps := CreateDeps{
|
||||
AclList: aclListMock,
|
||||
SpaceId: spaceId,
|
||||
Payload: expectedPayload,
|
||||
Listener: updateListenerMock,
|
||||
SpaceStorage: spaceStorageMock,
|
||||
TreeUsage: &atomic.Int32{},
|
||||
}
|
||||
|
||||
_, err := CreateSyncTree(ctx, deps)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue