Skip to content

Commit c098d3a

Browse files
authored
Merge pull request #1819 from DataDog/nogorodnikov/rum-2746/add-more-status-codes-as-retryable
RUM-2746: Add additional status codes as retryable
2 parents b8dc955 + dce698f commit c098d3a

File tree

2 files changed

+69
-3
lines changed

2 files changed

+69
-3
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/data/upload/DataOkHttpUploader.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,11 @@ internal class DataOkHttpUploader(
159159
HTTP_CLIENT_TIMEOUT -> UploadStatus.HttpClientRateLimiting(code)
160160
HTTP_ENTITY_TOO_LARGE -> UploadStatus.HttpClientError(code)
161161
HTTP_TOO_MANY_REQUESTS -> UploadStatus.HttpClientRateLimiting(code)
162-
HTTP_INTERNAL_ERROR -> UploadStatus.HttpServerError(code)
163-
HTTP_UNAVAILABLE -> UploadStatus.HttpServerError(code)
162+
HTTP_INTERNAL_ERROR,
163+
HTTP_BAD_GATEWAY,
164+
HTTP_UNAVAILABLE,
165+
HTTP_GATEWAY_TIMEOUT,
166+
HTTP_INSUFFICIENT_STORAGE -> UploadStatus.HttpServerError(code)
164167
else -> {
165168
internalLogger.log(
166169
InternalLogger.Level.WARN,
@@ -184,7 +187,10 @@ internal class DataOkHttpUploader(
184187
const val HTTP_TOO_MANY_REQUESTS = 429
185188

186189
const val HTTP_INTERNAL_ERROR = 500
190+
const val HTTP_BAD_GATEWAY = 502
187191
const val HTTP_UNAVAILABLE = 503
192+
const val HTTP_GATEWAY_TIMEOUT = 504
193+
const val HTTP_INSUFFICIENT_STORAGE = 507
188194

189195
const val SYSTEM_UA = "http.agent"
190196

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/data/upload/DataOkHttpUploaderTest.kt

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,26 @@ internal class DataOkHttpUploaderTest {
409409
verifyResponseIsClosed()
410410
}
411411

412+
@Test
413+
fun `𝕄 return server error 𝕎 upload() {502 bad gateway status}`(
414+
@Forgery batch: List<RawBatchEvent>,
415+
@StringForgery batchMeta: String,
416+
@StringForgery message: String
417+
) {
418+
// Given
419+
val batchMetadata = batchMeta.toByteArray()
420+
whenever(mockCall.execute()) doReturn mockResponse(502, message)
421+
422+
// When
423+
val result = testedUploader.upload(fakeContext, batch, batchMetadata)
424+
425+
// Then
426+
assertThat(result).isInstanceOf(UploadStatus.HttpServerError::class.java)
427+
assertThat(result.code).isEqualTo(502)
428+
verifyRequest(fakeDatadogRequest)
429+
verifyResponseIsClosed()
430+
}
431+
412432
@Test
413433
fun `𝕄 return server error 𝕎 upload() {503 unavailable status}`(
414434
@Forgery batch: List<RawBatchEvent>,
@@ -429,6 +449,46 @@ internal class DataOkHttpUploaderTest {
429449
verifyResponseIsClosed()
430450
}
431451

452+
@Test
453+
fun `𝕄 return server error 𝕎 upload() {504 gateway timeout status}`(
454+
@Forgery batch: List<RawBatchEvent>,
455+
@StringForgery batchMeta: String,
456+
@StringForgery message: String
457+
) {
458+
// Given
459+
val batchMetadata = batchMeta.toByteArray()
460+
whenever(mockCall.execute()) doReturn mockResponse(504, message)
461+
462+
// When
463+
val result = testedUploader.upload(fakeContext, batch, batchMetadata)
464+
465+
// Then
466+
assertThat(result).isInstanceOf(UploadStatus.HttpServerError::class.java)
467+
assertThat(result.code).isEqualTo(504)
468+
verifyRequest(fakeDatadogRequest)
469+
verifyResponseIsClosed()
470+
}
471+
472+
@Test
473+
fun `𝕄 return server error 𝕎 upload() {507 insufficient storage status}`(
474+
@Forgery batch: List<RawBatchEvent>,
475+
@StringForgery batchMeta: String,
476+
@StringForgery message: String
477+
) {
478+
// Given
479+
val batchMetadata = batchMeta.toByteArray()
480+
whenever(mockCall.execute()) doReturn mockResponse(507, message)
481+
482+
// When
483+
val result = testedUploader.upload(fakeContext, batch, batchMetadata)
484+
485+
// Then
486+
assertThat(result).isInstanceOf(UploadStatus.HttpServerError::class.java)
487+
assertThat(result.code).isEqualTo(507)
488+
verifyRequest(fakeDatadogRequest)
489+
verifyResponseIsClosed()
490+
}
491+
432492
// endregion
433493

434494
// region Unknown cases
@@ -446,7 +506,7 @@ internal class DataOkHttpUploaderTest {
446506
var statusCode: Int
447507
do {
448508
statusCode = forge.anInt(200, 600)
449-
} while (statusCode in arrayOf(202, 400, 401, 403, 408, 413, 429, 500, 503))
509+
} while (statusCode in arrayOf(202, 400, 401, 403, 408, 413, 429, 500, 502, 503, 504, 507))
450510
whenever(mockCall.execute()) doReturn mockResponse(statusCode, message)
451511

452512
// When

0 commit comments

Comments
 (0)