mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-10 18:10:49 +09:00
GO-3170: add sync status update after push
Signed-off-by: AnastasiaShemyakinskaya <shem98a@mail.ru>
This commit is contained in:
parent
47e795aaab
commit
83e2fef669
4 changed files with 267 additions and 11 deletions
|
@ -183,6 +183,7 @@ packages:
|
|||
SyncDetailsUpdater:
|
||||
github.com/anyproto/anytype-heart/core/syncstatus/objectsyncstatus:
|
||||
interfaces:
|
||||
SpaceStatusUpdater:
|
||||
UpdateReceiver:
|
||||
config:
|
||||
dir: "{{.InterfaceDir}}"
|
||||
|
|
|
@ -0,0 +1,256 @@
|
|||
// Code generated by mockery. DO NOT EDIT.
|
||||
|
||||
package mock_objectsyncstatus
|
||||
|
||||
import (
|
||||
context "context"
|
||||
|
||||
app "github.com/anyproto/any-sync/app"
|
||||
|
||||
domain "github.com/anyproto/anytype-heart/core/domain"
|
||||
|
||||
mock "github.com/stretchr/testify/mock"
|
||||
)
|
||||
|
||||
// MockSpaceStatusUpdater is an autogenerated mock type for the SpaceStatusUpdater type
|
||||
type MockSpaceStatusUpdater struct {
|
||||
mock.Mock
|
||||
}
|
||||
|
||||
type MockSpaceStatusUpdater_Expecter struct {
|
||||
mock *mock.Mock
|
||||
}
|
||||
|
||||
func (_m *MockSpaceStatusUpdater) EXPECT() *MockSpaceStatusUpdater_Expecter {
|
||||
return &MockSpaceStatusUpdater_Expecter{mock: &_m.Mock}
|
||||
}
|
||||
|
||||
// Close provides a mock function with given fields: ctx
|
||||
func (_m *MockSpaceStatusUpdater) Close(ctx context.Context) error {
|
||||
ret := _m.Called(ctx)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for Close")
|
||||
}
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) error); ok {
|
||||
r0 = rf(ctx)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// MockSpaceStatusUpdater_Close_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Close'
|
||||
type MockSpaceStatusUpdater_Close_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// Close is a helper method to define mock.On call
|
||||
// - ctx context.Context
|
||||
func (_e *MockSpaceStatusUpdater_Expecter) Close(ctx interface{}) *MockSpaceStatusUpdater_Close_Call {
|
||||
return &MockSpaceStatusUpdater_Close_Call{Call: _e.mock.On("Close", ctx)}
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Close_Call) Run(run func(ctx context.Context)) *MockSpaceStatusUpdater_Close_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run(args[0].(context.Context))
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Close_Call) Return(err error) *MockSpaceStatusUpdater_Close_Call {
|
||||
_c.Call.Return(err)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Close_Call) RunAndReturn(run func(context.Context) error) *MockSpaceStatusUpdater_Close_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// Init provides a mock function with given fields: a
|
||||
func (_m *MockSpaceStatusUpdater) Init(a *app.App) error {
|
||||
ret := _m.Called(a)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for Init")
|
||||
}
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(*app.App) error); ok {
|
||||
r0 = rf(a)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// MockSpaceStatusUpdater_Init_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Init'
|
||||
type MockSpaceStatusUpdater_Init_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// Init is a helper method to define mock.On call
|
||||
// - a *app.App
|
||||
func (_e *MockSpaceStatusUpdater_Expecter) Init(a interface{}) *MockSpaceStatusUpdater_Init_Call {
|
||||
return &MockSpaceStatusUpdater_Init_Call{Call: _e.mock.On("Init", a)}
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Init_Call) Run(run func(a *app.App)) *MockSpaceStatusUpdater_Init_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run(args[0].(*app.App))
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Init_Call) Return(err error) *MockSpaceStatusUpdater_Init_Call {
|
||||
_c.Call.Return(err)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Init_Call) RunAndReturn(run func(*app.App) error) *MockSpaceStatusUpdater_Init_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// Name provides a mock function with given fields:
|
||||
func (_m *MockSpaceStatusUpdater) Name() string {
|
||||
ret := _m.Called()
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for Name")
|
||||
}
|
||||
|
||||
var r0 string
|
||||
if rf, ok := ret.Get(0).(func() string); ok {
|
||||
r0 = rf()
|
||||
} else {
|
||||
r0 = ret.Get(0).(string)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// MockSpaceStatusUpdater_Name_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Name'
|
||||
type MockSpaceStatusUpdater_Name_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// Name is a helper method to define mock.On call
|
||||
func (_e *MockSpaceStatusUpdater_Expecter) Name() *MockSpaceStatusUpdater_Name_Call {
|
||||
return &MockSpaceStatusUpdater_Name_Call{Call: _e.mock.On("Name")}
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Name_Call) Run(run func()) *MockSpaceStatusUpdater_Name_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run()
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Name_Call) Return(name string) *MockSpaceStatusUpdater_Name_Call {
|
||||
_c.Call.Return(name)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Name_Call) RunAndReturn(run func() string) *MockSpaceStatusUpdater_Name_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// Run provides a mock function with given fields: ctx
|
||||
func (_m *MockSpaceStatusUpdater) Run(ctx context.Context) error {
|
||||
ret := _m.Called(ctx)
|
||||
|
||||
if len(ret) == 0 {
|
||||
panic("no return value specified for Run")
|
||||
}
|
||||
|
||||
var r0 error
|
||||
if rf, ok := ret.Get(0).(func(context.Context) error); ok {
|
||||
r0 = rf(ctx)
|
||||
} else {
|
||||
r0 = ret.Error(0)
|
||||
}
|
||||
|
||||
return r0
|
||||
}
|
||||
|
||||
// MockSpaceStatusUpdater_Run_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'Run'
|
||||
type MockSpaceStatusUpdater_Run_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// Run is a helper method to define mock.On call
|
||||
// - ctx context.Context
|
||||
func (_e *MockSpaceStatusUpdater_Expecter) Run(ctx interface{}) *MockSpaceStatusUpdater_Run_Call {
|
||||
return &MockSpaceStatusUpdater_Run_Call{Call: _e.mock.On("Run", ctx)}
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Run_Call) Run(run func(ctx context.Context)) *MockSpaceStatusUpdater_Run_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run(args[0].(context.Context))
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Run_Call) Return(err error) *MockSpaceStatusUpdater_Run_Call {
|
||||
_c.Call.Return(err)
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_Run_Call) RunAndReturn(run func(context.Context) error) *MockSpaceStatusUpdater_Run_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// SendUpdate provides a mock function with given fields: spaceSync
|
||||
func (_m *MockSpaceStatusUpdater) SendUpdate(spaceSync *domain.SpaceSync) {
|
||||
_m.Called(spaceSync)
|
||||
}
|
||||
|
||||
// MockSpaceStatusUpdater_SendUpdate_Call is a *mock.Call that shadows Run/Return methods with type explicit version for method 'SendUpdate'
|
||||
type MockSpaceStatusUpdater_SendUpdate_Call struct {
|
||||
*mock.Call
|
||||
}
|
||||
|
||||
// SendUpdate is a helper method to define mock.On call
|
||||
// - spaceSync *domain.SpaceSync
|
||||
func (_e *MockSpaceStatusUpdater_Expecter) SendUpdate(spaceSync interface{}) *MockSpaceStatusUpdater_SendUpdate_Call {
|
||||
return &MockSpaceStatusUpdater_SendUpdate_Call{Call: _e.mock.On("SendUpdate", spaceSync)}
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_SendUpdate_Call) Run(run func(spaceSync *domain.SpaceSync)) *MockSpaceStatusUpdater_SendUpdate_Call {
|
||||
_c.Call.Run(func(args mock.Arguments) {
|
||||
run(args[0].(*domain.SpaceSync))
|
||||
})
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_SendUpdate_Call) Return() *MockSpaceStatusUpdater_SendUpdate_Call {
|
||||
_c.Call.Return()
|
||||
return _c
|
||||
}
|
||||
|
||||
func (_c *MockSpaceStatusUpdater_SendUpdate_Call) RunAndReturn(run func(*domain.SpaceSync)) *MockSpaceStatusUpdater_SendUpdate_Call {
|
||||
_c.Call.Return(run)
|
||||
return _c
|
||||
}
|
||||
|
||||
// NewMockSpaceStatusUpdater creates a new instance of MockSpaceStatusUpdater. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations.
|
||||
// The first argument is typically a *testing.T value.
|
||||
func NewMockSpaceStatusUpdater(t interface {
|
||||
mock.TestingT
|
||||
Cleanup(func())
|
||||
}) *MockSpaceStatusUpdater {
|
||||
mock := &MockSpaceStatusUpdater{}
|
||||
mock.Mock.Test(t)
|
||||
|
||||
t.Cleanup(func() { mock.AssertExpectations(t) })
|
||||
|
||||
return mock
|
||||
}
|
|
@ -101,6 +101,7 @@ func TestSyncStatusService_HeadsReceive(t *testing.T) {
|
|||
s.detailsUpdater.EXPECT().UpdateDetails("id", domain.Syncing, domain.Null, "spaceId")
|
||||
|
||||
// when
|
||||
s.spaceStatusUpdater.EXPECT().SendUpdate(domain.MakeSyncStatus(s.spaceId, domain.Syncing, 1, domain.Null, domain.Objects)).Return()
|
||||
s.HeadsChange("id", []string{"head1"})
|
||||
s.HeadsReceive("peerId", "id", []string{"head2"})
|
||||
|
||||
|
@ -116,6 +117,7 @@ func TestSyncStatusService_HeadsReceive(t *testing.T) {
|
|||
s.detailsUpdater.EXPECT().UpdateDetails("id", domain.Synced, domain.Null, "spaceId")
|
||||
|
||||
// when
|
||||
s.spaceStatusUpdater.EXPECT().SendUpdate(domain.MakeSyncStatus(s.spaceId, domain.Syncing, 1, domain.Null, domain.Objects)).Return()
|
||||
s.HeadsChange("id", []string{"head1"})
|
||||
s.HeadsReceive("peerId", "id", []string{"head1"})
|
||||
|
||||
|
|
|
@ -27,6 +27,13 @@ const (
|
|||
syncTimeout = time.Second
|
||||
)
|
||||
|
||||
var log = logger.NewNamed(syncstatus.CName)
|
||||
|
||||
type SpaceStatusUpdater interface {
|
||||
app.ComponentRunnable
|
||||
SendUpdate(spaceSync *domain.SpaceSync)
|
||||
}
|
||||
|
||||
type UpdateReceiver interface {
|
||||
UpdateTree(ctx context.Context, treeId string, status SyncStatus) (err error)
|
||||
UpdateNodeStatus(status ConnectionStatus)
|
||||
|
@ -109,6 +116,7 @@ func (s *syncStatusService) Init(a *app.App) (err error) {
|
|||
s.spaceId = sharedState.SpaceId
|
||||
s.configuration = app.MustComponent[nodeconf.NodeConf](a)
|
||||
s.storage = app.MustComponent[spacestorage.SpaceStorage](a)
|
||||
s.spaceSyncStatus = app.MustComponent[SpaceStatusUpdater](a)
|
||||
s.periodicSync = periodicsync.NewPeriodicSync(
|
||||
s.updateIntervalSecs,
|
||||
s.updateTimeout,
|
||||
|
@ -152,17 +160,6 @@ func (s *syncStatusService) HeadsChange(treeId string, heads []string) {
|
|||
s.updateDetails(treeId, domain.Syncing)
|
||||
}
|
||||
|
||||
func (s *syncStatusService) SetNodesStatus(senderId string, status ConnectionStatus) {
|
||||
if !s.isSenderResponsible(senderId) {
|
||||
return
|
||||
}
|
||||
|
||||
s.Lock()
|
||||
defer s.Unlock()
|
||||
|
||||
s.nodeStatus = status
|
||||
}
|
||||
|
||||
func (s *syncStatusService) update(ctx context.Context) (err error) {
|
||||
s.treeStatusBuf = s.treeStatusBuf[:0]
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue