mirror of
https://github.com/anyproto/anytype-heart.git
synced 2025-06-09 17:44:59 +09:00
Merge pull request #1376 from anyproto/fix-repeated-statuses
Fix repeated sync status event sending
This commit is contained in:
commit
cd155c5ef9
4 changed files with 55 additions and 19 deletions
|
@ -79,6 +79,10 @@ func (o *ObjectState) SetSyncStatusAndErr(status domain.SpaceSyncStatus, syncErr
|
|||
o.objectSyncStatusBySpace[spaceId] = domain.Syncing
|
||||
o.objectSyncErrBySpace[spaceId] = domain.Null
|
||||
return
|
||||
} else if ok && objectNumber == 0 && status == domain.Syncing {
|
||||
o.objectSyncStatusBySpace[spaceId] = domain.Synced
|
||||
o.objectSyncErrBySpace[spaceId] = domain.Null
|
||||
return
|
||||
}
|
||||
o.objectSyncStatusBySpace[spaceId] = status
|
||||
o.objectSyncErrBySpace[spaceId] = syncErr
|
||||
|
|
|
@ -142,4 +142,16 @@ func TestObjectState_SetSyncStatus(t *testing.T) {
|
|||
// then
|
||||
assert.Equal(t, domain.Offline, objectState.GetSyncStatus("spaceId"))
|
||||
})
|
||||
t.Run("SetSyncStatusAndErr, syncing", func(t *testing.T) {
|
||||
// given
|
||||
objectState := NewObjectState(objectstore.NewStoreFixture(t))
|
||||
|
||||
// when
|
||||
syncStatus := domain.MakeSyncStatus("spaceId", domain.Syncing, domain.Null, domain.Objects)
|
||||
objectState.SetObjectsNumber(syncStatus)
|
||||
objectState.SetSyncStatusAndErr(syncStatus.Status, domain.Null, syncStatus.SpaceId)
|
||||
|
||||
// then
|
||||
assert.Equal(t, domain.Synced, objectState.GetSyncStatus("spaceId"))
|
||||
})
|
||||
}
|
||||
|
|
|
@ -156,7 +156,8 @@ func (s *spaceSyncStatus) processEvents() {
|
|||
}
|
||||
|
||||
func (s *spaceSyncStatus) updateSpaceSyncStatus(receivedStatus *domain.SpaceSync) {
|
||||
if s.isStatusNotChanged(receivedStatus) {
|
||||
currSyncStatus := s.getSpaceSyncStatus(receivedStatus.SpaceId)
|
||||
if s.isStatusNotChanged(receivedStatus, currSyncStatus) {
|
||||
return
|
||||
}
|
||||
state := s.getCurrentState(receivedStatus)
|
||||
|
@ -168,7 +169,7 @@ func (s *spaceSyncStatus) updateSpaceSyncStatus(receivedStatus *domain.SpaceSync
|
|||
spaceStatus := s.getSpaceSyncStatus(receivedStatus.SpaceId)
|
||||
|
||||
// send synced event only if files and objects are all synced
|
||||
if !s.needToSendEvent(spaceStatus, prevObjectNumber, newObjectNumber) {
|
||||
if !s.needToSendEvent(spaceStatus, currSyncStatus, prevObjectNumber, newObjectNumber) {
|
||||
return
|
||||
}
|
||||
s.eventSender.Broadcast(&pb.Event{
|
||||
|
@ -181,13 +182,12 @@ func (s *spaceSyncStatus) updateSpaceSyncStatus(receivedStatus *domain.SpaceSync
|
|||
state.ResetSpaceErrorStatus(receivedStatus.SpaceId, receivedStatus.SyncError)
|
||||
}
|
||||
|
||||
func (s *spaceSyncStatus) isStatusNotChanged(status *domain.SpaceSync) bool {
|
||||
func (s *spaceSyncStatus) isStatusNotChanged(status *domain.SpaceSync, syncStatus domain.SpaceSyncStatus) bool {
|
||||
if status.Status == domain.Syncing {
|
||||
// we need to check if number of syncing object is changed first
|
||||
return false
|
||||
}
|
||||
syncErrNotChanged := s.getError(status.SpaceId) == mapError(status.SyncError)
|
||||
syncStatus := s.getSpaceSyncStatus(status.SpaceId)
|
||||
if syncStatus == domain.Unknown {
|
||||
return false
|
||||
}
|
||||
|
@ -198,9 +198,9 @@ func (s *spaceSyncStatus) isStatusNotChanged(status *domain.SpaceSync) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (s *spaceSyncStatus) needToSendEvent(status domain.SpaceSyncStatus, prevObjectNumber int64, newObjectNumber int64) bool {
|
||||
func (s *spaceSyncStatus) needToSendEvent(status domain.SpaceSyncStatus, currSyncStatus domain.SpaceSyncStatus, prevObjectNumber int64, newObjectNumber int64) bool {
|
||||
// that because we get update on syncing objects count, so we need to send updated object counter to client
|
||||
return status != domain.Syncing || prevObjectNumber != newObjectNumber
|
||||
return (status == domain.Syncing && prevObjectNumber != newObjectNumber) || currSyncStatus != status
|
||||
}
|
||||
|
||||
func (s *spaceSyncStatus) Close(ctx context.Context) (err error) {
|
||||
|
|
|
@ -352,19 +352,6 @@ func TestSpaceSyncStatus_updateSpaceSyncStatus(t *testing.T) {
|
|||
t.Run("send synced event", func(t *testing.T) {
|
||||
// given
|
||||
eventSender := mock_event.NewMockSender(t)
|
||||
eventSender.EXPECT().Broadcast(&pb.Event{
|
||||
Messages: []*pb.EventMessage{{
|
||||
Value: &pb.EventMessageValueOfSpaceSyncStatusUpdate{
|
||||
SpaceSyncStatusUpdate: &pb.EventSpaceSyncStatusUpdate{
|
||||
Id: "spaceId",
|
||||
Status: pb.EventSpace_Synced,
|
||||
Network: pb.EventSpace_SelfHost,
|
||||
Error: pb.EventSpace_Null,
|
||||
SyncingObjectsCounter: 0,
|
||||
},
|
||||
},
|
||||
}},
|
||||
})
|
||||
status := spaceSyncStatus{
|
||||
eventSender: eventSender,
|
||||
networkConfig: &config.Config{NetworkMode: pb.RpcAccount_CustomConfig},
|
||||
|
@ -495,6 +482,39 @@ func TestSpaceSyncStatus_updateSpaceSyncStatus(t *testing.T) {
|
|||
status.updateSpaceSyncStatus(syncStatus)
|
||||
status.updateSpaceSyncStatus(syncStatus)
|
||||
})
|
||||
t.Run("not send not changed event", func(t *testing.T) {
|
||||
// given
|
||||
eventSender := mock_event.NewMockSender(t)
|
||||
status := spaceSyncStatus{
|
||||
eventSender: eventSender,
|
||||
networkConfig: &config.Config{NetworkMode: pb.RpcAccount_CustomConfig},
|
||||
batcher: mb.New[*domain.SpaceSync](0),
|
||||
filesState: NewFileState(objectstore.NewStoreFixture(t)),
|
||||
objectsState: NewObjectState(objectstore.NewStoreFixture(t)),
|
||||
}
|
||||
status.objectsState.SetSyncStatusAndErr(domain.Synced, domain.Null, "spaceId")
|
||||
status.filesState.SetSyncStatusAndErr(domain.Synced, domain.Null, "spaceId")
|
||||
|
||||
// then
|
||||
syncStatus := domain.MakeSyncStatus("spaceId", domain.Syncing, domain.Null, domain.Objects)
|
||||
status.objectsState.SetObjectsNumber(syncStatus)
|
||||
status.updateSpaceSyncStatus(syncStatus)
|
||||
|
||||
// when
|
||||
eventSender.AssertNotCalled(t, "Broadcast", &pb.Event{
|
||||
Messages: []*pb.EventMessage{{
|
||||
Value: &pb.EventMessageValueOfSpaceSyncStatusUpdate{
|
||||
SpaceSyncStatusUpdate: &pb.EventSpaceSyncStatusUpdate{
|
||||
Id: "spaceId",
|
||||
Status: pb.EventSpace_Synced,
|
||||
Network: pb.EventSpace_SelfHost,
|
||||
Error: pb.EventSpace_Null,
|
||||
SyncingObjectsCounter: 0,
|
||||
},
|
||||
},
|
||||
}},
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
func TestSpaceSyncStatus_SendUpdate(t *testing.T) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue