Update any-sync to wait sync for docs

This commit is contained in:
mcrakhman 2023-01-13 11:42:44 +01:00 committed by Mikhail Iudin
parent c27e8a9773
commit 3cbecca696
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
4 changed files with 60 additions and 31 deletions

View File

@ -97,18 +97,18 @@ func (mr *MockObjectTreeMockRecorder) Close() *gomock.Call {
}
// DebugDump mocks base method.
func (m *MockObjectTree) DebugDump() (string, error) {
func (m *MockObjectTree) DebugDump(arg0 objecttree.DescriptionParser) (string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DebugDump")
ret := m.ctrl.Call(m, "DebugDump", arg0)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DebugDump indicates an expected call of DebugDump.
func (mr *MockObjectTreeMockRecorder) DebugDump() *gomock.Call {
func (mr *MockObjectTreeMockRecorder) DebugDump(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DebugDump", reflect.TypeOf((*MockObjectTree)(nil).DebugDump))
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DebugDump", reflect.TypeOf((*MockObjectTree)(nil).DebugDump), arg0)
}
// Delete mocks base method.

View File

@ -221,18 +221,18 @@ func (mr *MockSyncTreeMockRecorder) Close() *gomock.Call {
}
// DebugDump mocks base method.
func (m *MockSyncTree) DebugDump() (string, error) {
func (m *MockSyncTree) DebugDump(arg0 objecttree.DescriptionParser) (string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DebugDump")
ret := m.ctrl.Call(m, "DebugDump", arg0)
ret0, _ := ret[0].(string)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DebugDump indicates an expected call of DebugDump.
func (mr *MockSyncTreeMockRecorder) DebugDump() *gomock.Call {
func (mr *MockSyncTreeMockRecorder) DebugDump(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DebugDump", reflect.TypeOf((*MockSyncTree)(nil).DebugDump))
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DebugDump", reflect.TypeOf((*MockSyncTree)(nil).DebugDump), arg0)
}
// Delete mocks base method.

View File

@ -65,6 +65,7 @@ type BuildDeps struct {
TreeStorage treestorage.TreeStorage
TreeUsage *atomic.Int32
SyncStatus syncstatus.StatusUpdater
WaitTreeRemoteSync bool
}
func newWrappedSyncClient(
@ -104,6 +105,25 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
return
}
waitTree := func(wait bool) (msg *treechangeproto.TreeSyncMessage, err error) {
if !wait {
return getTreeRemote()
}
for {
msg, err = getTreeRemote()
if err == nil {
return
}
select {
case <-ctx.Done():
err = fmt.Errorf("waiting for object %s interrupted, context closed", id)
return
default:
break
}
}
}
deps.TreeStorage, err = deps.SpaceStorage.TreeStorage(id)
if err == nil {
return buildSyncTree(ctx, false, deps)
@ -122,7 +142,7 @@ func BuildSyncTreeOrGetRemote(ctx context.Context, id string, deps BuildDeps) (t
return
}
resp, err := getTreeRemote()
resp, err := waitTree(deps.WaitTreeRemoteSync)
if err != nil {
return
}

View File

@ -84,7 +84,7 @@ type Space interface {
DeriveTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error)
CreateTree(ctx context.Context, payload objecttree.ObjectTreeCreatePayload) (res treestorage.TreeStorageCreatePayload, err error)
PutTree(ctx context.Context, payload treestorage.TreeStorageCreatePayload, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error)
BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (objecttree.ObjectTree, error)
BuildTree(ctx context.Context, id string, opts BuildTreeOpts) (t objecttree.ObjectTree, err error)
DeleteTree(ctx context.Context, id string) (err error)
SyncStatus() syncstatus.StatusUpdater
@ -176,7 +176,10 @@ func (s *space) Init(ctx context.Context) (err error) {
deletionState := deletionstate.NewDeletionState(s.storage)
deps := settings.Deps{
BuildFunc: func(ctx context.Context, id string, listener updatelistener.UpdateListener) (t synctree.SyncTree, err error) {
res, err := s.BuildTree(ctx, id, listener)
res, err := s.BuildTree(ctx, id, BuildTreeOpts{
Listener: listener,
WaitTreeRemoteSync: false,
})
if err != nil {
return
}
@ -289,7 +292,12 @@ func (s *space) PutTree(ctx context.Context, payload treestorage.TreeStorageCrea
return
}
func (s *space) BuildTree(ctx context.Context, id string, listener updatelistener.UpdateListener) (t objecttree.ObjectTree, err error) {
type BuildTreeOpts struct {
Listener updatelistener.UpdateListener
WaitTreeRemoteSync bool
}
func (s *space) BuildTree(ctx context.Context, id string, opts BuildTreeOpts) (t objecttree.ObjectTree, err error) {
if s.isClosed.Load() {
err = ErrSpaceClosed
return
@ -300,11 +308,12 @@ func (s *space) BuildTree(ctx context.Context, id string, listener updatelistene
ObjectSync: s.objectSync,
Configuration: s.configuration,
HeadNotifiable: s.headSync,
Listener: listener,
Listener: opts.Listener,
AclList: s.aclList,
SpaceStorage: s.storage,
TreeUsage: &s.treesUsed,
SyncStatus: s.syncStatus,
WaitTreeRemoteSync: opts.WaitTreeRemoteSync,
}
return synctree.BuildSyncTreeOrGetRemote(ctx, id, deps)
}