Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RUM-5977 add configuration to set uploadSchedulerStrategy #2224

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions dd-sdk-android-core/api/apiSurface
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ data class com.datadog.android.core.configuration.Configuration
fun setPersistenceStrategyFactory(com.datadog.android.core.persistence.PersistenceStrategy.Factory?): Builder
fun setCrashReportsEnabled(Boolean): Builder
fun setBackpressureStrategy(BackPressureStrategy): Builder
fun setUploadSchedulerStrategy(UploadSchedulerStrategy?): Builder
companion object
class com.datadog.android.core.configuration.HostsSanitizer
fun sanitizeHosts(List<String>, String): List<String>
Expand Down
1 change: 1 addition & 0 deletions dd-sdk-android-core/api/dd-sdk-android-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -588,6 +588,7 @@ public final class com/datadog/android/core/configuration/Configuration$Builder
public final fun setPersistenceStrategyFactory (Lcom/datadog/android/core/persistence/PersistenceStrategy$Factory;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setProxy (Ljava/net/Proxy;Lokhttp3/Authenticator;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUploadFrequency (Lcom/datadog/android/core/configuration/UploadFrequency;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUploadSchedulerStrategy (Lcom/datadog/android/core/configuration/UploadSchedulerStrategy;)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun setUseDeveloperModeWhenDebuggable (Z)Lcom/datadog/android/core/configuration/Configuration$Builder;
public final fun useSite (Lcom/datadog/android/DatadogSite;)Lcom/datadog/android/core/configuration/Configuration$Builder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ internal constructor(
val site: DatadogSite,
val batchProcessingLevel: BatchProcessingLevel,
val persistenceStrategyFactory: PersistenceStrategy.Factory?,
val backpressureStrategy: BackPressureStrategy
val backpressureStrategy: BackPressureStrategy,
val uploadSchedulerStrategy: UploadSchedulerStrategy?
)

// region Builder
Expand Down Expand Up @@ -259,6 +260,16 @@ internal constructor(
return this
}

/**
* Sets the strategy to schedule data uploads.
* @param uploadSchedulerStrategy the upload scheduler strategy,
* or null to use the default strategy (default: null)
*/
fun setUploadSchedulerStrategy(uploadSchedulerStrategy: UploadSchedulerStrategy?): Builder {
coreConfig = coreConfig.copy(uploadSchedulerStrategy = uploadSchedulerStrategy)
return this
}

internal fun allowClearTextHttp(): Builder {
coreConfig = coreConfig.copy(
needsClearTextHttp = true
Expand Down Expand Up @@ -297,7 +308,8 @@ internal constructor(
site = DatadogSite.US1,
batchProcessingLevel = BatchProcessingLevel.MEDIUM,
persistenceStrategyFactory = null,
backpressureStrategy = DEFAULT_BACKPRESSURE_STRATEGY
backpressureStrategy = DEFAULT_BACKPRESSURE_STRATEGY,
uploadSchedulerStrategy = null
)

internal const val NETWORK_REQUESTS_TRACKING_FEATURE_NAME = "Network requests"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import com.datadog.android.core.configuration.BatchProcessingLevel
import com.datadog.android.core.configuration.BatchSize
import com.datadog.android.core.configuration.Configuration
import com.datadog.android.core.configuration.UploadFrequency
import com.datadog.android.core.configuration.UploadSchedulerStrategy
import com.datadog.android.core.internal.data.upload.CurlInterceptor
import com.datadog.android.core.internal.data.upload.GzipRequestInterceptor
import com.datadog.android.core.internal.data.upload.RotatingDnsResolver
Expand Down Expand Up @@ -139,6 +140,7 @@ internal class CoreFeature(
internal var ndkCrashHandler: NdkCrashHandler = NoOpNdkCrashHandler()
internal var site: DatadogSite = DatadogSite.US1
internal var appBuildId: String? = null
internal var customUploadSchedulerStrategy: UploadSchedulerStrategy? = null

internal lateinit var uploadExecutorService: ScheduledThreadPoolExecutor
internal lateinit var persistenceExecutorService: FlushableExecutorService
Expand Down Expand Up @@ -504,6 +506,7 @@ internal class CoreFeature(
persistenceStrategyFactory = configuration.persistenceStrategyFactory
site = configuration.site
backpressureStrategy = configuration.backpressureStrategy
customUploadSchedulerStrategy = configuration.uploadSchedulerStrategy
}

private fun setupInfoProviders(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,8 @@ internal class SdkFeature(
uploadFrequency,
batchProcessingLevel.maxBatchesPerUploadJob
)
val uploadSchedulerStrategy = DefaultUploadSchedulerStrategy(dataUploadConfiguration)
val uploadSchedulerStrategy = coreFeature.customUploadSchedulerStrategy
?: DefaultUploadSchedulerStrategy(dataUploadConfiguration)
storage = prepareStorage(
dataUploadConfiguration,
wrappedFeature,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,24 @@ internal class ConfigurationBuilderTest {
)
}

@Test
fun `M build config with UploadScheduler strategy W setUploadSchedulerStrategy() and build()`() {
// Given
val mockUploadSchedulerStrategy: UploadSchedulerStrategy = mock()

// When
val config = testedBuilder
.setUploadSchedulerStrategy(mockUploadSchedulerStrategy)
.build()

// Then
assertThat(config.coreConfig).isEqualTo(
Configuration.DEFAULT_CORE_CONFIG.copy(
uploadSchedulerStrategy = mockUploadSchedulerStrategy
)
)
}

companion object {
val logger = InternalLoggerTestConfiguration()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ internal class ConfigurationCoreForgeryFactory :
mock(),
mock(),
forge.aValueFrom(BackPressureMitigation::class.java)
)
),
uploadSchedulerStrategy = forge.aNullable { mock() }
)
}
}