From 9d9867a63219792f35d76df2eaad18203bdd44ea Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 6 Dec 2022 10:19:53 +0100 Subject: [PATCH] Change tree creation logic --- client/document/service.go | 6 +-- client/document/textdocument/textdocument.go | 13 +---- common/commonspace/space.go | 38 ++++++------- common/commonspace/synctree/synctree.go | 57 ++++++-------------- common/commonspace/synctree/synctree_test.go | 13 +---- 5 files changed, 36 insertions(+), 91 deletions(-) diff --git a/client/document/service.go b/client/document/service.go index 467cc71a..23dff39e 100644 --- a/client/document/service.go +++ b/client/document/service.go @@ -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 } diff --git a/client/document/textdocument/textdocument.go b/client/document/textdocument/textdocument.go index 78a2573b..d47ccf50 100644 --- a/client/document/textdocument/textdocument.go +++ b/client/document/textdocument/textdocument.go @@ -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) { diff --git a/common/commonspace/space.go b/common/commonspace/space.go index 8d58d864..e23796a7 100644 --- a/common/commonspace/space.go +++ b/common/commonspace/space.go @@ -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) } diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index 967e3dc9..830d8104 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -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 } diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/synctree/synctree_test.go index f35cd396..bdf2c451 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/synctree/synctree_test.go @@ -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)