Further development of backup file handling
Put backup data in flight into /cache
Close the files and delete the intermediates after backup pass
This commit is contained in:
@@ -62,6 +62,7 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
private final Object mQueueLock = new Object();
|
private final Object mQueueLock = new Object();
|
||||||
|
|
||||||
private File mStateDir;
|
private File mStateDir;
|
||||||
|
private File mDataDir;
|
||||||
|
|
||||||
// ----- Handler that runs the actual backup process asynchronously -----
|
// ----- Handler that runs the actual backup process asynchronously -----
|
||||||
|
|
||||||
@@ -106,28 +107,41 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
Log.d(TAG, "invoking doBackup() on " + backupIntent);
|
Log.d(TAG, "invoking doBackup() on " + backupIntent);
|
||||||
|
|
||||||
File savedStateName = new File(mStateDir, service.packageName);
|
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");
|
File newStateName = new File(mStateDir, service.packageName + ".new");
|
||||||
|
|
||||||
ParcelFileDescriptor savedState =
|
ParcelFileDescriptor savedState =
|
||||||
ParcelFileDescriptor.open(savedStateName,
|
ParcelFileDescriptor.open(savedStateName,
|
||||||
ParcelFileDescriptor.MODE_READ_ONLY |
|
ParcelFileDescriptor.MODE_READ_ONLY |
|
||||||
ParcelFileDescriptor.MODE_CREATE);
|
ParcelFileDescriptor.MODE_CREATE);
|
||||||
|
|
||||||
|
backupDataName.delete();
|
||||||
ParcelFileDescriptor backupData =
|
ParcelFileDescriptor backupData =
|
||||||
ParcelFileDescriptor.open(backupDataName,
|
ParcelFileDescriptor.open(backupDataName,
|
||||||
ParcelFileDescriptor.MODE_READ_WRITE |
|
ParcelFileDescriptor.MODE_READ_WRITE |
|
||||||
ParcelFileDescriptor.MODE_CREATE);
|
ParcelFileDescriptor.MODE_CREATE);
|
||||||
|
|
||||||
|
newStateName.delete();
|
||||||
ParcelFileDescriptor newState =
|
ParcelFileDescriptor newState =
|
||||||
ParcelFileDescriptor.open(newStateName,
|
ParcelFileDescriptor.open(newStateName,
|
||||||
ParcelFileDescriptor.MODE_READ_WRITE |
|
ParcelFileDescriptor.MODE_READ_WRITE |
|
||||||
ParcelFileDescriptor.MODE_CREATE);
|
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: Now propagate the newly-backed-up data to the transport
|
||||||
|
|
||||||
// !!! TODO: After successful transport, juggle the files so that
|
// !!! TODO: After successful transport, delete the now-stale data
|
||||||
// next time the new state is used as the old state
|
// and juggle the files so that next time the new state is passed
|
||||||
|
backupDataName.delete();
|
||||||
|
newStateName.renameTo(savedStateName);
|
||||||
|
|
||||||
} catch (FileNotFoundException fnf) {
|
} catch (FileNotFoundException fnf) {
|
||||||
Log.d(TAG, "File not found on backup: ");
|
Log.d(TAG, "File not found on backup: ");
|
||||||
@@ -173,9 +187,9 @@ class BackupManagerService extends IBackupManager.Stub {
|
|||||||
mPackageManager = context.getPackageManager();
|
mPackageManager = context.getPackageManager();
|
||||||
|
|
||||||
// Set up our bookkeeping
|
// Set up our bookkeeping
|
||||||
File dataDir = Environment.getDataDirectory();
|
mStateDir = new File(Environment.getDataDirectory(), "backup");
|
||||||
mStateDir = new File(dataDir, "backup");
|
|
||||||
mStateDir.mkdirs();
|
mStateDir.mkdirs();
|
||||||
|
mDataDir = Environment.getDownloadCacheDirectory();
|
||||||
|
|
||||||
// Identify the backup participants
|
// Identify the backup participants
|
||||||
// !!! TODO: also watch package-install to keep this up to date
|
// !!! TODO: also watch package-install to keep this up to date
|
||||||
|
|||||||
Reference in New Issue
Block a user