Change tree creation logic
This commit is contained in:
parent
86ba8e33d0
commit
9d9867a632
@ -53,11 +53,7 @@ func (s *service) CreateDocument(spaceId string) (id string, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
doc, err := textdocument.CreateTextDocument(context.Background(), space, s.account, nil)
|
id, err = textdocument.CreateTextDocument(context.Background(), space, s.account)
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
id = doc.ID()
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -27,22 +27,13 @@ type textDocument struct {
|
|||||||
func CreateTextDocument(
|
func CreateTextDocument(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
space commonspace.Space,
|
space commonspace.Space,
|
||||||
account account.Service,
|
account account.Service) (id string, err error) {
|
||||||
listener updatelistener.UpdateListener) (doc TextDocument, err error) {
|
|
||||||
payload := tree.ObjectTreeCreatePayload{
|
payload := tree.ObjectTreeCreatePayload{
|
||||||
SignKey: account.Account().SignKey,
|
SignKey: account.Account().SignKey,
|
||||||
SpaceId: space.Id(),
|
SpaceId: space.Id(),
|
||||||
Identity: account.Account().Identity,
|
Identity: account.Account().Identity,
|
||||||
}
|
}
|
||||||
t, err := space.CreateTree(ctx, payload, listener)
|
return space.CreateTree(ctx, payload)
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
return &textDocument{
|
|
||||||
ObjectTree: t,
|
|
||||||
account: account,
|
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewTextDocument(ctx context.Context, space commonspace.Space, id string, listener updatelistener.UpdateListener, account account.Service) (doc TextDocument, err error) {
|
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
|
SpaceSyncRpc() RpcHandler
|
||||||
|
|
||||||
DeriveTree(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, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
CreateTree(ctx context.Context, payload tree.ObjectTreeCreatePayload) (string, error)
|
||||||
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (tree.ObjectTree, error)
|
||||||
DeleteTree(ctx context.Context, id string) (err error)
|
DeleteTree(ctx context.Context, id string) (err error)
|
||||||
|
|
||||||
@ -210,40 +210,34 @@ func (s *space) DebugAllHeads() []diffservice.TreeHeads {
|
|||||||
return s.diffService.DebugAllHeads()
|
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() {
|
if s.isClosed.Load() {
|
||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
deps := synctree.CreateDeps{
|
deps := synctree.CreateDeps{
|
||||||
SpaceId: s.id,
|
SpaceId: s.id,
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
StreamPool: s.syncService.StreamPool(),
|
StreamPool: s.syncService.StreamPool(),
|
||||||
Configuration: s.configuration,
|
Configuration: s.configuration,
|
||||||
HeadNotifiable: s.diffService,
|
AclList: s.aclList,
|
||||||
Listener: listener,
|
SpaceStorage: s.storage,
|
||||||
AclList: s.aclList,
|
|
||||||
SpaceStorage: s.storage,
|
|
||||||
TreeUsage: &s.treesUsed,
|
|
||||||
}
|
}
|
||||||
return synctree.DeriveSyncTree(ctx, deps)
|
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() {
|
if s.isClosed.Load() {
|
||||||
err = ErrSpaceClosed
|
err = ErrSpaceClosed
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
deps := synctree.CreateDeps{
|
deps := synctree.CreateDeps{
|
||||||
SpaceId: s.id,
|
SpaceId: s.id,
|
||||||
Payload: payload,
|
Payload: payload,
|
||||||
StreamPool: s.syncService.StreamPool(),
|
StreamPool: s.syncService.StreamPool(),
|
||||||
Configuration: s.configuration,
|
Configuration: s.configuration,
|
||||||
HeadNotifiable: s.diffService,
|
AclList: s.aclList,
|
||||||
Listener: listener,
|
SpaceStorage: s.storage,
|
||||||
AclList: s.aclList,
|
|
||||||
SpaceStorage: s.storage,
|
|
||||||
TreeUsage: &s.treesUsed,
|
|
||||||
}
|
}
|
||||||
return synctree.CreateSyncTree(ctx, deps)
|
return synctree.CreateSyncTree(ctx, deps)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -55,15 +55,12 @@ var buildObjectTree = tree.BuildObjectTree
|
|||||||
var createSyncClient = newSyncClient
|
var createSyncClient = newSyncClient
|
||||||
|
|
||||||
type CreateDeps struct {
|
type CreateDeps struct {
|
||||||
SpaceId string
|
SpaceId string
|
||||||
Payload tree.ObjectTreeCreatePayload
|
Payload tree.ObjectTreeCreatePayload
|
||||||
Configuration nodeconf.Configuration
|
Configuration nodeconf.Configuration
|
||||||
HeadNotifiable HeadNotifiable
|
StreamPool syncservice.StreamPool
|
||||||
StreamPool syncservice.StreamPool
|
AclList list.ACLList
|
||||||
Listener updatelistener.UpdateListener
|
SpaceStorage spacestorage.SpaceStorage
|
||||||
AclList list.ACLList
|
|
||||||
SpaceStorage spacestorage.SpaceStorage
|
|
||||||
TreeUsage *atomic.Int32
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type BuildDeps struct {
|
type BuildDeps struct {
|
||||||
@ -78,36 +75,25 @@ type BuildDeps struct {
|
|||||||
TreeUsage *atomic.Int32
|
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)
|
objTree, err := createDerivedObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
syncClient := createSyncClient(
|
syncClient := createSyncClient(
|
||||||
deps.SpaceId,
|
deps.SpaceId,
|
||||||
deps.StreamPool,
|
deps.StreamPool,
|
||||||
sharedFactory,
|
sharedFactory,
|
||||||
deps.Configuration)
|
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)
|
headUpdate := syncClient.CreateHeadUpdate(objTree, nil)
|
||||||
err = syncClient.BroadcastAsync(headUpdate)
|
syncClient.BroadcastAsync(headUpdate)
|
||||||
|
id = objTree.ID()
|
||||||
return
|
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)
|
objTree, err := createObjectTree(deps.Payload, deps.AclList, deps.SpaceStorage.CreateTreeStorage)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
@ -117,23 +103,10 @@ func CreateSyncTree(ctx context.Context, deps CreateDeps) (t SyncTree, err error
|
|||||||
deps.StreamPool,
|
deps.StreamPool,
|
||||||
GetRequestFactory(),
|
GetRequestFactory(),
|
||||||
deps.Configuration)
|
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)
|
headUpdate := syncClient.CreateHeadUpdate(objTree, nil)
|
||||||
err = syncClient.BroadcastAsync(headUpdate)
|
syncClient.BroadcastAsync(headUpdate)
|
||||||
|
id = objTree.ID()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,7 +16,6 @@ import (
|
|||||||
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/pkg/acl/treechangeproto"
|
||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
"sync/atomic"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -43,7 +42,6 @@ func Test_DeriveSyncTree(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl)
|
|
||||||
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
||||||
aclListMock := mock_list.NewMockACLList(ctrl)
|
aclListMock := mock_list.NewMockACLList(ctrl)
|
||||||
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
||||||
@ -59,16 +57,13 @@ func Test_DeriveSyncTree(t *testing.T) {
|
|||||||
return syncClientMock
|
return syncClientMock
|
||||||
}
|
}
|
||||||
headUpdate := &treechangeproto.TreeSyncMessage{}
|
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)
|
syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil)
|
||||||
updateListenerMock.EXPECT().Rebuild(gomock.Any())
|
|
||||||
deps := CreateDeps{
|
deps := CreateDeps{
|
||||||
AclList: aclListMock,
|
AclList: aclListMock,
|
||||||
SpaceId: spaceId,
|
SpaceId: spaceId,
|
||||||
Payload: expectedPayload,
|
Payload: expectedPayload,
|
||||||
Listener: updateListenerMock,
|
|
||||||
SpaceStorage: spaceStorageMock,
|
SpaceStorage: spaceStorageMock,
|
||||||
TreeUsage: &atomic.Int32{},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := DeriveSyncTree(ctx, deps)
|
_, err := DeriveSyncTree(ctx, deps)
|
||||||
@ -80,7 +75,6 @@ func Test_CreateSyncTree(t *testing.T) {
|
|||||||
ctrl := gomock.NewController(t)
|
ctrl := gomock.NewController(t)
|
||||||
defer ctrl.Finish()
|
defer ctrl.Finish()
|
||||||
|
|
||||||
updateListenerMock := mock_updatelistener.NewMockUpdateListener(ctrl)
|
|
||||||
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
syncClientMock := mock_synctree.NewMockSyncClient(ctrl)
|
||||||
aclListMock := mock_list.NewMockACLList(ctrl)
|
aclListMock := mock_list.NewMockACLList(ctrl)
|
||||||
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
objTreeMock := newTestObjMock(mock_tree.NewMockObjectTree(ctrl))
|
||||||
@ -96,16 +90,13 @@ func Test_CreateSyncTree(t *testing.T) {
|
|||||||
return syncClientMock
|
return syncClientMock
|
||||||
}
|
}
|
||||||
headUpdate := &treechangeproto.TreeSyncMessage{}
|
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)
|
syncClientMock.EXPECT().BroadcastAsync(gomock.Eq(headUpdate)).Return(nil)
|
||||||
updateListenerMock.EXPECT().Rebuild(gomock.Any())
|
|
||||||
deps := CreateDeps{
|
deps := CreateDeps{
|
||||||
AclList: aclListMock,
|
AclList: aclListMock,
|
||||||
SpaceId: spaceId,
|
SpaceId: spaceId,
|
||||||
Payload: expectedPayload,
|
Payload: expectedPayload,
|
||||||
Listener: updateListenerMock,
|
|
||||||
SpaceStorage: spaceStorageMock,
|
SpaceStorage: spaceStorageMock,
|
||||||
TreeUsage: &atomic.Int32{},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := CreateSyncTree(ctx, deps)
|
_, err := CreateSyncTree(ctx, deps)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user