Rework isStorageReady.

This commit is contained in:
Matthew Chen 2019-09-19 13:34:43 -03:00
parent 0923ad6c39
commit b09da45672
9 changed files with 66 additions and 13 deletions

View File

@ -1231,7 +1231,7 @@ static NSTimeInterval launchStartedAt;
if (!self.areVersionMigrationsComplete) {
return;
}
if (![OWSStorage isStorageReady]) {
if (![self.storageCoordinator isStorageReady]) {
return;
}
if ([AppReadiness isAppReady]) {

View File

@ -7,6 +7,7 @@
#import "Signal-Swift.h"
#import <PromiseKit/AnyPromise.h>
#import <SignalCoreKit/Randomness.h>
#import <SignalServiceKit/StorageCoordinator.h>
#import <YapDatabase/YapDatabaseCryptoUtils.h>
NS_ASSUME_NONNULL_BEGIN
@ -46,6 +47,15 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
@implementation OWSBackupJob
#pragma mark - Dependencies
- (StorageCoordinator *)storageCoordinator
{
return SSKEnvironment.shared.storageCoordinator;
}
#pragma mark -
- (instancetype)initWithDelegate:(id<OWSBackupJobDelegate>)delegate recipientId:(NSString *)recipientId
{
self = [super init];
@ -55,7 +65,7 @@ NSString *const kOWSBackup_KeychainService = @"kOWSBackup_KeychainService";
}
OWSAssertDebug(recipientId.length > 0);
OWSAssertDebug([OWSStorage isStorageReady]);
OWSAssertDebug([self.storageCoordinator isStorageReady]);
self.delegate = delegate;
self.recipientId = recipientId;

View File

@ -102,7 +102,7 @@ NS_ASSUME_NONNULL_BEGIN
OWSSounds *sounds = [OWSSounds new];
id<OWSProximityMonitoringManager> proximityMonitoringManager = [OWSProximityMonitoringManagerImpl new];
OWSWindowManager *windowManager = [[OWSWindowManager alloc] initDefault];
[Environment setShared:[[Environment alloc] initWithAudioSession:audioSession
preferences:preferences
proximityMonitoringManager:proximityMonitoringManager
@ -167,7 +167,7 @@ NS_ASSUME_NONNULL_BEGIN
migrationCompletion();
[StorageCoordinator postStorageIsReadyNotification];
[storageCoordinator storageSetupDidComplete];
OWSAssertDebug(backgroundTask);
backgroundTask = nil;

View File

@ -112,6 +112,10 @@ extension YDBToGRDBMigration {
return SSKEnvironment.shared.primaryStorage
}
private var storageCoordinator: StorageCoordinator {
return SSKEnvironment.shared.storageCoordinator
}
// MARK: -
func run() throws {
@ -176,8 +180,6 @@ extension YDBToGRDBMigration {
}
func migrate(migratorGroups: [GRDBMigratorGroup]) throws {
assert(OWSStorage.isStorageReady())
Logger.info("")
// We can't nest ydbTransactions in GRDB and vice-versa

View File

@ -14,6 +14,10 @@ public class OWSScreenLock: NSObject {
return SDSDatabaseStorage.shared
}
private var storageCoordinator: StorageCoordinator {
return SSKEnvironment.shared.storageCoordinator
}
// MARK: -
public enum OWSScreenLockOutcome {
@ -63,7 +67,7 @@ public class OWSScreenLock: NSObject {
public func isScreenLockEnabled() -> Bool {
AssertIsOnMainThread()
if !OWSStorage.isStorageReady() {
if !storageCoordinator.isStorageReady {
owsFailDebug("accessed screen lock state before storage is ready.")
return false
}
@ -78,7 +82,7 @@ public class OWSScreenLock: NSObject {
@objc
public func setIsScreenLockEnabled(_ value: Bool) {
AssertIsOnMainThread()
assert(OWSStorage.isStorageReady())
assert(storageCoordinator.isStorageReady)
databaseStorage.write { transaction in
self.keyValueStore.setBool(value,
@ -93,7 +97,7 @@ public class OWSScreenLock: NSObject {
public func screenLockTimeout() -> TimeInterval {
AssertIsOnMainThread()
if !OWSStorage.isStorageReady() {
if !storageCoordinator.isStorageReady {
owsFailDebug("accessed screen lock state before storage is ready.")
return 0
}
@ -108,7 +112,7 @@ public class OWSScreenLock: NSObject {
@objc
public func setScreenLockTimeout(_ value: TimeInterval) {
AssertIsOnMainThread()
assert(OWSStorage.isStorageReady())
assert(storageCoordinator.isStorageReady)
databaseStorage.write { transaction in
self.keyValueStore.setDouble(value,

View File

@ -27,6 +27,8 @@ NSString *NSStringFromStorageCoordinatorState(StorageCoordinatorState value);
@property (atomic, readonly) BOOL isMigrating;
@property (atomic, readonly) BOOL isStorageReady;
- (instancetype)init;
// These methods should only be called by the migration itself.
@ -43,7 +45,7 @@ NSString *NSStringFromStorageCoordinatorState(StorageCoordinatorState value);
- (void)useYDBForTests;
#endif
+ (void)postStorageIsReadyNotification;
- (void)storageSetupDidComplete;
@end

View File

@ -35,6 +35,8 @@ NSString *NSStringFromStorageCoordinatorState(StorageCoordinatorState value)
@property (atomic) StorageCoordinatorState state;
@property (atomic) BOOL isStorageSetupComplete;
@end
#pragma mark -
@ -191,7 +193,14 @@ NSString *NSStringFromStorageCoordinatorState(StorageCoordinatorState value)
[OWSStorage deleteDBKeys];
}
+ (void)postStorageIsReadyNotification
- (void)storageSetupDidComplete
{
self.isStorageSetupComplete = YES;
[self postStorageIsReadyNotification];
}
- (void)postStorageIsReadyNotification
{
OWSLogInfo(@"");
@ -203,6 +212,21 @@ NSString *NSStringFromStorageCoordinatorState(StorageCoordinatorState value)
});
}
- (BOOL)isStorageReady
{
switch (self.state) {
case StorageCoordinatorStateYDB:
case StorageCoordinatorStateYDBTests:
return [OWSStorage isStorageReady] && self.isStorageSetupComplete;
case StorageCoordinatorStateBeforeYDBToGRDBMigration:
case StorageCoordinatorStateDuringYDBToGRDBMigration:
return NO;
case StorageCoordinatorStateGRDB:
case StorageCoordinatorStateGRDBTests:
return self.isStorageSetupComplete;
}
}
@end
NS_ASSUME_NONNULL_END

View File

@ -26,6 +26,7 @@
#import "StorageCoordinator.h"
#import "TSAccountManager.h"
#import "TSSocketManager.h"
#import <SignalServiceKit/OWSBackgroundTask.h>
#import <SignalServiceKit/ProfileManagerProtocol.h>
#import <SignalServiceKit/SignalServiceKit-Swift.h>
@ -57,6 +58,9 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)init
{
// Ensure that OWSBackgroundTaskManager is created now.
[OWSBackgroundTaskManager sharedManager];
StorageCoordinator *storageCoordinator = [StorageCoordinator new];
SDSDatabaseStorage *databaseStorage = storageCoordinator.databaseStorage;
// Unlike AppSetup, we always load YDB in the tests.
@ -136,6 +140,7 @@ NS_ASSUME_NONNULL_BEGIN
self.callMessageHandler = [OWSFakeCallMessageHandler new];
self.notificationsManager = [NoopNotificationsManager new];
return self;
}
@ -144,6 +149,8 @@ NS_ASSUME_NONNULL_BEGIN
if (self.databaseStorage.canLoadYdb) {
__block dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);
[OWSStorage registerExtensionsWithCompletionBlock:^() {
[self.storageCoordinator storageSetupDidComplete];
dispatch_semaphore_signal(semaphore);
}];

View File

@ -30,6 +30,10 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed
return SSKEnvironment.shared.syncManager
}
private var storageCoordinator: StorageCoordinator {
return SSKEnvironment.shared.storageCoordinator
}
// MARK: -
enum ShareViewControllerError: Error {
@ -257,7 +261,7 @@ public class ShareViewController: UIViewController, ShareViewDelegate, SAEFailed
guard areVersionMigrationsComplete else {
return
}
guard OWSStorage.isStorageReady() else {
guard storageCoordinator.isStorageReady else {
return
}
guard !AppReadiness.isAppReady() else {