diff --git a/commonspace/commongetter.go b/commonspace/commongetter.go index 6807265b..74356281 100644 --- a/commonspace/commongetter.go +++ b/commonspace/commongetter.go @@ -4,20 +4,20 @@ import ( "context" "github.com/anytypeio/any-sync/commonspace/object/syncobjectgetter" "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "sync/atomic" ) type commonGetter struct { - treegetter.TreeGetter + treemanager.TreeManager spaceId string reservedObjects []syncobjectgetter.SyncObject spaceIsClosed *atomic.Bool } -func newCommonGetter(spaceId string, getter treegetter.TreeGetter, spaceIsClosed *atomic.Bool) *commonGetter { +func newCommonGetter(spaceId string, getter treemanager.TreeManager, spaceIsClosed *atomic.Bool) *commonGetter { return &commonGetter{ - TreeGetter: getter, + TreeManager: getter, spaceId: spaceId, spaceIsClosed: spaceIsClosed, } @@ -34,7 +34,7 @@ func (c *commonGetter) GetTree(ctx context.Context, spaceId, treeId string) (obj if obj := c.getReservedObject(treeId); obj != nil { return obj.(objecttree.ObjectTree), nil } - return c.TreeGetter.GetTree(ctx, spaceId, treeId) + return c.TreeManager.GetTree(ctx, spaceId, treeId) } func (c *commonGetter) getReservedObject(id string) syncobjectgetter.SyncObject { @@ -53,7 +53,7 @@ func (c *commonGetter) GetObject(ctx context.Context, objectId string) (obj sync if obj := c.getReservedObject(objectId); obj != nil { return obj, nil } - t, err := c.TreeGetter.GetTree(ctx, c.spaceId, objectId) + t, err := c.TreeManager.GetTree(ctx, c.spaceId, objectId) if err != nil { return } diff --git a/commonspace/headsync/diffsyncer.go b/commonspace/headsync/diffsyncer.go index 9d3434c1..1b8a15dc 100644 --- a/commonspace/headsync/diffsyncer.go +++ b/commonspace/headsync/diffsyncer.go @@ -7,7 +7,7 @@ import ( "github.com/anytypeio/any-sync/app/logger" "github.com/anytypeio/any-sync/commonspace/credentialprovider" "github.com/anytypeio/any-sync/commonspace/object/tree/synctree" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/peermanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage" @@ -30,7 +30,7 @@ func newDiffSyncer( spaceId string, diff ldiff.Diff, peerManager peermanager.PeerManager, - cache treegetter.TreeGetter, + cache treemanager.TreeManager, storage spacestorage.SpaceStorage, clientFactory spacesyncproto.ClientFactory, syncStatus syncstatus.StatusUpdater, @@ -53,7 +53,7 @@ type diffSyncer struct { spaceId string diff ldiff.Diff peerManager peermanager.PeerManager - cache treegetter.TreeGetter + cache treemanager.TreeManager storage spacestorage.SpaceStorage clientFactory spacesyncproto.ClientFactory log logger.CtxLogger diff --git a/commonspace/headsync/diffsyncer_test.go b/commonspace/headsync/diffsyncer_test.go index ae40e5a7..e6558b61 100644 --- a/commonspace/headsync/diffsyncer_test.go +++ b/commonspace/headsync/diffsyncer_test.go @@ -12,7 +12,7 @@ import ( "github.com/anytypeio/any-sync/commonspace/object/acl/liststorage/mock_liststorage" "github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto" mock_treestorage "github.com/anytypeio/any-sync/commonspace/object/tree/treestorage/mock_treestorage" - "github.com/anytypeio/any-sync/commonspace/object/treegetter/mock_treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager/mock_treemanager" "github.com/anytypeio/any-sync/commonspace/peermanager/mock_peermanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate/mock_settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage/mock_spacestorage" @@ -109,7 +109,7 @@ func TestDiffSyncer_Sync(t *testing.T) { diffMock := mock_ldiff.NewMockDiff(ctrl) peerManagerMock := mock_peermanager.NewMockPeerManager(ctrl) - cacheMock := mock_treegetter.NewMockTreeGetter(ctrl) + cacheMock := mock_treemanager.NewMockTreeManager(ctrl) stMock := mock_spacestorage.NewMockSpaceStorage(ctrl) clientMock := mock_spacesyncproto.NewMockDRPCSpaceSyncClient(ctrl) factory := spacesyncproto.ClientFactoryFunc(func(cc drpc.Conn) spacesyncproto.DRPCSpaceSyncClient { diff --git a/commonspace/headsync/headsync.go b/commonspace/headsync/headsync.go index 08d6d9e3..80fe77b8 100644 --- a/commonspace/headsync/headsync.go +++ b/commonspace/headsync/headsync.go @@ -6,7 +6,7 @@ import ( "github.com/anytypeio/any-sync/app/ldiff" "github.com/anytypeio/any-sync/app/logger" "github.com/anytypeio/any-sync/commonspace/credentialprovider" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/peermanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage" @@ -59,7 +59,7 @@ func NewHeadSync( configuration nodeconf.Configuration, storage spacestorage.SpaceStorage, peerManager peermanager.PeerManager, - cache treegetter.TreeGetter, + cache treemanager.TreeManager, syncStatus syncstatus.StatusUpdater, credentialProvider credentialprovider.CredentialProvider, log logger.CtxLogger) HeadSync { diff --git a/commonspace/object/tree/objecttree/changebuilder.go b/commonspace/object/tree/objecttree/changebuilder.go index 2f10fca9..b3dc65a1 100644 --- a/commonspace/object/tree/objecttree/changebuilder.go +++ b/commonspace/object/tree/objecttree/changebuilder.go @@ -84,7 +84,7 @@ func NewEmptyDataBuilder(keys crypto.KeyStorage, rootChange *treechangeproto.Raw rootChange: rootChange, keys: keys, newChange: func(id string, identity crypto.PubKey, ch *treechangeproto.TreeChange, signature []byte) *Change { - c := NewChange(id, identity, ch, signature) + c := NewChange(id, identity, ch, nil) c.Data = nil return c }, diff --git a/commonspace/object/tree/objecttree/objecttreefactory.go b/commonspace/object/tree/objecttree/objecttreefactory.go index 5b9196e4..a913d183 100644 --- a/commonspace/object/tree/objecttree/objecttreefactory.go +++ b/commonspace/object/tree/objecttree/objecttreefactory.go @@ -33,6 +33,8 @@ type objectTreeDeps struct { aclList list.AclList } +type BuildObjectTreeFunc = func(treeStorage treestorage.TreeStorage, aclList list.AclList) (ObjectTree, error) + var defaultObjectTreeDeps = verifiableTreeDeps func verifiableTreeDeps( diff --git a/commonspace/object/tree/synctree/synctree.go b/commonspace/object/tree/synctree/synctree.go index a1374b48..00b91846 100644 --- a/commonspace/object/tree/synctree/synctree.go +++ b/commonspace/object/tree/synctree/synctree.go @@ -54,7 +54,6 @@ type syncTree struct { var log = logger.NewNamed("common.commonspace.synctree") -var buildObjectTree = objecttree.BuildObjectTree var createSyncClient = newSyncClient type ResponsiblePeersGetter interface { @@ -73,6 +72,7 @@ type BuildDeps struct { OnClose func(id string) SyncStatus syncstatus.StatusUpdater PeerGetter ResponsiblePeersGetter + BuildObjectTree objecttree.BuildObjectTreeFunc WaitTreeRemoteSync bool } @@ -94,7 +94,7 @@ func PutSyncTree(ctx context.Context, payload treestorage.TreeStorageCreatePaylo } func buildSyncTree(ctx context.Context, isFirstBuild bool, deps BuildDeps) (t SyncTree, err error) { - objTree, err := buildObjectTree(deps.TreeStorage, deps.AclList) + objTree, err := deps.BuildObjectTree(deps.TreeStorage, deps.AclList) if err != nil { return } diff --git a/commonspace/object/tree/synctree/synctreehandler.go b/commonspace/object/tree/synctree/synctreehandler.go index a41a2bad..63b708d9 100644 --- a/commonspace/object/tree/synctree/synctreehandler.go +++ b/commonspace/object/tree/synctree/synctreehandler.go @@ -82,7 +82,6 @@ func (s *syncTreeHandler) handleHeadUpdate( isEmptyUpdate = len(update.Changes) == 0 objTree = s.objTree ) - log := log.With( zap.Strings("update heads", update.Heads), zap.String("treeId", objTree.Id()), diff --git a/commonspace/object/tree/synctree/synctreehandler_test.go b/commonspace/object/tree/synctree/synctreehandler_test.go index 052479d2..f655b34a 100644 --- a/commonspace/object/tree/synctree/synctreehandler_test.go +++ b/commonspace/object/tree/synctree/synctreehandler_test.go @@ -89,6 +89,13 @@ func (fx *syncHandlerFixture) stop() { func TestSyncHandler_HandleHeadUpdate(t *testing.T) { ctx := context.Background() log = logger.CtxLogger{Logger: zap.NewNop()} + fullRequest := &treechangeproto.TreeSyncMessage{ + Content: &treechangeproto.TreeSyncContentValue{ + Value: &treechangeproto.TreeSyncContentValue_FullSyncRequest{ + FullSyncRequest: &treechangeproto.TreeFullSyncRequest{}, + }, + }, + } t.Run("head update non empty all heads added", func(t *testing.T) { fx := newSyncHandlerFixture(t) @@ -113,7 +120,6 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { RawChanges: []*treechangeproto.RawTreeChangeWithId{chWithId}, })). Return(objecttree.AddResult{}, nil) - fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2", "h1"}) fx.objectTreeMock.EXPECT().HasChanges(gomock.Eq([]string{"h1"})).Return(true) err := fx.syncHandler.HandleMessage(ctx, senderId, objectMsg) @@ -133,7 +139,6 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { } treeMsg := treechangeproto.WrapHeadUpdate(headUpdate, chWithId) objectMsg, _ := marshallTreeMessage(treeMsg, "spaceId", treeId, "") - fullRequest := &treechangeproto.TreeSyncMessage{} fx.objectTreeMock.EXPECT().Id().AnyTimes().Return(treeId) fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2"}).AnyTimes() @@ -188,7 +193,6 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { } treeMsg := treechangeproto.WrapHeadUpdate(headUpdate, chWithId) objectMsg, _ := marshallTreeMessage(treeMsg, "spaceId", treeId, "") - fullRequest := &treechangeproto.TreeSyncMessage{} fx.objectTreeMock.EXPECT().Id().AnyTimes().Return(treeId) fx.objectTreeMock.EXPECT().Heads().Return([]string{"h2"}).AnyTimes() @@ -226,6 +230,13 @@ func TestSyncHandler_HandleHeadUpdate(t *testing.T) { func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { ctx := context.Background() log = logger.CtxLogger{Logger: zap.NewNop()} + fullResponse := &treechangeproto.TreeSyncMessage{ + Content: &treechangeproto.TreeSyncContentValue{ + Value: &treechangeproto.TreeSyncContentValue_FullSyncResponse{ + FullSyncResponse: &treechangeproto.TreeFullSyncResponse{}, + }, + }, + } t.Run("full sync request with change", func(t *testing.T) { fx := newSyncHandlerFixture(t) @@ -240,7 +251,6 @@ func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { } treeMsg := treechangeproto.WrapFullRequest(fullSyncRequest, chWithId) objectMsg, _ := marshallTreeMessage(treeMsg, "spaceId", treeId, "") - fullResponse := &treechangeproto.TreeSyncMessage{} fx.objectTreeMock.EXPECT().Id().AnyTimes().Return(treeId) fx.objectTreeMock.EXPECT().Header().Return(nil) @@ -274,7 +284,6 @@ func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { } treeMsg := treechangeproto.WrapFullRequest(fullSyncRequest, chWithId) objectMsg, _ := marshallTreeMessage(treeMsg, "spaceId", treeId, "") - fullResponse := &treechangeproto.TreeSyncMessage{} fx.objectTreeMock.EXPECT(). Id().AnyTimes().Return(treeId) @@ -305,7 +314,6 @@ func TestSyncHandler_HandleFullSyncRequest(t *testing.T) { treeMsg := treechangeproto.WrapFullRequest(fullSyncRequest, chWithId) objectMsg, _ := marshallTreeMessage(treeMsg, "spaceId", treeId, "") objectMsg.RequestId = replyId - fullResponse := &treechangeproto.TreeSyncMessage{} fx.objectTreeMock.EXPECT(). Id().AnyTimes().Return(treeId) diff --git a/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go b/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go deleted file mode 100644 index 6aee2208..00000000 --- a/commonspace/object/treegetter/mock_treegetter/mock_treegetter.go +++ /dev/null @@ -1,136 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: github.com/anytypeio/any-sync/commonspace/object/treegetter (interfaces: TreeGetter) - -// Package mock_treegetter is a generated GoMock package. -package mock_treegetter - -import ( - context "context" - reflect "reflect" - - app "github.com/anytypeio/any-sync/app" - objecttree "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" - gomock "github.com/golang/mock/gomock" -) - -// MockTreeGetter is a mock of TreeGetter interface. -type MockTreeGetter struct { - ctrl *gomock.Controller - recorder *MockTreeGetterMockRecorder -} - -// MockTreeGetterMockRecorder is the mock recorder for MockTreeGetter. -type MockTreeGetterMockRecorder struct { - mock *MockTreeGetter -} - -// NewMockTreeGetter creates a new mock instance. -func NewMockTreeGetter(ctrl *gomock.Controller) *MockTreeGetter { - mock := &MockTreeGetter{ctrl: ctrl} - mock.recorder = &MockTreeGetterMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockTreeGetter) EXPECT() *MockTreeGetterMockRecorder { - return m.recorder -} - -// Close mocks base method. -func (m *MockTreeGetter) Close(arg0 context.Context) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Close", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// Close indicates an expected call of Close. -func (mr *MockTreeGetterMockRecorder) Close(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockTreeGetter)(nil).Close), arg0) -} - -// DeleteSpace mocks base method. -func (m *MockTreeGetter) DeleteSpace(arg0 context.Context, arg1 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteSpace", arg0, arg1) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteSpace indicates an expected call of DeleteSpace. -func (mr *MockTreeGetterMockRecorder) DeleteSpace(arg0, arg1 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSpace", reflect.TypeOf((*MockTreeGetter)(nil).DeleteSpace), arg0, arg1) -} - -// DeleteTree mocks base method. -func (m *MockTreeGetter) DeleteTree(arg0 context.Context, arg1, arg2 string) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "DeleteTree", arg0, arg1, arg2) - ret0, _ := ret[0].(error) - return ret0 -} - -// DeleteTree indicates an expected call of DeleteTree. -func (mr *MockTreeGetterMockRecorder) DeleteTree(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTree", reflect.TypeOf((*MockTreeGetter)(nil).DeleteTree), arg0, arg1, arg2) -} - -// GetTree mocks base method. -func (m *MockTreeGetter) GetTree(arg0 context.Context, arg1, arg2 string) (objecttree.ObjectTree, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetTree", arg0, arg1, arg2) - ret0, _ := ret[0].(objecttree.ObjectTree) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// GetTree indicates an expected call of GetTree. -func (mr *MockTreeGetterMockRecorder) GetTree(arg0, arg1, arg2 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTree", reflect.TypeOf((*MockTreeGetter)(nil).GetTree), arg0, arg1, arg2) -} - -// Init mocks base method. -func (m *MockTreeGetter) Init(arg0 *app.App) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Init", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// Init indicates an expected call of Init. -func (mr *MockTreeGetterMockRecorder) Init(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Init", reflect.TypeOf((*MockTreeGetter)(nil).Init), arg0) -} - -// Name mocks base method. -func (m *MockTreeGetter) Name() string { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Name") - ret0, _ := ret[0].(string) - return ret0 -} - -// Name indicates an expected call of Name. -func (mr *MockTreeGetterMockRecorder) Name() *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Name", reflect.TypeOf((*MockTreeGetter)(nil).Name)) -} - -// Run mocks base method. -func (m *MockTreeGetter) Run(arg0 context.Context) error { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "Run", arg0) - ret0, _ := ret[0].(error) - return ret0 -} - -// Run indicates an expected call of Run. -func (mr *MockTreeGetterMockRecorder) Run(arg0 interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockTreeGetter)(nil).Run), arg0) -} diff --git a/commonspace/object/treemanager/mock_treemanager/mock_treemanager.go b/commonspace/object/treemanager/mock_treemanager/mock_treemanager.go new file mode 100644 index 00000000..f378bc43 --- /dev/null +++ b/commonspace/object/treemanager/mock_treemanager/mock_treemanager.go @@ -0,0 +1,152 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/anytypeio/any-sync/commonspace/object/treemanager (interfaces: TreeManager) + +// Package mock_treemanager is a generated GoMock package. +package mock_treemanager + +import ( + context "context" + reflect "reflect" + + app "github.com/anytypeio/any-sync/app" + list "github.com/anytypeio/any-sync/commonspace/object/acl/list" + objecttree "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" + treestorage "github.com/anytypeio/any-sync/commonspace/object/tree/treestorage" + gomock "github.com/golang/mock/gomock" +) + +// MockTreeManager is a mock of TreeManager interface. +type MockTreeManager struct { + ctrl *gomock.Controller + recorder *MockTreeManagerMockRecorder +} + +// MockTreeManagerMockRecorder is the mock recorder for MockTreeManager. +type MockTreeManagerMockRecorder struct { + mock *MockTreeManager +} + +// NewMockTreeManager creates a new mock instance. +func NewMockTreeManager(ctrl *gomock.Controller) *MockTreeManager { + mock := &MockTreeManager{ctrl: ctrl} + mock.recorder = &MockTreeManagerMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockTreeManager) EXPECT() *MockTreeManagerMockRecorder { + return m.recorder +} + +// Close mocks base method. +func (m *MockTreeManager) Close(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Close", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Close indicates an expected call of Close. +func (mr *MockTreeManagerMockRecorder) Close(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Close", reflect.TypeOf((*MockTreeManager)(nil).Close), arg0) +} + +// DeleteSpace mocks base method. +func (m *MockTreeManager) DeleteSpace(arg0 context.Context, arg1 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteSpace", arg0, arg1) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteSpace indicates an expected call of DeleteSpace. +func (mr *MockTreeManagerMockRecorder) DeleteSpace(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteSpace", reflect.TypeOf((*MockTreeManager)(nil).DeleteSpace), arg0, arg1) +} + +// DeleteTree mocks base method. +func (m *MockTreeManager) DeleteTree(arg0 context.Context, arg1, arg2 string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "DeleteTree", arg0, arg1, arg2) + ret0, _ := ret[0].(error) + return ret0 +} + +// DeleteTree indicates an expected call of DeleteTree. +func (mr *MockTreeManagerMockRecorder) DeleteTree(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DeleteTree", reflect.TypeOf((*MockTreeManager)(nil).DeleteTree), arg0, arg1, arg2) +} + +// GetTree mocks base method. +func (m *MockTreeManager) GetTree(arg0 context.Context, arg1, arg2 string) (objecttree.ObjectTree, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "GetTree", arg0, arg1, arg2) + ret0, _ := ret[0].(objecttree.ObjectTree) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// GetTree indicates an expected call of GetTree. +func (mr *MockTreeManagerMockRecorder) GetTree(arg0, arg1, arg2 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetTree", reflect.TypeOf((*MockTreeManager)(nil).GetTree), arg0, arg1, arg2) +} + +// Init mocks base method. +func (m *MockTreeManager) Init(arg0 *app.App) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Init", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Init indicates an expected call of Init. +func (mr *MockTreeManagerMockRecorder) Init(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Init", reflect.TypeOf((*MockTreeManager)(nil).Init), arg0) +} + +// Name mocks base method. +func (m *MockTreeManager) Name() string { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Name") + ret0, _ := ret[0].(string) + return ret0 +} + +// Name indicates an expected call of Name. +func (mr *MockTreeManagerMockRecorder) Name() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Name", reflect.TypeOf((*MockTreeManager)(nil).Name)) +} + +// ObjectTreeBuilder mocks base method. +func (m *MockTreeManager) ObjectTreeBuilder() func(treestorage.TreeStorage, list.AclList) (objecttree.ObjectTree, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ObjectTreeBuilder") + ret0, _ := ret[0].(func(treestorage.TreeStorage, list.AclList) (objecttree.ObjectTree, error)) + return ret0 +} + +// ObjectTreeBuilder indicates an expected call of ObjectTreeBuilder. +func (mr *MockTreeManagerMockRecorder) ObjectTreeBuilder() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ObjectTreeBuilder", reflect.TypeOf((*MockTreeManager)(nil).ObjectTreeBuilder)) +} + +// Run mocks base method. +func (m *MockTreeManager) Run(arg0 context.Context) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Run", arg0) + ret0, _ := ret[0].(error) + return ret0 +} + +// Run indicates an expected call of Run. +func (mr *MockTreeManagerMockRecorder) Run(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Run", reflect.TypeOf((*MockTreeManager)(nil).Run), arg0) +} diff --git a/commonspace/object/treegetter/treegetter.go b/commonspace/object/treemanager/treemanager.go similarity index 55% rename from commonspace/object/treegetter/treegetter.go rename to commonspace/object/treemanager/treemanager.go index 4e604d10..00685ff5 100644 --- a/commonspace/object/treegetter/treegetter.go +++ b/commonspace/object/treemanager/treemanager.go @@ -1,5 +1,5 @@ -//go:generate mockgen -destination mock_treegetter/mock_treegetter.go github.com/anytypeio/any-sync/commonspace/object/treegetter TreeGetter -package treegetter +//go:generate mockgen -destination mock_treemanager/mock_treemanager.go github.com/anytypeio/any-sync/commonspace/object/treemanager TreeManager +package treemanager import ( "context" @@ -7,11 +7,12 @@ import ( "github.com/anytypeio/any-sync/commonspace/object/tree/objecttree" ) -const CName = "common.object.treegetter" +const CName = "common.object.treemanager" -type TreeGetter interface { +type TreeManager interface { app.ComponentRunnable GetTree(ctx context.Context, spaceId, treeId string) (objecttree.ObjectTree, error) DeleteTree(ctx context.Context, spaceId, treeId string) error DeleteSpace(ctx context.Context, spaceId string) error + ObjectTreeBuilder() objecttree.BuildObjectTreeFunc } diff --git a/commonspace/settings/deleter.go b/commonspace/settings/deleter.go index 55f026c1..c50da268 100644 --- a/commonspace/settings/deleter.go +++ b/commonspace/settings/deleter.go @@ -2,7 +2,7 @@ package settings import ( "context" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage" "go.uber.org/zap" @@ -15,10 +15,10 @@ type Deleter interface { type deleter struct { st spacestorage.SpaceStorage state settingsstate.ObjectDeletionState - getter treegetter.TreeGetter + getter treemanager.TreeManager } -func newDeleter(st spacestorage.SpaceStorage, state settingsstate.ObjectDeletionState, getter treegetter.TreeGetter) Deleter { +func newDeleter(st spacestorage.SpaceStorage, state settingsstate.ObjectDeletionState, getter treemanager.TreeManager) Deleter { return &deleter{st, state, getter} } diff --git a/commonspace/settings/deleter_test.go b/commonspace/settings/deleter_test.go index 3606225b..fe6f7c51 100644 --- a/commonspace/settings/deleter_test.go +++ b/commonspace/settings/deleter_test.go @@ -2,7 +2,7 @@ package settings import ( "fmt" - "github.com/anytypeio/any-sync/commonspace/object/treegetter/mock_treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager/mock_treemanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate/mock_settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage" "github.com/anytypeio/any-sync/commonspace/spacestorage/mock_spacestorage" @@ -12,18 +12,18 @@ import ( func TestDeleter_Delete(t *testing.T) { ctrl := gomock.NewController(t) - treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) + treeManager := mock_treemanager.NewMockTreeManager(ctrl) st := mock_spacestorage.NewMockSpaceStorage(ctrl) delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) - deleter := newDeleter(st, delState, treeGetter) + deleter := newDeleter(st, delState, treeManager) t.Run("deleter delete queued", func(t *testing.T) { id := "id" spaceId := "spaceId" delState.EXPECT().GetQueued().Return([]string{id}) st.EXPECT().Id().Return(spaceId) - treeGetter.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(nil) + treeManager.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(nil) delState.EXPECT().Delete(id).Return(nil) deleter.Delete() @@ -34,7 +34,7 @@ func TestDeleter_Delete(t *testing.T) { spaceId := "spaceId" delState.EXPECT().GetQueued().Return([]string{id}) st.EXPECT().Id().Return(spaceId) - treeGetter.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(spacestorage.ErrTreeStorageAlreadyDeleted) + treeManager.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(spacestorage.ErrTreeStorageAlreadyDeleted) delState.EXPECT().Delete(id).Return(nil) deleter.Delete() @@ -45,7 +45,7 @@ func TestDeleter_Delete(t *testing.T) { spaceId := "spaceId" delState.EXPECT().GetQueued().Return([]string{id}) st.EXPECT().Id().Return(spaceId) - treeGetter.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(fmt.Errorf("some error")) + treeManager.EXPECT().DeleteTree(gomock.Any(), spaceId, id).Return(fmt.Errorf("some error")) deleter.Delete() }) diff --git a/commonspace/settings/deletionmanager.go b/commonspace/settings/deletionmanager.go index 8bfc15e3..366c2686 100644 --- a/commonspace/settings/deletionmanager.go +++ b/commonspace/settings/deletionmanager.go @@ -2,7 +2,7 @@ package settings import ( "context" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/util/slice" "go.uber.org/zap" @@ -20,12 +20,12 @@ func newDeletionManager( spaceId string, settingsId string, isResponsible bool, - treeGetter treegetter.TreeGetter, + treeManager treemanager.TreeManager, deletionState settingsstate.ObjectDeletionState, provider SpaceIdsProvider, onSpaceDelete func()) DeletionManager { return &deletionManager{ - treeGetter: treeGetter, + treeManager: treeManager, isResponsible: isResponsible, spaceId: spaceId, settingsId: settingsId, @@ -38,7 +38,7 @@ func newDeletionManager( type deletionManager struct { deletionState settingsstate.ObjectDeletionState provider SpaceIdsProvider - treeGetter treegetter.TreeGetter + treeManager treemanager.TreeManager spaceId string settingsId string isResponsible bool @@ -55,7 +55,7 @@ func (d *deletionManager) UpdateState(ctx context.Context, state *settingsstate. return nil } log.Debug("deleting space") - err = d.treeGetter.DeleteSpace(ctx, d.spaceId) + err = d.treeManager.DeleteSpace(ctx, d.spaceId) if err != nil { log.Debug("failed to notify on space deletion", zap.Error(err)) } diff --git a/commonspace/settings/deletionmanager_test.go b/commonspace/settings/deletionmanager_test.go index a4992903..990efc07 100644 --- a/commonspace/settings/deletionmanager_test.go +++ b/commonspace/settings/deletionmanager_test.go @@ -2,7 +2,7 @@ package settings import ( "context" - "github.com/anytypeio/any-sync/commonspace/object/treegetter/mock_treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager/mock_treemanager" "github.com/anytypeio/any-sync/commonspace/settings/mock_settings" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate/mock_settingsstate" @@ -27,15 +27,15 @@ func TestDeletionManager_UpdateState_NotResponsible(t *testing.T) { deleted = true } delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) - treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) + treeManager := mock_treemanager.NewMockTreeManager(ctrl) delState.EXPECT().Add(state.DeletedIds).Return(nil) - treeGetter.EXPECT().DeleteSpace(ctx, spaceId).Return(nil) + treeManager.EXPECT().DeleteSpace(ctx, spaceId).Return(nil) delManager := newDeletionManager(spaceId, settingsId, false, - treeGetter, + treeManager, delState, nil, onDeleted) @@ -60,17 +60,17 @@ func TestDeletionManager_UpdateState_Responsible(t *testing.T) { deleted = true } delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) - treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) + treeManager := mock_treemanager.NewMockTreeManager(ctrl) provider := mock_settings.NewMockSpaceIdsProvider(ctrl) delState.EXPECT().Add(state.DeletedIds).Return(nil) - treeGetter.EXPECT().DeleteSpace(ctx, spaceId).Return(nil) + treeManager.EXPECT().DeleteSpace(ctx, spaceId).Return(nil) provider.EXPECT().AllIds().Return([]string{"id", "otherId", settingsId}) delState.EXPECT().Add([]string{"id", "otherId"}).Return(nil) delManager := newDeletionManager(spaceId, settingsId, true, - treeGetter, + treeManager, delState, provider, onDeleted) diff --git a/commonspace/settings/settings.go b/commonspace/settings/settings.go index 1455faff..14430e0f 100644 --- a/commonspace/settings/settings.go +++ b/commonspace/settings/settings.go @@ -13,7 +13,7 @@ import ( "github.com/anytypeio/any-sync/commonspace/object/tree/synctree" "github.com/anytypeio/any-sync/commonspace/object/tree/synctree/updatelistener" "github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/spacestorage" "github.com/anytypeio/any-sync/commonspace/spacesyncproto" @@ -47,7 +47,7 @@ type BuildTreeFunc func(ctx context.Context, id string, listener updatelistener. type Deps struct { BuildFunc BuildTreeFunc Account accountservice.Service - TreeGetter treegetter.TreeGetter + TreeManager treemanager.TreeManager Store spacestorage.SpaceStorage Configuration nodeconf.Configuration DeletionState settingsstate.ObjectDeletionState @@ -62,13 +62,13 @@ type Deps struct { type settingsObject struct { synctree.SyncTree - account accountservice.Service - spaceId string - treeGetter treegetter.TreeGetter - store spacestorage.SpaceStorage - builder settingsstate.StateBuilder - buildFunc BuildTreeFunc - loop *deleteLoop + account accountservice.Service + spaceId string + treeManager treemanager.TreeManager + store spacestorage.SpaceStorage + builder settingsstate.StateBuilder + buildFunc BuildTreeFunc + loop *deleteLoop state *settingsstate.State deletionState settingsstate.ObjectDeletionState @@ -84,7 +84,7 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) { changeFactory settingsstate.ChangeFactory ) if deps.del == nil { - deleter = newDeleter(deps.Store, deps.DeletionState, deps.TreeGetter) + deleter = newDeleter(deps.Store, deps.DeletionState, deps.TreeManager) } else { deleter = deps.del } @@ -93,7 +93,7 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) { spaceId, deps.Store.SpaceSettingsId(), deps.Configuration.IsResponsible(spaceId), - deps.TreeGetter, + deps.TreeManager, deps.DeletionState, deps.Provider, deps.OnSpaceDelete) @@ -123,7 +123,7 @@ func NewSettingsObject(deps Deps, spaceId string) (obj SettingsObject) { spaceId: spaceId, account: deps.Account, deletionState: deps.DeletionState, - treeGetter: deps.TreeGetter, + treeManager: deps.TreeManager, store: deps.Store, buildFunc: deps.BuildFunc, builder: builder, diff --git a/commonspace/settings/settings_test.go b/commonspace/settings/settings_test.go index 166cf284..b4879f53 100644 --- a/commonspace/settings/settings_test.go +++ b/commonspace/settings/settings_test.go @@ -9,7 +9,7 @@ import ( "github.com/anytypeio/any-sync/commonspace/object/tree/synctree/mock_synctree" "github.com/anytypeio/any-sync/commonspace/object/tree/synctree/updatelistener" "github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto" - "github.com/anytypeio/any-sync/commonspace/object/treegetter/mock_treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager/mock_treemanager" "github.com/anytypeio/any-sync/commonspace/settings/mock_settings" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate" "github.com/anytypeio/any-sync/commonspace/settings/settingsstate/mock_settingsstate" @@ -45,7 +45,7 @@ type settingsFixture struct { docId string doc *settingsObject ctrl *gomock.Controller - treeGetter *mock_treegetter.MockTreeGetter + treeManager *mock_treemanager.MockTreeManager spaceStorage *mock_spacestorage.MockSpaceStorage stateBuilder *mock_settingsstate.MockStateBuilder deletionManager *mock_settings.MockDeletionManager @@ -62,7 +62,7 @@ func newSettingsFixture(t *testing.T) *settingsFixture { ctrl := gomock.NewController(t) acc := mock_accountservice.NewMockService(ctrl) - treeGetter := mock_treegetter.NewMockTreeGetter(ctrl) + treeManager := mock_treemanager.NewMockTreeManager(ctrl) st := mock_spacestorage.NewMockSpaceStorage(ctrl) delState := mock_settingsstate.NewMockObjectDeletionState(ctrl) delManager := mock_settings.NewMockDeletionManager(ctrl) @@ -81,7 +81,7 @@ func newSettingsFixture(t *testing.T) *settingsFixture { deps := Deps{ BuildFunc: buildFunc, Account: acc, - TreeGetter: treeGetter, + TreeManager: treeManager, Store: st, DeletionState: delState, delManager: delManager, @@ -95,7 +95,7 @@ func newSettingsFixture(t *testing.T) *settingsFixture { docId: objectId, doc: doc, ctrl: ctrl, - treeGetter: treeGetter, + treeManager: treeManager, spaceStorage: st, stateBuilder: stateBuilder, changeFactory: changeFactory, diff --git a/commonspace/space.go b/commonspace/space.go index 8b4375fb..c68ff8e3 100644 --- a/commonspace/space.go +++ b/commonspace/space.go @@ -118,7 +118,7 @@ type space struct { headSync headsync.HeadSync syncStatus syncstatus.StatusUpdater storage spacestorage.SpaceStorage - cache *commonGetter + treeManager *commonGetter account accountservice.Service aclList *syncacl.SyncAcl configuration nodeconf.Configuration @@ -179,7 +179,7 @@ func (s *space) Init(ctx context.Context) (err error) { return } s.aclList = syncacl.NewSyncAcl(aclList, s.objectSync.MessagePool()) - s.cache.AddObject(s.aclList) + s.treeManager.AddObject(s.aclList) deletionState := settingsstate.NewObjectDeletionState(s.storage) deps := settings.Deps{ @@ -196,7 +196,7 @@ func (s *space) Init(ctx context.Context) (err error) { return }, Account: s.account, - TreeGetter: s.cache, + TreeManager: s.treeManager, Store: s.storage, DeletionState: deletionState, Provider: s.headSync, @@ -210,7 +210,7 @@ func (s *space) Init(ctx context.Context) (err error) { if err != nil { return } - s.cache.AddObject(s.settingsObject) + s.treeManager.AddObject(s.settingsObject) s.syncStatus.Run() s.handleQueue = multiqueue.New[HandleMessage](s.handleMessage, 100) return nil @@ -283,16 +283,17 @@ func (s *space) PutTree(ctx context.Context, payload treestorage.TreeStorageCrea return } deps := synctree.BuildDeps{ - SpaceId: s.id, - ObjectSync: s.objectSync, - Configuration: s.configuration, - HeadNotifiable: s.headSync, - Listener: listener, - AclList: s.aclList, - SpaceStorage: s.storage, - OnClose: s.onObjectClose, - SyncStatus: s.syncStatus, - PeerGetter: s.peerManager, + SpaceId: s.id, + ObjectSync: s.objectSync, + Configuration: s.configuration, + HeadNotifiable: s.headSync, + Listener: listener, + AclList: s.aclList, + SpaceStorage: s.storage, + OnClose: s.onObjectClose, + SyncStatus: s.syncStatus, + PeerGetter: s.peerManager, + BuildObjectTree: s.treeManager.ObjectTreeBuilder(), } t, err = synctree.PutSyncTree(ctx, payload, deps) if err != nil { @@ -331,6 +332,7 @@ func (s *space) BuildTree(ctx context.Context, id string, opts BuildTreeOpts) (t SyncStatus: s.syncStatus, WaitTreeRemoteSync: opts.WaitTreeRemoteSync, PeerGetter: s.peerManager, + BuildObjectTree: s.treeManager.ObjectTreeBuilder(), } if t, err = synctree.BuildSyncTreeOrGetRemote(ctx, id, deps); err != nil { return nil, err diff --git a/commonspace/spaceservice.go b/commonspace/spaceservice.go index cf4a2710..cfe33692 100644 --- a/commonspace/spaceservice.go +++ b/commonspace/spaceservice.go @@ -9,7 +9,7 @@ import ( "github.com/anytypeio/any-sync/commonspace/headsync" "github.com/anytypeio/any-sync/commonspace/object/acl/aclrecordproto" "github.com/anytypeio/any-sync/commonspace/object/tree/treechangeproto" - "github.com/anytypeio/any-sync/commonspace/object/treegetter" + "github.com/anytypeio/any-sync/commonspace/object/treemanager" "github.com/anytypeio/any-sync/commonspace/objectsync" "github.com/anytypeio/any-sync/commonspace/peermanager" "github.com/anytypeio/any-sync/commonspace/spacestorage" @@ -49,7 +49,7 @@ type spaceService struct { storageProvider spacestorage.SpaceStorageProvider peermanagerProvider peermanager.PeerManagerProvider credentialProvider credentialprovider.CredentialProvider - treeGetter treegetter.TreeGetter + treeManager treemanager.TreeManager pool pool.Pool } @@ -58,7 +58,7 @@ func (s *spaceService) Init(a *app.App) (err error) { s.account = a.MustComponent(accountservice.CName).(accountservice.Service) s.storageProvider = a.MustComponent(spacestorage.CName).(spacestorage.SpaceStorageProvider) s.configurationService = a.MustComponent(nodeconf.CName).(nodeconf.Service) - s.treeGetter = a.MustComponent(treegetter.CName).(treegetter.TreeGetter) + s.treeManager = a.MustComponent(treemanager.CName).(treemanager.TreeManager) s.peermanagerProvider = a.MustComponent(peermanager.CName).(peermanager.PeerManagerProvider) credProvider := a.Component(credentialprovider.CName) if credProvider != nil { @@ -145,7 +145,7 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) { return nil, err } spaceIsDeleted.Swap(isDeleted) - getter := newCommonGetter(st.Id(), s.treeGetter, spaceIsClosed) + getter := newCommonGetter(st.Id(), s.treeManager, spaceIsClosed) syncStatus := syncstatus.NewNoOpSyncStatus() // this will work only for clients, not the best solution, but... if !lastConfiguration.IsResponsible(st.Id()) { @@ -165,7 +165,7 @@ func (s *spaceService) NewSpace(ctx context.Context, id string) (Space, error) { objectSync: objectSync, headSync: headSync, syncStatus: syncStatus, - cache: getter, + treeManager: getter, account: s.account, configuration: lastConfiguration, peerManager: peerManager,