Skip to content

Commit d827345

Browse files
authored
Merge pull request #2850 from dimagi/updateFix
Fixes a bug causing Updates to get stale
2 parents 8218ed7 + c253475 commit d827345

File tree

5 files changed

+29
-29
lines changed

5 files changed

+29
-29
lines changed

app/src/org/commcare/heartbeat/HeartbeatWorker.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,14 @@ class HeartbeatWorker(context: Context, workerParams: WorkerParameters):
2929
Result.retry()
3030
}
3131
else -> {
32-
Logger.log(LogTypes.TYPE_ERROR_SERVER_COMMS,
33-
"Encountered unexpected exception during heartbeat communications: "
34-
+ e.message + ". Stopping the heartbeat thread.")
32+
Logger.exception(
33+
"Encountered unexpected exception during heartbeat communications, stopping the heartbeat thread.",
34+
e
35+
)
3536
Result.failure()
3637
}
3738
}
3839
}
3940
return Result.success()
4041
}
41-
}
42+
}

app/src/org/commcare/update/UpdateHelper.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.commcare.resources.ResourceInstallContext;
1919
import org.commcare.resources.model.InstallCancelled;
2020
import org.commcare.resources.model.InstallCancelledException;
21-
import org.commcare.resources.model.InstallRequestSource;
2221
import org.commcare.resources.model.InvalidResourceException;
2322
import org.commcare.resources.model.Resource;
2423
import org.commcare.resources.model.ResourceTable;
@@ -84,7 +83,7 @@ public static UpdateHelper getNewInstance(boolean autoUpdate, UpdateProgressList
8483

8584
// Main UpdateHelper function for staging updates
8685
public ResultAndError<AppInstallStatus> update(String profileRef, ResourceInstallContext resourceInstallContext) {
87-
setupUpdate(profileRef);
86+
setupUpdate(profileRef, resourceInstallContext);
8887

8988
try {
9089
return new ResultAndError<>(stageUpdate(profileRef, resourceInstallContext));
@@ -123,10 +122,10 @@ public ResultAndError<AppInstallStatus> update(String profileRef, ResourceInstal
123122
}
124123
}
125124

126-
private void setupUpdate(String profileRef) {
125+
private void setupUpdate(String profileRef, ResourceInstallContext resourceInstallContext) {
127126
ResourceInstallUtils.recordUpdateAttemptTime(mApp);
128127
Logger.log(LogTypes.TYPE_RESOURCES,
129-
"Beginning install attempt for profile " + profileRef);
128+
"Beginning install attempt as " + resourceInstallContext.getInstallRequestSource() + " for profile " + profileRef);
130129

131130
if (isAutoUpdate) {
132131
ResourceInstallUtils.recordAutoUpdateStart(mApp);
@@ -150,7 +149,7 @@ private AppInstallStatus stageUpdate(String profileRef, ResourceInstallContext r
150149

151150
AppInstallStatus result = mResourceManager.checkAndPrepareUpgradeResources(profileRefWithParams, mAuthority, resourceInstallContext);
152151

153-
if (result == AppInstallStatus.UpdateStaged) {
152+
if (result == AppInstallStatus.UpdateStaged || result == AppInstallStatus.UpToDate) {
154153
RequestStats.markSuccess(resourceInstallContext.getInstallRequestSource());
155154
}
156155

app/src/org/commcare/update/UpdateWorker.kt

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,31 +44,31 @@ class UpdateWorker(appContext: Context, workerParams: WorkerParameters)
4444
when {
4545
exception is CancellationException -> handleUpdateResult(ResultAndError(AppInstallStatus.Cancelled))
4646
exception != null -> {
47-
Logger.exception("Unknown error while app update", exception);
48-
handleUpdateResult(ResultAndError(AppInstallStatus.UnknownFailure))
47+
Logger.exception("Unknown error while app update", exception)
48+
Result.failure()
4949
}
5050
}
5151
}
5252

5353
job.await()
5454
}
55-
5655
}
5756

5857
private fun doUpdateWork(): Result {
59-
val updateResult: ResultAndError<AppInstallStatus>
60-
61-
// skip if - An update task is already running | no app is seated | user session is not active
62-
if (UpdateTask.getRunningInstance() == null &&
63-
CommCareApplication.instance().currentApp != null &&
64-
CommCareApplication.instance().session.isActive) {
65-
66-
updateHelper.startPinnedNotification(CommCareApplication.instance())
67-
updateResult = updateHelper.update(ResourceInstallUtils.getDefaultProfileRef(),
68-
ResourceInstallContext(InstallRequestSource.BACKGROUND_UPDATE))
69-
} else {
58+
if (UpdateTask.getRunningInstance() != null) {
59+
// there is already an update running, lets just skip this run
7060
return Result.success()
7161
}
62+
63+
if (CommCareApplication.instance().currentApp == null) {
64+
// we need a seated app to update
65+
return Result.failure()
66+
}
67+
68+
updateHelper.startPinnedNotification(CommCareApplication.instance())
69+
val updateResult: ResultAndError<AppInstallStatus> = updateHelper.update(
70+
ResourceInstallUtils.getDefaultProfileRef(),
71+
ResourceInstallContext(InstallRequestSource.BACKGROUND_UPDATE))
7272
return handleUpdateResult(updateResult)
7373
}
7474

@@ -82,6 +82,7 @@ class UpdateWorker(appContext: Context, workerParams: WorkerParameters)
8282

8383
return when {
8484
updateResult.data == AppInstallStatus.UpdateStaged -> Result.success()
85+
updateResult.data == AppInstallStatus.UpToDate -> Result.success()
8586
updateResult.data.shouldRetryUpdate() -> Result.retry()
8687
else -> Result.failure()
8788
}

app/unit-tests/src/org/commcare/android/tests/application/AppUpdateTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class AppUpdateTest {
8282
UpdateUtils.installUpdate(profileRef,
8383
AppInstallStatus.UpToDate,
8484
AppInstallStatus.UnknownFailure)
85-
checkUpdateComplete(6, true, false)
85+
checkUpdateComplete(6, true, true)
8686
}
8787

8888
@Test
@@ -191,4 +191,4 @@ class AppUpdateTest {
191191
private val TAG = AppUpdateTest::class.java.simpleName
192192
private const val REF_BASE_DIR = "jr://resource/commcare-apps/update_tests/"
193193
}
194-
}
194+
}

app/unit-tests/src/org/commcare/update/UpdateWorkerTest.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,8 @@ class UpdateWorkerTest {
4141
@Before
4242
fun setUp() {
4343
context = ApplicationProvider.getApplicationContext()
44-
TestAppInstaller.installAppAndLogin(
45-
UpdateUtils.buildResourceRef(REF_BASE_DIR, "base_app", "profile.ccpr"),
46-
"test", "123")
44+
TestAppInstaller.installApp(
45+
UpdateUtils.buildResourceRef(REF_BASE_DIR, "base_app", "profile.ccpr"))
4746
}
4847

4948
@Test
@@ -114,4 +113,4 @@ class UpdateWorkerTest {
114113
.putString(PREFS_APP_SERVER_KEY, profileRef)
115114
.apply()
116115
}
117-
}
116+
}

0 commit comments

Comments
 (0)