Add database validity check.

pull/1/head
Matthew Chen 7 years ago
parent 3c2aae3b9c
commit 061ce8cb13

@ -248,6 +248,10 @@ NSString *const kOWSBackup_ExportDatabaseKeySpec = @"kOWSBackup_ExportDatabaseKe
[primaryDBConnection readWithBlock:^(YapDatabaseReadTransaction *srcTransaction) {
[tempDBConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *dstTransaction) {
[dstTransaction setObject:@(YES)
forKey:kOWSBackup_Snapshot_ValidKey
inCollection:kOWSBackup_Snapshot_Collection];
// Copy threads.
[srcTransaction
enumerateKeysAndObjectsInCollection:[TSThread collection]
@ -347,6 +351,9 @@ NSString *const kOWSBackup_ExportDatabaseKeySpec = @"kOWSBackup_ExportDatabaseKe
}];
}];
if (self.isComplete) {
return NO;
}
// TODO: Should we do a database checkpoint?
DDLogInfo(@"%@ copiedThreads: %llu", self.logTag, copiedThreads);

@ -408,6 +408,14 @@ NSString *const kOWSBackup_ImportDatabaseKeySpec = @"kOWSBackup_ImportDatabaseKe
__block BOOL aborted = NO;
[tempDBConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *srcTransaction) {
[primaryDBConnection readWriteWithBlock:^(YapDatabaseReadWriteTransaction *dstTransaction) {
if (![srcTransaction boolForKey:kOWSBackup_Snapshot_ValidKey
inCollection:kOWSBackup_Snapshot_Collection
defaultValue:NO]) {
DDLogError(@"%@ invalid database.", self.logTag);
aborted = YES;
return completion(NO);
}
for (NSString *collection in collectionsToRestore) {
if ([collection isEqualToString:[OWSDatabaseMigration collection]]) {
// It's okay if there are existing migrations; we'll clear those

@ -8,6 +8,9 @@ extern NSString *const kOWSBackup_ManifestKey_DatabaseFiles;
extern NSString *const kOWSBackup_ManifestKey_AttachmentFiles;
extern NSString *const kOWSBackup_ManifestKey_DatabaseKeySpec;
extern NSString *const kOWSBackup_Snapshot_Collection;
extern NSString *const kOWSBackup_Snapshot_ValidKey;
typedef void (^OWSBackupJobBoolCompletion)(BOOL success);
typedef void (^OWSBackupJobCompletion)(NSError *_Nullable error);

@ -16,6 +16,9 @@ NSString *const kOWSBackup_ManifestKey_DatabaseKeySpec = @"database_key_spec";
NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
NSString *const kOWSBackup_Snapshot_Collection = @"kOWSBackup_Snapshot_Collection";
NSString *const kOWSBackup_Snapshot_ValidKey = @"kOWSBackup_Snapshot_ValidKey";
@interface OWSBackupJob ()
@property (nonatomic, weak) id<OWSBackupJobDelegate> delegate;

Loading…
Cancel
Save