diff options
author | Riz <rsattar@gmail.com> | 2017-09-13 17:43:17 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-09-13 17:43:17 -0700 |
commit | 446c5c026702af69ffa203b58128fad7e7c0ff88 (patch) | |
tree | a50839a4dd98b86c00f63d9a738961c7d81cbe6a /Firebase/Messaging | |
parent | e69e62beb269b08764e603b0fa517cf1f8d4f00b (diff) |
Remove FIRMessaging_FAIL macro, log result code (#265)
This removes the `FIRMessaging_FAIL` macro which was using `__builtin_trap()`, and replaced with `NSAssert` calls. These `NSAssert` calls may not get called in release builds, and so we also log them with FIRLogger error messages.
The RMQ database open error result code is now parsed and included in the error message to help us identify causes for #199 .
Diffstat (limited to 'Firebase/Messaging')
-rw-r--r-- | Firebase/Messaging/FIRMMessageCode.h | 4 | ||||
-rw-r--r-- | Firebase/Messaging/FIRMessagingDefines.h | 12 | ||||
-rw-r--r-- | Firebase/Messaging/FIRMessagingRmq2PersistentStore.m | 51 |
3 files changed, 47 insertions, 20 deletions
diff --git a/Firebase/Messaging/FIRMMessageCode.h b/Firebase/Messaging/FIRMMessageCode.h index 6afc1bb..46505ec 100644 --- a/Firebase/Messaging/FIRMMessageCode.h +++ b/Firebase/Messaging/FIRMMessageCode.h @@ -132,6 +132,10 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) { kFIRMessagingMessageCodeRmq2PersistentStore004 = 13004, // I-FCM013004 kFIRMessagingMessageCodeRmq2PersistentStore005 = 13005, // I-FCM013005 kFIRMessagingMessageCodeRmq2PersistentStore006 = 13006, // I-FCM013006 + kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingDatabase = 13007, // I-FCM013007 + kFIRMessagingMessageCodeRmq2PersistentStoreErrorOpeningDatabase = 13008, // I-FCM013008 + kFIRMessagingMessageCodeRmq2PersistentStoreInvalidRmqDirectory = 13009, // I-FCM013009 + kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingTable = 13010, // I-FCM013010 // FIRMessagingRmqManager.m kFIRMessagingMessageCodeRmqManager000 = 14000, // I-FCM014000 // FIRMessagingSecureSocket.m diff --git a/Firebase/Messaging/FIRMessagingDefines.h b/Firebase/Messaging/FIRMessagingDefines.h index 36448ed..62399b3 100644 --- a/Firebase/Messaging/FIRMessagingDefines.h +++ b/Firebase/Messaging/FIRMessagingDefines.h @@ -27,18 +27,6 @@ #endif // FIRMessaging_VERBOSE_LOGGING -// FIRMessaging_FAIL -#ifdef DEBUG -#define FIRMessaging_FAIL(format, ...) \ -do { \ - NSLog(format, ##__VA_ARGS__); \ - __builtin_trap(); \ -} while (false) -#else -#define FIRMessaging_FAIL(...) do { } while (0) -#endif - - // WEAKIFY & STRONGIFY // Helper macro. #define _FIRMessaging_WEAKNAME(VAR) VAR ## _weak_ diff --git a/Firebase/Messaging/FIRMessagingRmq2PersistentStore.m b/Firebase/Messaging/FIRMessagingRmq2PersistentStore.m index 9edac40..a85298c 100644 --- a/Firebase/Messaging/FIRMessagingRmq2PersistentStore.m +++ b/Firebase/Messaging/FIRMessagingRmq2PersistentStore.m @@ -102,6 +102,13 @@ static NSString *const kSyncMessageMCSReceivedColumn = @"mcs_recv"; // table data handlers typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSData *data); +// Utility to create an NSString from a sqlite3 result code +NSString * _Nonnull FIRMessagingStringFromSQLiteResult(int result) { + const char *errorStr = sqlite3_errstr(result); + NSString *errorString = [NSString stringWithFormat:@"%d - %s", result, errorStr]; + return errorString; +} + @interface FIRMessagingRmq2PersistentStore () { sqlite3 *_database; } @@ -187,6 +194,7 @@ typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSD NSArray *paths; NSArray *components; NSString *dbNameWithExtension = [NSString stringWithFormat:@"%@.sqlite", dbName]; + NSString *errorMessage; switch (directory) { case FIRMessagingRmqDirectoryDocuments: @@ -206,7 +214,11 @@ typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSD break; default: - FIRMessaging_FAIL(@"Invalid directory type %zd", directory); + errorMessage = [NSString stringWithFormat:@"Invalid directory type %zd", directory]; + FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreInvalidRmqDirectory, + @"%@", + errorMessage); + NSAssert(NO, errorMessage); break; } @@ -219,9 +231,13 @@ typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSD if (sqlite3_exec(_database, [createDatabase UTF8String], NULL, NULL, &error) != SQLITE_OK) { // remove db before failing [self removeDatabase]; - FIRMessaging_FAIL(@"Couldn't create table: %@ %@", - kCreateTableOutgoingRmqMessages, - [NSString stringWithCString:error encoding:NSUTF8StringEncoding]); + NSString *errorMessage = [NSString stringWithFormat:@"Couldn't create table: %@ %@", + kCreateTableOutgoingRmqMessages, + [NSString stringWithCString:error encoding:NSUTF8StringEncoding]]; + FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingTable, + @"%@", + errorMessage); + NSAssert(NO, errorMessage); } } @@ -256,8 +272,17 @@ typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSD BOOL didOpenDatabase = YES; if (![fileManager fileExistsAtPath:path]) { // We've to separate between different versions here because of backwards compatbility issues. - if (sqlite3_open([path UTF8String], &_database) != SQLITE_OK) { - FIRMessaging_FAIL(@"%@ Could not open rmq database: %@", kFCMRmqStoreTag, path); + int result = sqlite3_open([path UTF8String], &_database); + if (result != SQLITE_OK) { + NSString *errorString = FIRMessagingStringFromSQLiteResult(result); + NSString *errorMessage = + [NSString stringWithFormat:@"Could not open existing RMQ database at path %@, error: %@", + path, + errorString]; + FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorOpeningDatabase, + @"%@", + errorMessage); + NSAssert(NO, errorMessage); didOpenDatabase = NO; return; } @@ -267,8 +292,18 @@ typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSD [self createTableWithName:kTableLastRmqId command:kCreateTableLastRmqId]; [self createTableWithName:kTableS2DRmqIds command:kCreateTableS2DRmqIds]; } else { - if (sqlite3_open([path UTF8String], &_database) != SQLITE_OK) { - FIRMessaging_FAIL(@"%@ Could not open rmq database: %@", kFCMRmqStoreTag, path); + // Calling sqlite3_open should create the database, since the file doesn't exist. + int result = sqlite3_open([path UTF8String], &_database); + if (result != SQLITE_OK) { + NSString *errorString = FIRMessagingStringFromSQLiteResult(result); + NSString *errorMessage = + [NSString stringWithFormat:@"Could not create RMQ database at path %@, error: %@", + path, + errorString]; + FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingDatabase, + @"%@", + errorMessage); + NSAssert(NO, errorMessage); didOpenDatabase = NO; } else { [self updateDbWithStringRmqID]; |