diff --git a/common/commonspace/synctree/synctree.go b/common/commonspace/synctree/synctree.go index c8221024..abd4fc6f 100644 --- a/common/commonspace/synctree/synctree.go +++ b/common/commonspace/synctree/synctree.go @@ -132,45 +132,42 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t return } - store, err := deps.SpaceStorage.TreeStorage(id) + deps.TreeStorage, err = deps.SpaceStorage.TreeStorage(id) + if err == nil { + return buildSyncTree(ctx, false, deps) + } + if err != nil && err != storage.ErrUnknownTreeId { return } - isFirstBuild := false - if err == storage.ErrUnknownTreeId { - isFirstBuild = true - - var resp *treechangeproto.TreeSyncMessage - resp, err = getTreeRemote() - if err != nil { - return - } - fullSyncResp := resp.GetContent().GetFullSyncResponse() - - payload := storage.TreeStorageCreatePayload{ - TreeId: id, - RootRawChange: resp.RootChange, - Changes: fullSyncResp.Changes, - Heads: fullSyncResp.Heads, - } - - // basically building tree with inmemory storage and validating that it was without errors - err = tree.ValidateRawTree(payload, deps.AclList) - if err != nil { - return - } - // now we are sure that we can save it to the storage - store, err = deps.SpaceStorage.CreateTreeStorage(payload) - if err != nil { - return - } + resp, err := getTreeRemote() + if err != nil { + return } - deps.TreeStorage = store - return BuildSyncTree(ctx, isFirstBuild, deps) + fullSyncResp := resp.GetContent().GetFullSyncResponse() + + payload := storage.TreeStorageCreatePayload{ + TreeId: id, + RootRawChange: resp.RootChange, + Changes: fullSyncResp.Changes, + Heads: fullSyncResp.Heads, + } + + // basically building tree with in-memory storage and validating that it was without errors + err = tree.ValidateRawTree(payload, deps.AclList) + if err != nil { + return + } + // now we are sure that we can save it to the storage + deps.TreeStorage, err = deps.SpaceStorage.CreateTreeStorage(payload) + if err != nil { + return + } + return buildSyncTree(ctx, true, deps) } -func BuildSyncTree( +func buildSyncTree( ctx context.Context, isFirstBuild bool, deps BuildDeps) (t tree.ObjectTree, err error) { diff --git a/common/commonspace/synctree/synctree_test.go b/common/commonspace/synctree/synctree_test.go index 8d62f9b0..bcb1749a 100644 --- a/common/commonspace/synctree/synctree_test.go +++ b/common/commonspace/synctree/synctree_test.go @@ -103,7 +103,7 @@ func Test_BuildSyncTree(t *testing.T) { syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate) syncClientMock.EXPECT().BroadcastAsyncOrSendResponsible(gomock.Eq(headUpdate)).Return(nil) - tr, err := BuildSyncTree(ctx, syncClientMock, storageMock, updateListenerMock, aclListMock, false) + tr, err := buildSyncTree(ctx, syncClientMock, storageMock, updateListenerMock, aclListMock, false) require.NoError(t, err) t.Run("AddRawChanges update", func(t *testing.T) {