Skip to content

Commit 23b34fb

Browse files
authored
Expand mutex setup to revisions and exceptions (#6049)
Task/Issue URL: https://app.asana.com/1/137249556945/project/1202552961248957/task/1210226116146307?focus=true ### Description We still see some ANRs that seem to be related to a database connection not being acquired on first app run. Looking at the logs, it looks like it happens on devices with 1GB RAM, which only allow for 1 simultaneous SQLite connection. Add mutex to get revisions, so if another DB operation needs to happen at the same time, it can decide whether to wait for the lock to be acquired or use a default value ### Steps to test this PR _Feature 1_ - [ ] Smoke test malicious site protections
1 parent 3c05f61 commit 23b34fb

File tree

3 files changed

+1
-8
lines changed

3 files changed

+1
-8
lines changed

malicious-site-protection/malicious-site-protection-impl/src/main/kotlin/com/duckduckgo/malicioussiteprotection/impl/data/MaliciousSiteRepository.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.M
2424
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.PHISHING
2525
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.SCAM
2626
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSitePixelName.MALICIOUS_SITE_CLIENT_TIMEOUT
27-
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSiteProtectionRCFeature
2827
import com.duckduckgo.malicioussiteprotection.impl.data.db.MaliciousSiteDao
2928
import com.duckduckgo.malicioussiteprotection.impl.data.db.RevisionEntity
3029
import com.duckduckgo.malicioussiteprotection.impl.data.network.FilterResponse
@@ -83,7 +82,6 @@ class RealMaliciousSiteRepository @Inject constructor(
8382
private val maliciousSiteDatasetService: MaliciousSiteDatasetService,
8483
private val dispatcherProvider: DispatcherProvider,
8584
private val pixels: Pixel,
86-
private val maliciousSiteProtectionFeature: MaliciousSiteProtectionRCFeature,
8785
) : MaliciousSiteRepository {
8886

8987
private val writeMutex = Mutex()
@@ -177,7 +175,7 @@ class RealMaliciousSiteRepository @Inject constructor(
177175
): Result<Unit> {
178176
return withContext(dispatcherProvider.io()) {
179177
val networkRevision = maliciousSiteService.getRevision().revision
180-
val localRevisions = getLocalRevisions(type)
178+
val localRevisions = writeMutex.withLock { getLocalRevisions(type) }
181179

182180
try {
183181
loadData(localRevisions, networkRevision)

malicious-site-protection/malicious-site-protection-impl/src/test/kotlin/com/duckduckgo/malicioussiteprotection/impl/MaliciousSiteProtectionReferenceTest.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,6 @@ class MaliciousSiteProtectionReferenceTest(private val testCase: TestCase) {
9999
maliciousSiteDatasetService,
100100
coroutineRule.testDispatcherProvider,
101101
mockPixel,
102-
mockMaliciousSiteProtectionRCFeature,
103102
)
104103

105104
@Before
@@ -148,7 +147,6 @@ class MaliciousSiteProtectionReferenceTest(private val testCase: TestCase) {
148147
),
149148
)
150149
whenever(mockMaliciousSiteProtectionRCFeature.isFeatureEnabled()).thenReturn(true)
151-
whenever(mockMaliciousSiteProtectionRCRepository.isExempted(any())).thenReturn(false)
152150
repository.loadFilters(*enumValues<Feed>())
153151
repository.loadHashPrefixes(*enumValues<Feed>())
154152

malicious-site-protection/malicious-site-protection-impl/src/test/kotlin/com/duckduckgo/malicioussiteprotection/impl/data/RealMaliciousSiteRepositoryTest.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import com.duckduckgo.app.statistics.pixels.Pixel
44
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed
55
import com.duckduckgo.malicioussiteprotection.api.MaliciousSiteProtection.Feed.PHISHING
66
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSitePixelName.MALICIOUS_SITE_CLIENT_TIMEOUT
7-
import com.duckduckgo.malicioussiteprotection.impl.MaliciousSiteProtectionRCFeature
87
import com.duckduckgo.malicioussiteprotection.impl.data.db.FilterEntity
98
import com.duckduckgo.malicioussiteprotection.impl.data.db.HashPrefixEntity
109
import com.duckduckgo.malicioussiteprotection.impl.data.db.MaliciousSiteDao
@@ -44,14 +43,12 @@ class RealMaliciousSiteRepositoryTest {
4443
private val maliciousSiteService: MaliciousSiteService = mock()
4544
private val maliciousSiteDatasetService: MaliciousSiteDatasetService = mock()
4645
private val mockPixel: Pixel = mock()
47-
private val mockMaliciousSiteProtectionRCFeature: MaliciousSiteProtectionRCFeature = mock()
4846
private val repository = RealMaliciousSiteRepository(
4947
maliciousSiteDao,
5048
maliciousSiteService,
5149
maliciousSiteDatasetService,
5250
coroutineRule.testDispatcherProvider,
5351
mockPixel,
54-
mockMaliciousSiteProtectionRCFeature,
5552
)
5653

5754
@Test

0 commit comments

Comments
 (0)