From 81dd57ff753ba3a7d630581a07907f8c3a7ef840 Mon Sep 17 00:00:00 2001 From: Matthias Urhahn <matthias.urhahn@sap.com> Date: Mon, 16 Nov 2020 15:00:22 +0100 Subject: [PATCH] Fix passive config requests triggering a refresh (EXPOSUREAPP-3774) (#1608) * Make config sharing behavior `SharingStarted.Lazily`. (start once, never release) Otherwise classes that are just interested in the current config, if there is no other subscriber active, would launch the `startValueProvider` and pull a config each time. The ExposureDetectionTracker is such a candidate that would like to use the latest config every ~3min. While this already no longer happens since "Track config changes" (4d1ecb54fa8a08b853feb2980f8fff8b33fc49f9), because there is no a class that is permanently subscribed to `currentConfig`, we should not rely on side-effects, so let's make the sharing behavior explicit. * Fix test regression. Co-authored-by: harambasicluka <64483219+harambasicluka@users.noreply.github.com> --- .../java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt | 2 +- .../de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt index 71906e831..7e17e8406 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/appconfig/AppConfigProvider.kt @@ -22,7 +22,7 @@ class AppConfigProvider @Inject constructor( loggingTag = "AppConfigProvider", scope = scope, coroutineContext = dispatcherProvider.IO, - sharingBehavior = SharingStarted.WhileSubscribed(replayExpirationMillis = 0) + sharingBehavior = SharingStarted.Lazily ) { source.retrieveConfig() } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt index 8f5817cf7..105844e8a 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/appconfig/AppConfigProviderTest.kt @@ -98,7 +98,7 @@ class AppConfigProviderTest : BaseIOTest() { } @Test - fun `appConfig uses WHILE_SUBSCRIBED mode`() = runBlockingTest2(ignoreActive = true) { + fun `appConfig uses LAZILY mode`() = runBlockingTest2(ignoreActive = true) { val instance = createInstance(this) val testCollector1 = instance.currentConfig.test(startOnScope = this) @@ -123,7 +123,7 @@ class AppConfigProviderTest : BaseIOTest() { advanceUntilIdle() testCollector4.cancel() - coVerify(exactly = 2) { source.retrieveConfig() } + coVerify(exactly = 1) { source.retrieveConfig() } } @Test -- GitLab