Skip to content

Commit 9ca7397

Browse files
committed
Remove FIRMessaging_FAIL macro, log result code
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
1 parent 1c97e82 commit 9ca7397

File tree

4 files changed

+49
-21
lines changed

4 files changed

+49
-21
lines changed

Example/Messaging/Tests/FIRMessagingFakeSocket.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ - (void)connectToHost:(NSString *)host
6666
self.inStream = CFBridgingRelease(inputStreamRef);
6767
self.outStream = CFBridgingRelease(outputStreamRef);
6868
if (!self.inStream || !self.outStream) {
69-
FIRMessaging_FAIL(@"cannot create a fake socket");
69+
NSAssert(NO, @"Cannot create a fake socket");
7070
return;
7171
}
7272

Firebase/Messaging/FIRMMessageCode.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,10 @@ typedef NS_ENUM(NSInteger, FIRMessagingMessageCode) {
132132
kFIRMessagingMessageCodeRmq2PersistentStore004 = 13004, // I-FCM013004
133133
kFIRMessagingMessageCodeRmq2PersistentStore005 = 13005, // I-FCM013005
134134
kFIRMessagingMessageCodeRmq2PersistentStore006 = 13006, // I-FCM013006
135+
kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingDatabase = 13007, // I-FCM013007
136+
kFIRMessagingMessageCodeRmq2PersistentStoreErrorOpeningDatabase = 13008, // I-FCM013008
137+
kFIRMessagingMessageCodeRmq2PersistentStoreInvalidRmqDirectory = 13009, // I-FCM013009
138+
kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingTable = 13010, // I-FCM013010
135139
// FIRMessagingRmqManager.m
136140
kFIRMessagingMessageCodeRmqManager000 = 14000, // I-FCM014000
137141
// FIRMessagingSecureSocket.m

Firebase/Messaging/FIRMessagingDefines.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,6 @@
2727
#endif // FIRMessaging_VERBOSE_LOGGING
2828

2929

30-
// FIRMessaging_FAIL
31-
#ifdef DEBUG
32-
#define FIRMessaging_FAIL(format, ...) \
33-
do { \
34-
NSLog(format, ##__VA_ARGS__); \
35-
__builtin_trap(); \
36-
} while (false)
37-
#else
38-
#define FIRMessaging_FAIL(...) do { } while (0)
39-
#endif
40-
41-
4230
// WEAKIFY & STRONGIFY
4331
// Helper macro.
4432
#define _FIRMessaging_WEAKNAME(VAR) VAR ## _weak_

Firebase/Messaging/FIRMessagingRmq2PersistentStore.m

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,14 @@
102102
// table data handlers
103103
typedef void(^FCMOutgoingRmqMessagesTableHandler)(int64_t rmqId, int8_t tag, NSData *data);
104104

105+
// Utility to create an NSString from a sqlite3 result code
106+
NSString * _Nonnull FIRMessagingStringFromSQLiteResult(int result) {
107+
const char *errorStr = sqlite3_errstr(result);
108+
//NSString *errorString = [NSString stringWithCString:errorStr encoding:NSUTF8StringEncoding];
109+
NSString *errorString = [NSString stringWithFormat:@"%d%s", result, errorStr];
110+
return errorString;
111+
}
112+
105113
@interface FIRMessagingRmq2PersistentStore () {
106114
sqlite3 *_database;
107115
}
@@ -187,6 +195,7 @@ + (NSString *)pathForDatabase:(NSString *)dbName inDirectory:(FIRMessagingRmqDir
187195
NSArray *paths;
188196
NSArray *components;
189197
NSString *dbNameWithExtension = [NSString stringWithFormat:@"%@.sqlite", dbName];
198+
NSString *errorMessage;
190199

191200
switch (directory) {
192201
case FIRMessagingRmqDirectoryDocuments:
@@ -206,7 +215,11 @@ + (NSString *)pathForDatabase:(NSString *)dbName inDirectory:(FIRMessagingRmqDir
206215
break;
207216

208217
default:
209-
FIRMessaging_FAIL(@"Invalid directory type %zd", directory);
218+
errorMessage = [NSString stringWithFormat:@"Invalid directory type %zd", directory];
219+
FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreInvalidRmqDirectory,
220+
@"%@",
221+
errorMessage);
222+
NSAssert(NO, errorMessage);
210223
break;
211224
}
212225

@@ -219,9 +232,13 @@ - (void)createTableWithName:(NSString *)tableName command:(NSString *)command {
219232
if (sqlite3_exec(_database, [createDatabase UTF8String], NULL, NULL, &error) != SQLITE_OK) {
220233
// remove db before failing
221234
[self removeDatabase];
222-
FIRMessaging_FAIL(@"Couldn't create table: %@ %@",
223-
kCreateTableOutgoingRmqMessages,
224-
[NSString stringWithCString:error encoding:NSUTF8StringEncoding]);
235+
NSString *errorMessage = [NSString stringWithFormat:@"Couldn't create table: %@ %@",
236+
kCreateTableOutgoingRmqMessages,
237+
[NSString stringWithCString:error encoding:NSUTF8StringEncoding]];
238+
FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingTable,
239+
@"%@",
240+
errorMessage);
241+
NSAssert(NO, errorMessage);
225242
}
226243
}
227244

@@ -256,8 +273,17 @@ - (void)openDatabase:(NSString *)dbName {
256273
BOOL didOpenDatabase = YES;
257274
if (![fileManager fileExistsAtPath:path]) {
258275
// We've to separate between different versions here because of backwards compatbility issues.
259-
if (sqlite3_open([path UTF8String], &_database) != SQLITE_OK) {
260-
FIRMessaging_FAIL(@"%@ Could not open rmq database: %@", kFCMRmqStoreTag, path);
276+
int result = sqlite3_open([path UTF8String], &_database);
277+
if (result != SQLITE_OK) {
278+
NSString *errorString = FIRMessagingStringFromSQLiteResult(result);
279+
NSString *errorMessage =
280+
[NSString stringWithFormat:@"Could not open existing RMQ database at path %@, error: %@",
281+
path,
282+
errorString];
283+
FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorOpeningDatabase,
284+
@"%@",
285+
errorMessage);
286+
NSAssert(NO, errorMessage);
261287
didOpenDatabase = NO;
262288
return;
263289
}
@@ -267,8 +293,18 @@ - (void)openDatabase:(NSString *)dbName {
267293
[self createTableWithName:kTableLastRmqId command:kCreateTableLastRmqId];
268294
[self createTableWithName:kTableS2DRmqIds command:kCreateTableS2DRmqIds];
269295
} else {
270-
if (sqlite3_open([path UTF8String], &_database) != SQLITE_OK) {
271-
FIRMessaging_FAIL(@"%@ Could not open rmq database: %@", kFCMRmqStoreTag, path);
296+
// Calling sqlite3_open should create the database, since the file doesn't exist.
297+
int result = sqlite3_open([path UTF8String], &_database);
298+
if (result != SQLITE_OK) {
299+
NSString *errorString = FIRMessagingStringFromSQLiteResult(result);
300+
NSString *errorMessage =
301+
[NSString stringWithFormat:@"Could not create RMQ database at path %@, error: %@",
302+
path,
303+
errorString];
304+
FIRMessagingLoggerError(kFIRMessagingMessageCodeRmq2PersistentStoreErrorCreatingDatabase,
305+
@"%@",
306+
errorMessage);
307+
NSAssert(NO, errorMessage);
272308
didOpenDatabase = NO;
273309
} else {
274310
[self updateDbWithStringRmqID];

0 commit comments

Comments
 (0)