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

Added retries, back-off and initial delay for sync #83

Closed
wants to merge 15 commits into from

Conversation

ArnyminerZ
Copy link
Member

Closes #72

Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
# Conflicts:
#	app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
@ArnyminerZ ArnyminerZ added the enhancement New feature or request label Dec 14, 2022
@ArnyminerZ ArnyminerZ self-assigned this Dec 14, 2022
@ArnyminerZ ArnyminerZ linked an issue Dec 14, 2022 that may be closed by this pull request
@rfc2822
Copy link
Member

rfc2822 commented Dec 19, 2022

Thanks. I'd like to wait a bit, maybe we can find out the real cause for the problem (it's also important for when we switch DAVx5 to mostly WorkManager).

@yan12125
Copy link

This branch does not retry failed requests for me until I changed something. Looks like it doesn't work because exceptions are not propagated? I simulate network failures by adding the domain for calendars to my AdAway block list.

With following changes, failed requests are retried 5 times and there are 5 failure notifications. Probably the notification can be moved so that it's trigger only once after 5 failures.

diff --git a/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt b/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
index b46f50e..58fe5af 100644
--- a/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
+++ b/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
@@ -62,6 +62,7 @@ class ProcessEventsTask(
         } catch(e: Exception) {
             Log.e(Constants.TAG, "Couldn't sync calendar", e)
             calendar.updateStatusError(e.localizedMessage ?: e.toString())
+            throw e
         }
         Log.i(Constants.TAG, "iCalendar file completely processed")
     }
@@ -185,6 +186,8 @@ class ProcessEventsTask(
             notificationManager.notify(calendar.id.toString(), 0, notification.build())
 
             calendar.updateStatusError(message)
+
+            throw ex
         }
     }
 
diff --git a/app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt b/app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt
index 5e5cd31..9a6b69c 100644
--- a/app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt
+++ b/app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt
@@ -97,14 +97,16 @@ class SyncWorker(
                 return withContext(Dispatchers.Default) {
                     performSync(AppAccount.get(applicationContext), providerClient, forceResync)
                 }
+            } catch (e: Exception) {
+                return if (runAttemptCount >= MAX_ATTEMPTS)
+                    Result.failure()
+                else
+                    Result.retry()
             } finally {
                 providerClient.closeCompat()
             }
         }
-        return if (runAttemptCount >= MAX_ATTEMPTS)
-            Result.failure()
-        else
-            Result.retry()
+        return Result.failure()
     }
 
     private suspend fun performSync(account: Account, provider: ContentProviderClient, forceResync: Boolean): Result {

# Conflicts:
#	app/src/main/java/at/bitfire/icsdroid/SyncWorker.kt
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
@ArnyminerZ
Copy link
Member Author

@yan12125 yup, that makes sense, however, I will rewrite a little bit your code. Now that I have synchronized with the main branch,

@ArnyminerZ
Copy link
Member Author

@rfc2822 can you take a look?

@yan12125
Copy link

Thanks for the update. I still need this change to get failed requests retried:

diff --git a/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt b/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
index 79f8c0e..513c1b5 100644
--- a/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
+++ b/app/src/main/java/at/bitfire/icsdroid/ProcessEventsTask.kt
@@ -199,6 +199,8 @@ class ProcessEventsTask(
             notificationManager.notify(subscription.id.toString(), 0, notification.build())
 
             subscriptionsDao.updateStatusError(subscription.id, message)
+
+            throw ex
         }
     }
 

@yan12125
Copy link

Hi, could you merge with the 'dev' branch again?

ArnyminerZ and others added 2 commits February 27, 2023 10:31
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
@yan12125
Copy link

yan12125 commented Mar 8, 2023

There are merge conflicts again :(

yan12125 added a commit to yan12125/icsx5 that referenced this pull request Mar 18, 2023
@yan12125
Copy link

yan12125 commented Apr 6, 2023

Thanks for the update. Seems the latest change misses a variable declaration:

@@ -118,6 +122,8 @@ class SyncWorker(
         val onlyMigrate = inputData.getBoolean(ONLY_MIGRATE, false)
         Log.i(TAG, "Synchronizing (forceReSync=$forceReSync,onlyMigrate=$onlyMigrate)")
 
+        var result: Result = Result.success()
+
         provider =
             try {
                 LocalCalendar.getCalendarProvider(applicationContext)

yan12125 added a commit to yan12125/icsx5 that referenced this pull request Apr 6, 2023
Signed-off-by: Arnau Mora <arnyminer.z@gmail.com>
yan12125 added a commit to yan12125/icsx5 that referenced this pull request Apr 7, 2023
@yan12125
Copy link

I started a branch at https://github.com/yan12125/icsx5/commits/72-couldnt-connect-to-server and added some fixes/improvements on top of this PR:

With these changes, syncing is reliable even with an unstable server. I have been using my branch for 2 weeks and got no issue. Could you consider adding my changes to this PR?

@rfc2822
Copy link
Member

rfc2822 commented Jul 28, 2023

Thanks; seems to be fixed by Samsung in the meanwhile, so I'll close this

@rfc2822 rfc2822 closed this Jul 28, 2023
yan12125 added a commit to yan12125/icsx5 that referenced this pull request Jul 31, 2023
rfc2822 pushed a commit that referenced this pull request Feb 25, 2024
* Note

Signed-off-by: Arnau Mora <arnyminerz@proton.me>

* Migrate to Kotlin DSL (#19)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>

* Upgrade all dependencies (#22)

* Upgrade to Android 14 (#21)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>

* Rewrite CredentialsFragment to compose (#26)

* Update import (#27)

* Update README.md

* Fix NPE on adding subscription (#33)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Arnau Mora <arnyminerz@proton.me>

* Make CredentialsFragment into a composable (#35)

* Using regular ubuntu image

Signed-off-by: Arnau Mora <arnyminerz@proton.me>

* Migrate SubscriptionSettingsFragment to compose (#29)

* Migrate `AddCalendarValidationFragment` to Jetpack Compose (#31)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Migrate `AddCalendarEnterUrlFragment` to Jetpack Compose (#38)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Migrate AddCalendarDetailsFragment to compose (#40)

* Upgrade AGP to 8.2.1 (#42)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Upgrade Kotlin, KSP, Compose and others (#43)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Migrate `AddCalendarActivity` to Jetpack Compose (#45)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Added missing line break (#52)

* Remove unused view and layout (#54)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Added Dependabot (#51)

* Bump github/codeql-action from 2 to 3 (#62)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/checkout from 3 to 4 (#61)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/setup-java from 3 to 4 (#58)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump joda-time:joda-time from 2.12.5 to 2.12.6 (#56)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.work:work-testing from 2.8.1 to 2.9.0 (#60)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Using BOM for OkHttp and downgrade to stable (#64)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Migrate EditCalendarActivity to jetpack compose (#46)

* Bump actions/cache from 3 to 4 (#65)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.android.tools.build:gradle from 8.2.1 to 8.2.2 (#66)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.compose.runtime:runtime-livedata from 1.5.4 to 1.6.0 (#78)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.compose:compose-bom from 2023.10.01 to 2024.01.00 (#79)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.google.accompanist:accompanist-themeadapter-material from 0.32.0 to 0.34.0 (#80)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arnau Mora <arnyminerz@proton.me>

* Bump gradle/gradle-build-action from 2 to 3 (#82)

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arnau Mora <arnyminerz@proton.me>

* Fix: Can't add subscription after going back once (#83)

* Update ical4android and cert4android (#73)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>

* Cleanup of Dialogs (#67)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Bump actions/upload-artifact from 2 to 4 (#63)

Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arnau Mora <arnyminerz@proton.me>

* Migrate `DonateDialogFragment` to Jetpack Compose (#75)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Final layout cleanup (#68)

Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Ensured toast error is never null (#91)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Crash when going back into `CalendarListActivity` (standard flavour) (#90)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Migrate ColorPickerActivity to Jetpack Compose (closes #53, #87) (#94)

* Bump androidx.compose:compose-bom from 2024.01.00 to 2024.02.00 (#96)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.compose.runtime:runtime-livedata from 1.6.0 to 1.6.1 (#95)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump joda-time:joda-time from 2.12.6 to 2.12.7 (#93)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Edit Subscription: requires-auth toggle and credential fields trigger save-dismiss mechanism (#92)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Arnau Mora Gras <arnyminerz@proton.me>

* Removed package definition from manifest (#101)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Bump com.maxkeppeler.sheets-compose-dialogs:core from 1.2.1 to 1.3.0 (#103)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Use compose theming engine, (drop compatibility MdcTheming etc) (#48)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Migrated to Gradle Version Catalog (#99)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>

* Check if we can reuse more composables and improve project structure (#106)

* Bump aboutLibs from 10.7.0 to 10.10.0 (#108)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.jetbrains.kotlinx:kotlinx-coroutines-android from 1.7.3 to 1.8.0 (#110)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Migrate to Material 3 (#109)

* Bump compose-ui from 1.6.1 to 1.6.2 (#111)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.compose.material:material-icons-extended from 1.6.1 to 1.6.2 (#112)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump androidx.compose.runtime:runtime-livedata from 1.6.1 to 1.6.2 (#113)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Arnau Mora <arnyminerz@proton.me>

* Quickfix for pull to refresh (#114)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

* Fix warnings (#115)

Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>

---------

Signed-off-by: Arnau Mora <arnyminerz@proton.me>
Signed-off-by: Arnau Mora Gras <arnyminerz@proton.me>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: Sunik Kupfer <kupfer@bitfire.at>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Couldn't connect to server
3 participants