Refactor synctree
This commit is contained in:
parent
6518a0f971
commit
e1784aa2fb
@ -132,45 +132,42 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
|
|||||||
return
|
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 {
|
if err != nil && err != storage.ErrUnknownTreeId {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
isFirstBuild := false
|
resp, err := getTreeRemote()
|
||||||
if err == storage.ErrUnknownTreeId {
|
if err != nil {
|
||||||
isFirstBuild = true
|
return
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
deps.TreeStorage = store
|
fullSyncResp := resp.GetContent().GetFullSyncResponse()
|
||||||
return BuildSyncTree(ctx, isFirstBuild, deps)
|
|
||||||
|
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,
|
ctx context.Context,
|
||||||
isFirstBuild bool,
|
isFirstBuild bool,
|
||||||
deps BuildDeps) (t tree.ObjectTree, err error) {
|
deps BuildDeps) (t tree.ObjectTree, err error) {
|
||||||
|
|||||||
@ -103,7 +103,7 @@ func Test_BuildSyncTree(t *testing.T) {
|
|||||||
syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate)
|
syncClientMock.EXPECT().CreateHeadUpdate(syncTreeMatcher{objTreeMock, syncClientMock, updateListenerMock}, gomock.Nil()).Return(headUpdate)
|
||||||
syncClientMock.EXPECT().BroadcastAsyncOrSendResponsible(gomock.Eq(headUpdate)).Return(nil)
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
t.Run("AddRawChanges update", func(t *testing.T) {
|
t.Run("AddRawChanges update", func(t *testing.T) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user