summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2014-08-07 23:16:27 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-08-07 18:39:40 +0000
commit54f089416925c164f3b5353a6fa09359d959cf7e (patch)
tree27544042d8bfe51ef01cec6d9299f28db944d722
parentdbf45c14af8200234ef3d47adc0cce96745f882c (diff)
parente079264b981d87c648921185528b553a86ae353d (diff)
downloadframeworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.zip
frameworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.tar.gz
frameworks_base-54f089416925c164f3b5353a6fa09359d959cf7e.tar.bz2
Merge "API to tell the transport to cancel a full backup in progress" into lmp-dev
-rw-r--r--core/java/android/app/backup/BackupTransport.java19
-rw-r--r--core/java/com/android/internal/backup/LocalTransport.java34
2 files changed, 45 insertions, 8 deletions
diff --git a/core/java/android/app/backup/BackupTransport.java b/core/java/android/app/backup/BackupTransport.java
index dc3bbc0..6adc2e0 100644
--- a/core/java/android/app/backup/BackupTransport.java
+++ b/core/java/android/app/backup/BackupTransport.java
@@ -405,6 +405,25 @@ public class BackupTransport {
return BackupTransport.TRANSPORT_ERROR;
}
+ /**
+ * Tells the transport to cancel the currently-ongoing full backup operation. This
+ * will happen between {@link #performFullBackup()} and {@link #finishBackup()}
+ * if the OS needs to abort the backup operation for any reason, such as a crash in
+ * the application undergoing backup.
+ *
+ * <p>When it receives this call, the transport should discard any partial archive
+ * that it has stored so far. If possible it should also roll back to the previous
+ * known-good archive in its datastore.
+ *
+ * <p>If the transport receives this callback, it will <em>not</em> receive a
+ * call to {@link #finishBackup()}. It needs to tear down any ongoing backup state
+ * here.
+ */
+ public void cancelFullBackup() {
+ throw new UnsupportedOperationException(
+ "Transport cancelFullBackup() not implemented");
+ }
+
// ------------------------------------------------------------------------------------
// Full restore interfaces
diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java
index 97e1102..d8dffe0 100644
--- a/core/java/com/android/internal/backup/LocalTransport.java
+++ b/core/java/com/android/internal/backup/LocalTransport.java
@@ -273,11 +273,15 @@ public class LocalTransport extends BackupTransport {
@Override
public int finishBackup() {
- if (DEBUG) Log.v(TAG, "finishBackup()");
+ if (DEBUG) Log.v(TAG, "finishBackup() of " + mFullTargetPackage);
+ return tearDownFullBackup();
+ }
+
+ // ------------------------------------------------------------------------------------
+ // Full backup handling
+
+ private int tearDownFullBackup() {
if (mSocket != null) {
- if (DEBUG) {
- Log.v(TAG, "Concluding full backup of " + mFullTargetPackage);
- }
try {
mFullBackupOutputStream.flush();
mFullBackupOutputStream.close();
@@ -286,7 +290,7 @@ public class LocalTransport extends BackupTransport {
mSocket.close();
} catch (IOException e) {
if (DEBUG) {
- Log.w(TAG, "Exception caught in finishBackup()", e);
+ Log.w(TAG, "Exception caught in tearDownFullBackup()", e);
}
return TRANSPORT_ERROR;
} finally {
@@ -296,8 +300,9 @@ public class LocalTransport extends BackupTransport {
return TRANSPORT_OK;
}
- // ------------------------------------------------------------------------------------
- // Full backup handling
+ private File tarballFile(String pkgName) {
+ return new File(mCurrentSetFullDir, pkgName);
+ }
@Override
public long requestFullBackupTime() {
@@ -329,7 +334,7 @@ public class LocalTransport extends BackupTransport {
mFullTargetPackage = targetPackage.packageName;
FileOutputStream tarstream;
try {
- File tarball = new File(mCurrentSetFullDir, mFullTargetPackage);
+ File tarball = tarballFile(mFullTargetPackage);
tarstream = new FileOutputStream(tarball);
} catch (FileNotFoundException e) {
return TRANSPORT_ERROR;
@@ -368,6 +373,19 @@ public class LocalTransport extends BackupTransport {
return TRANSPORT_OK;
}
+ // For now we can't roll back, so just tear everything down.
+ @Override
+ public void cancelFullBackup() {
+ if (DEBUG) {
+ Log.i(TAG, "Canceling full backup of " + mFullTargetPackage);
+ }
+ File archive = tarballFile(mFullTargetPackage);
+ tearDownFullBackup();
+ if (archive.exists()) {
+ archive.delete();
+ }
+ }
+
// ------------------------------------------------------------------------------------
// Restore handling
static final long[] POSSIBLE_SETS = { 2, 3, 4, 5, 6, 7, 8, 9 };