1
0
Fork 0
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:
mcrakhman 2022-12-06 10:19:53 +01:00 committed by Mikhail Iudin
parent 86ba8e33d0
commit 9d9867a632
No known key found for this signature in database
GPG key ID: FAAAA8BAABDFF1C0
5 changed files with 36 additions and 91 deletions

View file

@ -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
}

View file

@ -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) {

View file

@ -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)
}

View file

@ -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
}

View file

@ -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)