Skip to content

Commit cdffd6c

Browse files
authored
Added retry in S3 upload (#378)
* Added UploadFileEndpoint - AWS S3 upload to general retryConfiguration. * Added PublishFileMessageEndpoint to general retryConfiguration instead of old retry. * BREAKING CHANGE - config property fileMessagePublishRetryLimit is no longer used by PublishFileMessageEndpoint to retry failed attempts.
1 parent be2503c commit cdffd6c

File tree

16 files changed

+531
-778
lines changed

16 files changed

+531
-778
lines changed

pubnub-gson/pubnub-gson-api/src/main/java/com/pubnub/api/java/v2/PNConfiguration.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,10 @@ interface PNConfiguration : com.pubnub.api.v2.PNConfiguration {
287287
*
288288
* Defaults to `5`
289289
*/
290+
@Deprecated(
291+
message = "This setting is deprecated. Use retryConfiguration instead",
292+
level = DeprecationLevel.WARNING
293+
)
290294
val fileMessagePublishRetryLimit: Int
291295

292296
val dedupOnSubscribe: Boolean
@@ -535,6 +539,10 @@ interface PNConfiguration : com.pubnub.api.v2.PNConfiguration {
535539
*
536540
* Defaults to `5`
537541
*/
542+
@Deprecated(
543+
message = "This setting is deprecated. Use retryConfiguration instead e.g. retryConfiguration = RetryConfiguration.Linear()",
544+
level = DeprecationLevel.WARNING
545+
)
538546
fun fileMessagePublishRetryLimit(fileMessagePublishRetryLimit: Int): Builder
539547

540548
fun dedupOnSubscribe(dedupOnSubscribe: Boolean): Builder

pubnub-gson/pubnub-gson-impl/src/main/java/com/pubnub/internal/java/v2/PNConfigurationImpl.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class PNConfigurationImpl(
5555
override val x509ExtendedTrustManager: X509ExtendedTrustManager? = null,
5656
override val connectionSpec: ConnectionSpec? = null,
5757
override val hostnameVerifier: HostnameVerifier? = null,
58-
override val fileMessagePublishRetryLimit: Int = 5,
58+
override val fileMessagePublishRetryLimit: Int = 0,
5959
override val dedupOnSubscribe: Boolean = false,
6060
override val maximumMessagesCacheSize: Int = DEFAULT_DEDUPE_SIZE,
6161
override val pnsdkSuffixes: Map<String, String> = emptyMap(),
@@ -356,6 +356,10 @@ class PNConfigurationImpl(
356356

357357
override var hostnameVerifier: HostnameVerifier? = defaultConfiguration.hostnameVerifier
358358

359+
@Deprecated(
360+
message = "This setting is deprecated. Use retryConfiguration instead e.g. retryConfiguration = RetryConfiguration.Linear()",
361+
level = DeprecationLevel.WARNING
362+
)
359363
override fun fileMessagePublishRetryLimit(fileMessagePublishRetryLimit: Int): Builder {
360364
this.fileMessagePublishRetryLimit = fileMessagePublishRetryLimit
361365
return this

pubnub-kotlin/pubnub-kotlin-core-api/src/commonMain/kotlin/com/pubnub/api/PubNubError.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,16 @@ enum class PubNubError(private val code: Int, val message: String) {
240240
"Channel and/or ChannelGroup contains empty string which is not allowed.",
241241
),
242242

243+
UPLOAD_URL_HAS_EXPIRED(
244+
code = 182,
245+
message = "The upload URL has expired.",
246+
),
247+
248+
FILE_TOO_LARGE(
249+
code = 183,
250+
message = "File size exceeds the maximum allowed size for upload.",
251+
)
252+
243253
;
244254

245255
override fun toString(): String {

pubnub-kotlin/pubnub-kotlin-core-api/src/jvmMain/kotlin/com/pubnub/api/v2/PNConfiguration.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,10 @@ actual interface PNConfiguration {
273273
*
274274
* Defaults to `5`
275275
*/
276+
@Deprecated(
277+
message = "This setting is deprecated. Use retryConfiguration instead",
278+
level = DeprecationLevel.WARNING
279+
)
276280
val fileMessagePublishRetryLimit: Int
277281

278282
val dedupOnSubscribe: Boolean
@@ -599,6 +603,10 @@ actual interface PNConfiguration {
599603
*
600604
* Defaults to `5`
601605
*/
606+
@Deprecated(
607+
message = "This setting is deprecated. Use retryConfiguration instead e.g. retryConfiguration = RetryConfiguration.Linear()",
608+
level = DeprecationLevel.WARNING
609+
)
602610
var fileMessagePublishRetryLimit: Int
603611

604612
var dedupOnSubscribe: Boolean

pubnub-kotlin/pubnub-kotlin-impl/src/main/kotlin/com/pubnub/internal/PubNubImpl.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1803,7 +1803,6 @@ open class PubNubImpl(
18031803
executorService =
18041804
retrofitManager.getTransactionClientExecutorService()
18051805
?: Executors.newSingleThreadExecutor(),
1806-
fileMessagePublishRetryLimit = configuration.fileMessagePublishRetryLimit,
18071806
generateUploadUrlFactory = GenerateUploadUrlEndpoint.Factory(this),
18081807
publishFileMessageFactory = PublishFileMessageEndpoint.Factory(this),
18091808
sendFileToS3Factory = UploadFileEndpoint.Factory(this),

pubnub-kotlin/pubnub-kotlin-impl/src/main/kotlin/com/pubnub/internal/endpoints/files/SendFileEndpoint.kt

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.pubnub.api.models.consumer.files.PNPublishFileMessageResult
1414
import com.pubnub.api.v2.callbacks.Result
1515
import com.pubnub.internal.PubNubImpl
1616
import com.pubnub.internal.crypto.cryptor.InputStreamSeparator
17-
import com.pubnub.internal.endpoints.remoteaction.RetryingRemoteAction
1817
import com.pubnub.internal.models.server.files.FileUploadRequestDetails
1918
import java.io.InputStream
2019
import java.net.HttpURLConnection
@@ -34,7 +33,6 @@ class SendFileEndpoint internal constructor(
3433
private val ttl: Int? = null,
3534
private val shouldStore: Boolean? = null,
3635
private val customMessageType: String? = null,
37-
private val fileMessagePublishRetryLimit: Int,
3836
private val executorService: ExecutorService,
3937
generateUploadUrlFactory: GenerateUploadUrlEndpoint.Factory,
4038
publishFileMessageFactory: PublishFileMessageEndpoint.Factory,
@@ -98,20 +96,16 @@ class SendFileEndpoint internal constructor(
9896
sendFileToS3Factory.create(fileName, content, res) // 2. upload to s3
9997
}.checkpoint().then {
10098
val details = result.get()
101-
RetryingRemoteAction.autoRetry(
102-
publishFileMessageFactory.create( // 3. PublishFileMessage
103-
channel = channel,
104-
fileName = details.data.name,
105-
fileId = details.data.id,
106-
message = message,
107-
meta = meta,
108-
ttl = ttl,
109-
shouldStore = shouldStore,
110-
customMessageType = customMessageType,
111-
),
112-
fileMessagePublishRetryLimit,
113-
executorService,
114-
) // publish file message
99+
publishFileMessageFactory.create( // 3. PublishFileMessage
100+
channel = channel,
101+
fileName = details.data.name,
102+
fileId = details.data.id,
103+
message = message,
104+
meta = meta,
105+
ttl = ttl,
106+
shouldStore = shouldStore,
107+
customMessageType = customMessageType,
108+
)
115109
}.map { mapPublishFileMessageToFileUpload(result.get(), it) }
116110
}
117111

0 commit comments

Comments
 (0)