summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/BackupManagerService.java
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2009-05-05 15:50:03 -0700
committerChristopher Tate <ctate@google.com>2009-05-05 15:50:03 -0700
commitf417247fa68524f2f34960f7389168eed7eb4a88 (patch)
tree96725ef9323a5617a117c3d8a2944c39f196677d /services/java/com/android/server/BackupManagerService.java
parent06d96020c35dac2bf1651cb8bd4cfced911f1142 (diff)
Further development of backup file handling
Put backup data in flight into /cache Close the files and delete the intermediates after backup pass
Diffstat (limited to 'services/java/com/android/server/BackupManagerService.java')
-rw-r--r--services/java/com/android/server/BackupManagerService.java26
1 files changed, 20 insertions, 6 deletions
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java
index f5f35612679f..04cd53f9278e 100644
--- a/services/java/com/android/server/BackupManagerService.java
+++ b/services/java/com/android/server/BackupManagerService.java
@@ -62,6 +62,7 @@ class BackupManagerService extends IBackupManager.Stub {
private final Object mQueueLock = new Object();
private File mStateDir;
+ private File mDataDir;
// ----- Handler that runs the actual backup process asynchronously -----
@@ -106,28 +107,41 @@ class BackupManagerService extends IBackupManager.Stub {
Log.d(TAG, "invoking doBackup() on " + backupIntent);
File savedStateName = new File(mStateDir, service.packageName);
- File backupDataName = new File(mStateDir, service.packageName + ".data");
+ File backupDataName = new File(mDataDir, service.packageName + ".data");
File newStateName = new File(mStateDir, service.packageName + ".new");
ParcelFileDescriptor savedState =
ParcelFileDescriptor.open(savedStateName,
ParcelFileDescriptor.MODE_READ_ONLY |
ParcelFileDescriptor.MODE_CREATE);
+
+ backupDataName.delete();
ParcelFileDescriptor backupData =
ParcelFileDescriptor.open(backupDataName,
ParcelFileDescriptor.MODE_READ_WRITE |
ParcelFileDescriptor.MODE_CREATE);
+
+ newStateName.delete();
ParcelFileDescriptor newState =
ParcelFileDescriptor.open(newStateName,
ParcelFileDescriptor.MODE_READ_WRITE |
ParcelFileDescriptor.MODE_CREATE);
- mTargetService.doBackup(savedState, backupData, newState);
+ // Run the target's backup pass
+ try {
+ mTargetService.doBackup(savedState, backupData, newState);
+ } finally {
+ savedState.close();
+ backupData.close();
+ newState.close();
+ }
// !!! TODO: Now propagate the newly-backed-up data to the transport
- // !!! TODO: After successful transport, juggle the files so that
- // next time the new state is used as the old state
+ // !!! TODO: After successful transport, delete the now-stale data
+ // and juggle the files so that next time the new state is passed
+ backupDataName.delete();
+ newStateName.renameTo(savedStateName);
} catch (FileNotFoundException fnf) {
Log.d(TAG, "File not found on backup: ");
@@ -173,9 +187,9 @@ class BackupManagerService extends IBackupManager.Stub {
mPackageManager = context.getPackageManager();
// Set up our bookkeeping
- File dataDir = Environment.getDataDirectory();
- mStateDir = new File(dataDir, "backup");
+ mStateDir = new File(Environment.getDataDirectory(), "backup");
mStateDir.mkdirs();
+ mDataDir = Environment.getDownloadCacheDirectory();
// Identify the backup participants
// !!! TODO: also watch package-install to keep this up to date