diff options
| author | Christopher Tate <ctate@google.com> | 2009-05-05 15:50:03 -0700 |
|---|---|---|
| committer | Christopher Tate <ctate@google.com> | 2009-05-05 15:50:03 -0700 |
| commit | f417247fa68524f2f34960f7389168eed7eb4a88 (patch) | |
| tree | 96725ef9323a5617a117c3d8a2944c39f196677d /services/java/com/android/server/BackupManagerService.java | |
| parent | 06d96020c35dac2bf1651cb8bd4cfced911f1142 (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.java | 26 |
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 |
