Skip to content

Commit c5b619f

Browse files
authored
Merge pull request #2616 from DataDog/nogorodnikov/rum-9655/fix-semantincs-of-executorservice-submit-vs-executor-execute-usage
RUM-9655: Fix semantics of `ExecutorService.submit` vs `Executor.execute` usage
2 parents ca0160c + 77ab677 commit c5b619f

File tree

20 files changed

+70
-104
lines changed

20 files changed

+70
-104
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import com.datadog.android.core.internal.user.DatadogUserInfoProvider
7171
import com.datadog.android.core.internal.user.MutableUserInfoProvider
7272
import com.datadog.android.core.internal.user.NoOpMutableUserInfoProvider
7373
import com.datadog.android.core.internal.user.UserInfoDeserializer
74-
import com.datadog.android.core.internal.utils.submitSafe
74+
import com.datadog.android.core.internal.utils.executeSafe
7575
import com.datadog.android.core.internal.utils.unboundInternalLogger
7676
import com.datadog.android.core.persistence.PersistenceStrategy
7777
import com.datadog.android.core.thread.FlushableExecutorService
@@ -201,7 +201,7 @@ internal class CoreFeature(
201201
readApplicationInformation(appContext, configuration)
202202
resolveProcessInfo(appContext)
203203
setupExecutors()
204-
persistenceExecutorService.submitSafe("NTP Sync initialization", unboundInternalLogger) {
204+
persistenceExecutorService.executeSafe("NTP Sync initialization", unboundInternalLogger) {
205205
// Kronos performs I/O operation on startup, it needs to run in background
206206
initializeClockSync(appContext)
207207
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/DatadogCore.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ import com.datadog.android.core.internal.logger.SdkInternalLogger
3434
import com.datadog.android.core.internal.net.FirstPartyHostHeaderTypeResolver
3535
import com.datadog.android.core.internal.system.BuildSdkVersionProvider
3636
import com.datadog.android.core.internal.time.DefaultAppStartTimeProvider
37+
import com.datadog.android.core.internal.utils.executeSafe
3738
import com.datadog.android.core.internal.utils.scheduleSafe
38-
import com.datadog.android.core.internal.utils.submitSafe
3939
import com.datadog.android.core.thread.FlushableExecutorService
4040
import com.datadog.android.error.internal.CrashReportsFeature
4141
import com.datadog.android.internal.telemetry.InternalTelemetryEvent
@@ -182,7 +182,7 @@ internal class DatadogCore(
182182
features.values.forEach {
183183
it.clearAllData()
184184
}
185-
getPersistenceExecutorService().submitSafe("Clear all data", internalLogger) {
185+
getPersistenceExecutorService().executeSafe("Clear all data", internalLogger) {
186186
coreFeature.deleteLastViewEvent()
187187
coreFeature.deleteLastFatalAnrSent()
188188
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/AbstractStorage.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import com.datadog.android.api.storage.FeatureStorageConfiguration
1616
import com.datadog.android.api.storage.RawBatchEvent
1717
import com.datadog.android.core.internal.metrics.RemovalReason
1818
import com.datadog.android.core.internal.privacy.ConsentProvider
19-
import com.datadog.android.core.internal.utils.submitSafe
19+
import com.datadog.android.core.internal.utils.executeSafe
2020
import com.datadog.android.core.persistence.NoOpPersistenceStrategy
2121
import com.datadog.android.core.persistence.PersistenceStrategy
2222
import com.datadog.android.privacy.TrackingConsent
@@ -64,7 +64,7 @@ internal class AbstractStorage(
6464
forceNewBatch: Boolean,
6565
callback: (EventBatchWriter) -> Unit
6666
) {
67-
executorService.submitSafe("Data write", internalLogger) {
67+
executorService.executeSafe("Data write", internalLogger) {
6868
val strategy = resolvePersistenceStrategy()
6969
val writer = object : EventBatchWriter {
7070
@WorkerThread
@@ -115,7 +115,7 @@ internal class AbstractStorage(
115115

116116
@AnyThread
117117
override fun dropAll() {
118-
executorService.submitSafe("Data drop", internalLogger) {
118+
executorService.executeSafe("Data drop", internalLogger) {
119119
grantedPersistenceStrategy.dropAll()
120120
pendingPersistenceStrategy.dropAll()
121121
}
@@ -129,7 +129,7 @@ internal class AbstractStorage(
129129
previousConsent: TrackingConsent,
130130
newConsent: TrackingConsent
131131
) {
132-
executorService.submitSafe("Data migration", internalLogger) {
132+
executorService.executeSafe("Data migration", internalLogger) {
133133
if (previousConsent == TrackingConsent.PENDING) {
134134
when (newConsent) {
135135
TrackingConsent.GRANTED -> pendingPersistenceStrategy.migrateData(grantedPersistenceStrategy)

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/ConsentAwareStorage.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import com.datadog.android.core.internal.persistence.file.batch.BatchFileReaderW
2323
import com.datadog.android.core.internal.persistence.file.existsSafe
2424
import com.datadog.android.core.internal.persistence.file.lengthSafe
2525
import com.datadog.android.core.internal.privacy.ConsentProvider
26-
import com.datadog.android.core.internal.utils.submitSafe
26+
import com.datadog.android.core.internal.utils.executeSafe
2727
import com.datadog.android.core.metrics.MethodCallSamplingRate
2828
import com.datadog.android.core.metrics.TelemetryMetricType
2929
import com.datadog.android.privacy.TrackingConsent
@@ -66,12 +66,12 @@ internal class ConsentAwareStorage(
6666
samplingRate = MethodCallSamplingRate.RARE.rate,
6767
operationName = "writeCurrentBatch[$featureName]"
6868
)
69-
executorService.submitSafe("Data write", internalLogger) {
69+
executorService.executeSafe("Data write", internalLogger) {
7070
val orchestrator = resolveOrchestrator()
7171
if (orchestrator == null) {
7272
callback.invoke(NoOpEventBatchWriter())
7373
metric?.stopAndSend(false)
74-
return@submitSafe
74+
return@executeSafe
7575
}
7676
synchronized(writeLock) {
7777
val batchFile = orchestrator.getWritableFile(forceNewBatch)
@@ -144,7 +144,7 @@ internal class ConsentAwareStorage(
144144
/** @inheritdoc */
145145
@AnyThread
146146
override fun dropAll() {
147-
executorService.submitSafe("ConsentAwareStorage.dropAll", internalLogger) {
147+
executorService.executeSafe("ConsentAwareStorage.dropAll", internalLogger) {
148148
synchronized(lockedBatches) {
149149
lockedBatches.forEach {
150150
deleteBatch(it, RemovalReason.Flushed)

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/file/advanced/ConsentAwareFileOrchestrator.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import com.datadog.android.api.InternalLogger
1212
import com.datadog.android.core.internal.persistence.file.FileOrchestrator
1313
import com.datadog.android.core.internal.persistence.file.NoOpFileOrchestrator
1414
import com.datadog.android.core.internal.privacy.ConsentProvider
15-
import com.datadog.android.core.internal.utils.submitSafe
15+
import com.datadog.android.core.internal.utils.executeSafe
1616
import com.datadog.android.privacy.TrackingConsent
1717
import com.datadog.android.privacy.TrackingConsentProviderCallback
1818
import java.io.File
@@ -98,7 +98,7 @@ internal open class ConsentAwareFileOrchestrator(
9898
) {
9999
val previousOrchestrator = resolveDelegateOrchestrator(previousConsent)
100100
val newOrchestrator = resolveDelegateOrchestrator(newConsent)
101-
executorService.submitSafe("Data migration", internalLogger) {
101+
executorService.executeSafe("Data migration", internalLogger) {
102102
dataMigrator.migrateData(
103103
previousConsent,
104104
previousOrchestrator,

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/persistence/file/advanced/ScheduledWriter.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ package com.datadog.android.core.internal.persistence.file.advanced
99
import androidx.annotation.WorkerThread
1010
import com.datadog.android.api.InternalLogger
1111
import com.datadog.android.core.internal.persistence.DataWriter
12-
import com.datadog.android.core.internal.utils.submitSafe
12+
import com.datadog.android.core.internal.utils.executeSafe
1313
import java.util.concurrent.ExecutorService
1414

1515
internal class ScheduledWriter<T : Any>(
@@ -22,14 +22,14 @@ internal class ScheduledWriter<T : Any>(
2222

2323
@WorkerThread
2424
override fun write(element: T) {
25-
executorService.submitSafe("Data writing", internalLogger) {
25+
executorService.executeSafe("Data writing", internalLogger) {
2626
delegateWriter.write(element)
2727
}
2828
}
2929

3030
@WorkerThread
3131
override fun write(data: List<T>) {
32-
executorService.submitSafe("Data writing", internalLogger) {
32+
executorService.executeSafe("Data writing", internalLogger) {
3333
delegateWriter.write(data)
3434
}
3535
}

dd-sdk-android-core/src/main/kotlin/com/datadog/android/ndk/internal/DatadogNdkCrashHandler.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import com.datadog.android.core.internal.persistence.file.FileReader
1717
import com.datadog.android.core.internal.persistence.file.existsSafe
1818
import com.datadog.android.core.internal.persistence.file.listFilesSafe
1919
import com.datadog.android.core.internal.persistence.file.readTextSafe
20-
import com.datadog.android.core.internal.utils.submitSafe
20+
import com.datadog.android.core.internal.utils.executeSafe
2121
import com.datadog.android.log.LogAttributes
2222
import com.google.gson.JsonObject
2323
import java.io.File
@@ -50,7 +50,7 @@ internal class DatadogNdkCrashHandler(
5050
// region NdkCrashHandler
5151

5252
override fun prepareData() {
53-
dataPersistenceExecutorService.submitSafe("NDK crash check", internalLogger) {
53+
dataPersistenceExecutorService.executeSafe("NDK crash check", internalLogger) {
5454
readCrashData()
5555
}
5656
}
@@ -59,7 +59,7 @@ internal class DatadogNdkCrashHandler(
5959
sdkCore: FeatureSdkCore,
6060
reportTarget: NdkCrashHandler.ReportTarget
6161
) {
62-
dataPersistenceExecutorService.submitSafe("NDK crash report ", internalLogger) {
62+
dataPersistenceExecutorService.executeSafe("NDK crash report ", internalLogger) {
6363
checkAndHandleNdkCrashReport(sdkCore, reportTarget)
6464
}
6565
}

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/DatadogCoreInitializationTest.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,6 @@ internal class DatadogCoreInitializationTest {
9292
whenever(mockPersistenceExecutorService.execute(any())) doAnswer {
9393
it.getArgument<Runnable>(0).run()
9494
}
95-
whenever(mockPersistenceExecutorService.submit(any())) doAnswer {
96-
it.getArgument<Runnable>(0).run()
97-
mock()
98-
}
9995
}
10096

10197
@AfterEach

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/DatadogCoreTest.kt

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ import java.util.Collections
7979
import java.util.Locale
8080
import java.util.UUID
8181
import java.util.concurrent.CountDownLatch
82-
import java.util.concurrent.Future
8382
import java.util.concurrent.TimeUnit
8483
import java.util.concurrent.atomic.AtomicBoolean
8584
import java.util.concurrent.atomic.AtomicReference
@@ -122,10 +121,6 @@ internal class DatadogCoreTest {
122121
whenever(mockPersistenceExecutorService.execute(any())) doAnswer {
123122
it.getArgument<Runnable>(0).run()
124123
}
125-
whenever(mockPersistenceExecutorService.submit(any())) doAnswer {
126-
it.getArgument<Runnable>(0).run()
127-
mock()
128-
}
129124

130125
testedCore = DatadogCore(
131126
appContext.mockInstance,
@@ -753,10 +748,9 @@ internal class DatadogCoreTest {
753748
testedCore.coreFeature = mockCoreFeature
754749
val mockExecutorService: FlushableExecutorService = mock()
755750
whenever(mockCoreFeature.persistenceExecutorService) doReturn mockExecutorService
756-
whenever(mockExecutorService.submit(any())) doAnswer {
751+
whenever(mockExecutorService.execute(any())) doAnswer {
757752
val runnable = it.arguments.first() as Runnable
758753
runnable.run()
759-
mock<Future<*>>()
760754
}
761755

762756
// When

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,6 @@ internal class CoreFeatureTest {
155155
whenever(mockPersistenceExecutorService.execute(any())) doAnswer {
156156
it.getArgument<Runnable>(0).run()
157157
}
158-
whenever(mockPersistenceExecutorService.submit(any())) doAnswer {
159-
it.getArgument<Runnable>(0).run()
160-
mock()
161-
}
162158
}
163159

164160
@AfterEach

0 commit comments

Comments
 (0)