From 31fb2180a23cfee510a60089962789209ac9568a Mon Sep 17 00:00:00 2001 From: Marinov Date: Fri, 14 Nov 2025 19:02:24 +0200 Subject: [PATCH 1/2] Remove redundant configuration refresh in upsync task --- .../infra/eventsync/sync/up/tasks/EventUpSyncTask.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/tasks/EventUpSyncTask.kt b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/tasks/EventUpSyncTask.kt index c3afc6e5cc..dd9ea6d14e 100644 --- a/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/tasks/EventUpSyncTask.kt +++ b/infra/event-sync/src/main/java/com/simprints/infra/eventsync/sync/up/tasks/EventUpSyncTask.kt @@ -70,9 +70,8 @@ internal class EventUpSyncTask @Inject constructor( } } - val projectWithConfig = configManager.refreshProject(operation.projectId) - val project = projectWithConfig.project - val config = projectWithConfig.configuration + val project = configManager.getProject(operation.projectId) + val config = configManager.getProjectConfiguration() var lastOperation = operation.copy() var isUsefulUpload = false From 403fbd28172268b27739da1d22dd0e859f88388a Mon Sep 17 00:00:00 2001 From: Marinov Date: Fri, 14 Nov 2025 19:17:36 +0200 Subject: [PATCH 2/2] Move all post-config refresh processing to the worker and keep only tokenization in ConfigManager; Move local records reset before worker rescheduling --- .../java/com/simprints/infra/config/sync/ConfigManager.kt | 3 --- .../com/simprints/infra/config/sync/ConfigManagerTest.kt | 8 +------- .../sync/config/worker/ProjectConfigDownSyncWorker.kt | 5 ++++- .../sync/config/worker/ProjectConfigDownSyncWorkerTest.kt | 8 +++++++- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/infra/config-sync/src/main/java/com/simprints/infra/config/sync/ConfigManager.kt b/infra/config-sync/src/main/java/com/simprints/infra/config/sync/ConfigManager.kt index f29f83f55c..4588f3511d 100644 --- a/infra/config-sync/src/main/java/com/simprints/infra/config/sync/ConfigManager.kt +++ b/infra/config-sync/src/main/java/com/simprints/infra/config/sync/ConfigManager.kt @@ -8,7 +8,6 @@ import com.simprints.infra.config.store.models.Project import com.simprints.infra.config.store.models.ProjectConfiguration import com.simprints.infra.config.store.models.ProjectWithConfig import com.simprints.infra.enrolment.records.repository.EnrolmentRecordRepository -import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationScheduler import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -21,7 +20,6 @@ class ConfigManager @Inject constructor( private val configRepository: ConfigRepository, private val enrolmentRecordRepository: EnrolmentRecordRepository, private val configSyncCache: ConfigSyncCache, - private val realmToRoomMigrationScheduler: RealmToRoomMigrationScheduler, ) { private val isProjectRefreshingFlow: MutableStateFlow = MutableStateFlow(false) @@ -31,7 +29,6 @@ class ConfigManager @Inject constructor( return configRepository.refreshProject(projectId).also { enrolmentRecordRepository.tokenizeExistingRecords(it.project) configSyncCache.saveUpdateTime() - realmToRoomMigrationScheduler.scheduleMigrationWorkerIfNeeded() } } finally { isProjectRefreshingFlow.tryEmit(false) diff --git a/infra/config-sync/src/test/java/com/simprints/infra/config/sync/ConfigManagerTest.kt b/infra/config-sync/src/test/java/com/simprints/infra/config/sync/ConfigManagerTest.kt index 5173116b30..22bcc1fb14 100644 --- a/infra/config-sync/src/test/java/com/simprints/infra/config/sync/ConfigManagerTest.kt +++ b/infra/config-sync/src/test/java/com/simprints/infra/config/sync/ConfigManagerTest.kt @@ -7,7 +7,6 @@ import com.simprints.infra.config.store.models.Project import com.simprints.infra.config.store.models.ProjectConfiguration import com.simprints.infra.config.store.models.ProjectWithConfig import com.simprints.infra.enrolment.records.repository.EnrolmentRecordRepository -import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationScheduler import io.mockk.* import io.mockk.impl.annotations.MockK import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -47,9 +46,6 @@ class ConfigManagerTest { @MockK private lateinit var deviceConfiguration: DeviceConfiguration - @MockK - private lateinit var realmToRoomMigrationScheduler: RealmToRoomMigrationScheduler - @MockK private lateinit var project: Project @@ -60,7 +56,6 @@ class ConfigManagerTest { configRepository = configRepository, enrolmentRecordRepository = enrolmentRecordRepository, configSyncCache = configSyncCache, - realmToRoomMigrationScheduler = realmToRoomMigrationScheduler, ) } @@ -72,7 +67,6 @@ class ConfigManagerTest { assertThat(refreshedProject).isEqualTo(projectWithConfig) coVerify { configSyncCache.saveUpdateTime() } - coVerify { realmToRoomMigrationScheduler.scheduleMigrationWorkerIfNeeded() } } @Test @@ -228,7 +222,7 @@ class ConfigManagerTest { launch { try { configManager.refreshProject(PROJECT_ID) - } catch (e: Exception) { + } catch (_: Exception) { // Expected } } diff --git a/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorker.kt b/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorker.kt index 9c8f196d4e..770b8229a9 100644 --- a/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorker.kt +++ b/infra/sync/src/main/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorker.kt @@ -7,6 +7,7 @@ import com.simprints.core.DispatcherBG import com.simprints.core.workers.SimCoroutineWorker import com.simprints.infra.authstore.AuthStore import com.simprints.infra.config.sync.ConfigManager +import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationScheduler import com.simprints.infra.sync.config.usecase.HandleProjectStateUseCase import com.simprints.infra.sync.config.usecase.RescheduleWorkersIfConfigChangedUseCase import com.simprints.infra.sync.config.usecase.ResetLocalRecordsIfConfigChangedUseCase @@ -24,6 +25,7 @@ internal class ProjectConfigDownSyncWorker @AssistedInject constructor( private val handleProjectState: HandleProjectStateUseCase, private val rescheduleWorkersIfConfigChanged: RescheduleWorkersIfConfigChangedUseCase, private val resetLocalRecordsIfConfigChanged: ResetLocalRecordsIfConfigChangedUseCase, + private val realmToRoomMigrationScheduler: RealmToRoomMigrationScheduler, @DispatcherBG private val dispatcher: CoroutineDispatcher, ) : SimCoroutineWorker(context, params) { override val tag = "ProjectConfigDownSync" @@ -41,8 +43,9 @@ internal class ProjectConfigDownSyncWorker @AssistedInject constructor( } else { val (project, config) = configManager.refreshProject(projectId) handleProjectState(project.state) - rescheduleWorkersIfConfigChanged(oldConfig, config) resetLocalRecordsIfConfigChanged(oldConfig, config) + realmToRoomMigrationScheduler.scheduleMigrationWorkerIfNeeded() + rescheduleWorkersIfConfigChanged(oldConfig, config) success() } } catch (t: Throwable) { diff --git a/infra/sync/src/test/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorkerTest.kt b/infra/sync/src/test/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorkerTest.kt index 81c5f6ac1d..d21fbeb997 100644 --- a/infra/sync/src/test/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorkerTest.kt +++ b/infra/sync/src/test/java/com/simprints/infra/sync/config/worker/ProjectConfigDownSyncWorkerTest.kt @@ -6,6 +6,7 @@ import com.google.common.truth.Truth.assertThat import com.simprints.infra.authstore.AuthStore import com.simprints.infra.config.store.models.ProjectWithConfig import com.simprints.infra.config.sync.ConfigManager +import com.simprints.infra.enrolment.records.repository.local.migration.RealmToRoomMigrationScheduler import com.simprints.infra.sync.config.testtools.project import com.simprints.infra.sync.config.testtools.projectConfiguration import com.simprints.infra.sync.config.usecase.HandleProjectStateUseCase @@ -42,6 +43,9 @@ class ProjectConfigDownSyncWorkerTest { @MockK private lateinit var resetLocalRecordsIfConfigChangedUseCase: ResetLocalRecordsIfConfigChangedUseCase + @MockK + private lateinit var realmToRoomMigrationScheduler: RealmToRoomMigrationScheduler + private lateinit var projectConfigDownSyncWorker: ProjectConfigDownSyncWorker @Before @@ -60,6 +64,7 @@ class ProjectConfigDownSyncWorkerTest { handleProjectState = handleProjectStateUseCase, rescheduleWorkersIfConfigChanged = rescheduleWorkersIfConfigChangedUseCase, resetLocalRecordsIfConfigChanged = resetLocalRecordsIfConfigChangedUseCase, + realmToRoomMigrationScheduler = realmToRoomMigrationScheduler, dispatcher = testCoroutineRule.testCoroutineDispatcher, ) } @@ -94,8 +99,9 @@ class ProjectConfigDownSyncWorkerTest { coVerify { handleProjectStateUseCase.invoke(any()) - rescheduleWorkersIfConfigChangedUseCase.invoke(any(), any()) resetLocalRecordsIfConfigChangedUseCase.invoke(any(), any()) + realmToRoomMigrationScheduler.scheduleMigrationWorkerIfNeeded() + rescheduleWorkersIfConfigChangedUseCase.invoke(any(), any()) } }