Refactor synctree

This commit is contained in:
mcrakhman 2022-10-22 16:19:47 +02:00 committed by Mikhail Iudin
parent 6518a0f971
commit e1784aa2fb
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
2 changed files with 30 additions and 33 deletions

View File

@ -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) {

View File

@ -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) {