aws-amplify / amplify-flutter

A declarative library with an easy-to-use interface for building Flutter applications on AWS.
https://docs.amplify.aws
Apache License 2.0
1.31k stars 243 forks source link

[Feature Request] amplify flutter storage override timeout #3310

Open jamontesg opened 1 year ago

jamontesg commented 1 year ago

Need this option for low latency and poor connections like SAT internet Kind Regards

NikaHsn commented 1 year ago

@jamontesg Would you give more details about your current experience and actual issues that you are facing?

jamontesg commented 1 year ago

Hi, working my android app with a sat internet connection. upload and download files to S3 need a lot of retry for be successful. this connection has average latency of 594 to 624 milliseconds. Also Autehnticator ( cognito ) need retrys to works. but other apps like web browsing whatsapp and skype work relatively well whit this connection.

I think alter this timeout parameters could be improbe app . Kind Regards

NikaHsn commented 1 year ago

Do you experience API call failure? if so would you list the APIs and errors you get.

jamontesg commented 1 year ago

Now I don't have logs, but next week I'll be back in the satellite connection area, and I'll take them

NikaHsn commented 1 year ago

Thanks @jamontesg. Would be helpful to also inspect network traffic. You can use Flutter DevTools network view or any other tools of your preference to inspect network traffic.

dgagnon commented 1 year ago

We can confirm this issue as well using android emulator and setting gsm with a poor connection. On most tries, if there is more than a handful of models and entries, it timeouts and is unable to continue.

I will attach a full log later, I want to isolate the error first, but here is the relevant extract:

[ +188 ms] E/amplify:aws-datastore( 7161): Failure encountered while attempting to start API sync.
[        ] E/amplify:aws-datastore( 7161): DataStoreException{message=DataStore subscriptionProcessor failed to start., cause=DataStoreException{message=Timed out waiting for subscription processor to start., cause=null, recoverySuggestion=Retry}, recoverySuggestion=Check your internet.}
[        ] E/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator.lambda$startApiSync$4$com-amplifyframework-datastore-syncengine-Orchestrator(Orchestrator.java:320)
[        ] E/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator$$ExternalSyntheticLambda8.subscribe(Unknown Source:2)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletableCreate.subscribeActual(CompletableCreate.java:40)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletableSubscribeOn$SubscribeOnObserver.run(CompletableSubscribeOn.java:64)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:614)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
[        ] E/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
[        ] E/amplify:aws-datastore( 7161):  at java.util.concurrent.FutureTask.run(FutureTask.java:264)
[        ] E/amplify:aws-datastore( 7161):  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
[        ] E/amplify:aws-datastore( 7161):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[        ] E/amplify:aws-datastore( 7161):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
[        ] E/amplify:aws-datastore( 7161):  at java.lang.Thread.run(Thread.java:1012)
[        ] E/amplify:aws-datastore( 7161): Caused by: DataStoreException{message=Timed out waiting for subscription processor to start., cause=null, recoverySuggestion=Retry}
[        ] E/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.SubscriptionProcessor.startSubscriptions(SubscriptionProcessor.java:163)
[        ] E/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator.lambda$startApiSync$4$com-amplifyframework-datastore-syncengine-Orchestrator(Orchestrator.java:318)
[        ] E/amplify:aws-datastore( 7161):  ... 18 more
[        ] W/amplify:aws-datastore( 7161): API sync failed - transitioning to LOCAL_ONLY.
[        ] W/amplify:aws-datastore( 7161): DataStoreException{message=DataStore subscriptionProcessor failed to start., cause=DataStoreException{message=Timed out waiting for subscription processor to start., cause=null, recoverySuggestion=Retry}, recoverySuggestion=Check your internet.}
[        ] W/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator.lambda$startApiSync$4$com-amplifyframework-datastore-syncengine-Orchestrator(Orchestrator.java:320)
[        ] W/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator$$ExternalSyntheticLambda8.subscribe(Unknown Source:2)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletableCreate.subscribeActual(CompletableCreate.java:40)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletablePeek.subscribeActual(CompletablePeek.java:51)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Completable.subscribe(Completable.java:2850)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.operators.completable.CompletableSubscribeOn$SubscribeOnObserver.run(CompletableSubscribeOn.java:64)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.core.Scheduler$DisposeTask.run(Scheduler.java:614)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:65)
[        ] W/amplify:aws-datastore( 7161):  at io.reactivex.rxjava3.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:56)
[        ] W/amplify:aws-datastore( 7161):  at java.util.concurrent.FutureTask.run(FutureTask.java:264)
[        ] W/amplify:aws-datastore( 7161):  at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:307)
[        ] W/amplify:aws-datastore( 7161):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[        ] W/amplify:aws-datastore( 7161):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
[        ] W/amplify:aws-datastore( 7161):  at java.lang.Thread.run(Thread.java:1012)
[        ] W/amplify:aws-datastore( 7161): Caused by: DataStoreException{message=Timed out waiting for subscription processor to start., cause=null, recoverySuggestion=Retry}
[        ] W/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.SubscriptionProcessor.startSubscriptions(SubscriptionProcessor.java:163)
[        ] W/amplify:aws-datastore( 7161):  at com.amplifyframework.datastore.syncengine.Orchestrator.lambda$startApiSync$4$com-amplifyframework-datastore-syncengine-Orchestrator(Orchestrator.java:318)
[        ] W/amplify:aws-datastore( 7161):  ... 18 more
[        ] I/amplify:aws-datastore( 7161): Orchestrator transitioning from SYNC_VIA_API to LOCAL_ONLY
[        ] I/amplify:aws-datastore( 7161): Setting currentState to LOCAL_ONLY
[   +1 ms] I/amplify:aws-datastore( 7161): Stopping subscription processor.
dgagnon commented 1 year ago

Here are two logs. Both are done with a primed application ( i.e. was previously logged in and reached datastore ready state ).

Network settings full / full: success.txt Network setting GSM / poor: failure.txt

jamontesg commented 1 year ago

any advance about this issue?

Jordan-Nelson commented 4 months ago

@dgagnon - It sounds like you are looking to override the timeout in DataStore. This feature request is for the Amplify Storage category. If you are looking to override to timeout in DataStore do you mind opening a new request?

@jamontesg - This is not something we are actively working on. We are tracking it as a feature request though.