summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ruslan Tkhakokhov <rthakohov@google.com> 2022-04-05 16:59:50 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2022-04-05 16:59:50 +0000
commit22f211ca1eb5c5f4f720ab042eff6a9cd084d0f1 (patch)
treefece9bfdd61bb684afc8cafe948fa5a47ca8cda2
parent847bd13590cd729ada9fc827d1855491866a058a (diff)
parent9d77aef6420ebb5f64e28ca179903d18400f9016 (diff)
Merge "Handle CancellationException in BackupTransportClient" into tm-dev
-rw-r--r--services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java10
-rw-r--r--services/tests/servicestests/src/com/android/server/backup/transport/BackupTransportClientTest.java7
2 files changed, 10 insertions, 7 deletions
diff --git a/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java b/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java
index 7e3ede15aa04..d75d6484bec3 100644
--- a/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java
+++ b/services/backup/backuplib/java/com/android/server/backup/transport/BackupTransportClient.java
@@ -34,6 +34,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Queue;
import java.util.Set;
+import java.util.concurrent.CancellationException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -374,7 +375,8 @@ public class BackupTransportClient {
private <T> T getFutureResult(AndroidFuture<T> future) {
try {
return future.get(600, TimeUnit.SECONDS);
- } catch (InterruptedException | ExecutionException | TimeoutException e) {
+ } catch (InterruptedException | ExecutionException | TimeoutException
+ | CancellationException e) {
Slog.w(TAG, "Failed to get result from transport:", e);
return null;
} finally {
@@ -403,7 +405,11 @@ public class BackupTransportClient {
void cancelActiveFutures() {
synchronized (mActiveFuturesLock) {
for (AndroidFuture<?> future : mActiveFutures) {
- future.cancel(true);
+ try {
+ future.cancel(true);
+ } catch (CancellationException ignored) {
+ // This is expected, so ignore the exception.
+ }
}
mActiveFutures.clear();
}
diff --git a/services/tests/servicestests/src/com/android/server/backup/transport/BackupTransportClientTest.java b/services/tests/servicestests/src/com/android/server/backup/transport/BackupTransportClientTest.java
index b154d6f6db0c..1171518130cc 100644
--- a/services/tests/servicestests/src/com/android/server/backup/transport/BackupTransportClientTest.java
+++ b/services/tests/servicestests/src/com/android/server/backup/transport/BackupTransportClientTest.java
@@ -110,10 +110,7 @@ public class BackupTransportClientTest {
Thread thread = new Thread(() -> {
try {
- /*String name =*/ client.transportDirName();
- fail("transportDirName should be cancelled");
- } catch (CancellationException ex) {
- // This is expected.
+ assertThat(client.transportDirName()).isNull();
} catch (Exception ex) {
fail("unexpected Exception: " + ex.getClass().getCanonicalName());
}
@@ -189,7 +186,7 @@ public class BackupTransportClientTest {
}
@Test
- public void testFinishBackup_canceledBeforeCompletion_throwsException() throws Exception {
+ public void testFinishBackup_canceledBeforeCompletion_returnsError() throws Exception {
TestCallbacksFakeTransportBinder binder = new TestCallbacksFakeTransportBinder();
BackupTransportClient client = new BackupTransportClient(binder);