Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

com.onesignal.OneSignalDbHelper.getSQLiteDatabase crashes #1214

Open
fchicken opened this issue Nov 19, 2020 · 7 comments
Open

com.onesignal.OneSignalDbHelper.getSQLiteDatabase crashes #1214

fchicken opened this issue Nov 19, 2020 · 7 comments
Labels
Medium Priority Possible Bug Maintainers need to confirm or reproduce

Comments

@fchicken
Copy link

fchicken commented Nov 19, 2020

Description:

Some crashes happen when com.onesignal.OneSignalDbHelper.getSQLiteDatabase is called.

Environment

OneSignal SDK: 3.15.3
Android SDK: Many versions have these crashes

Steps to Reproduce Issue:

I can't reproduce these issues, but I attach some stack traces from users below.

Stack Traces:

Fatal Exception: android.database.sqlite.SQLiteDiskIOException
Fatal Exception: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 4874 SQLITE_IOERR_SHMSIZE): , while compiling: PRAGMA journal_mode
       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
       at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:648)
       at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:333)
       at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:298)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:217)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:195)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:729)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:355)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.query$1749d206(OneSignalDbHelper.java:188)
       at com.onesignal.OSInAppMessageRepository.getCachedInAppMessages(OSInAppMessageRepository.java:45)
       at com.onesignal.OSInAppMessageController.initRedisplayData(OSInAppMessageController.java:133)
       at com.onesignal.OSInAppMessageController.<init>(OSInAppMessageController.java:121)
       at com.onesignal.OSInAppMessageController.getController(OSInAppMessageController.java:83)
       at com.onesignal.OneSignalCacheCleaner$2.run(OneSignalCacheCleaner.java:61)
       at java.lang.Thread.run(Thread.java:764)
Fatal Exception: android.database.sqlite.SQLiteException
Fatal Exception: android.database.sqlite.SQLiteException: Failed to change locale for db '/mnt/expand/95a59313-114c-496a-ae37-25b5bac550bc/user/0/live.free.tv_tw/databases/OneSignal.db' to 'zh_TW_#Hant'.
       at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:409)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:223)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:198)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:843)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:828)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:721)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:664)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:289)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.query$1749d206(OneSignalDbHelper.java:188)
       at com.onesignal.outcomes.OSOutcomeEventsCache.getAllEventsToSend(OSOutcomeEventsCache.java:140)
       at com.onesignal.outcomes.OSOutcomeEventsRepository.getSavedOutcomeEvents(OSOutcomeEventsRepository.java:30)
       at com.onesignal.OSOutcomeEventsController$1.run(OSOutcomeEventsController.java:69)
       at java.lang.Thread.run(Thread.java:761)
@Jeasmine
Copy link
Contributor

Hey @fchicken, thanks for reporting this, can you provide the device's information (android version, brand, etc) of the devices that are having this issue? Thanks!

@fchicken
Copy link
Author

fchicken commented Nov 24, 2020

Hey @Jeasmine, here are some devices' information that encounter these crashes.

  • Fatal Exception: android.database.sqlite.SQLiteDiskIOException
    • moto e(5) cruise with Android 8.0.0
    • moto g(7) power with Android 9
    • moto g(7) optimo maxx(XT1955DL) with Android 9
    • UMX U693CL with Android 9
    • Samsung Galaxy Tab E 9.6 with Android 7.1.1
    • TINNO U304AA with Android 9
  • Fatal Exception: android.database.sqlite.SQLiteException
    • Acer Iconia Tab 10 with Android 7.0
    • Sony Xperia XA2 with Android 9

@WagesOfSin
Copy link

I have the same issue on Samsung Galaxy A11 (Android 10). @Jeasmine any news?

@jkasten2
Copy link
Member

@fchicken @WagesOfSin Thanks for reporting, I have a few follow up comments and questions.

Question 1 - What are the number of crash reports for each of these?

Question 2 - Could you provide the full stack trace for each SQLiteException?
This exceptions is generic so it could be a number of different errors.

Comment 1 - SQLiteDiskIOException
This looks to be from the device running out of space. I would expect this to be quite rare but we will look into handing this as the SDK should be able to move on without it.

Comment 2 - SQLiteException: Failed to change locale for db
"SQLiteException: Failed to change locale for db '/.../OneSignal.db' to 'zh_TW#Hant'."_ this looks to be from the system language changing. I wouldn't expect an exception from this but we can attempt to reproduce this by changing the device's language.

@jkasten2 jkasten2 added Needs More Information Possible Bug Maintainers need to confirm or reproduce labels Dec 28, 2020
@fchicken
Copy link
Author

fchicken commented Jan 13, 2021

@jkasten2 Thanks for your comments. The following is the information of these two questions:

Question 1 - What are the number of crash reports for each of these?
SQLiteDiskIOException reports approximately 1.8k in last 30 days
SQLiteException reports approximately 2k in last 30 days

Question 2 - Could you provide the full stack trace for each SQLiteException?
The stack traces is provided in the first post, but I can provide more here.

Fatal Exception: android.database.sqlite.SQLiteDiskIOException
Fatal Exception: android.database.sqlite.SQLiteDiskIOException: unknown error (code 10): Could not open database
       at android.database.sqlite.SQLiteConnection.nativeOpen(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:808)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:793)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:696)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:652)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:289)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.delete(OneSignalDbHelper.java:269)
       at com.onesignal.OneSignalCacheCleaner.cleanCachedNotifications(OneSignalCacheCleaner.java:82)
       at com.onesignal.OneSignalCacheCleaner.access$000(OneSignalCacheCleaner.java:11)
       at com.onesignal.OneSignalCacheCleaner$1.run(OneSignalCacheCleaner.java:40)
       at java.lang.Thread.run(Thread.java:761)
Fatal Exception: android.database.sqlite.SQLiteDiskIOException
Fatal Exception: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1034 SQLITE_IOERR_FSYNC)
       at android.database.sqlite.SQLiteConnection.nativeExecute(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:648)
       at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:450)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:227)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:197)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:505)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:206)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:198)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:915)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:895)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:759)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:748)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:374)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:317)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.query(OneSignalDbHelper.java:188)
       at com.onesignal.OSInAppMessageRepository.getCachedInAppMessages(OSInAppMessageRepository.java:45)
       at com.onesignal.OSInAppMessageController.initRedisplayData(OSInAppMessageController.java:133)
       at com.onesignal.OSInAppMessageController.<init>(OSInAppMessageController.java:121)
       at com.onesignal.OSInAppMessageController.getController(OSInAppMessageController.java:83)
       at com.onesignal.OneSignalCacheCleaner$2.run(OneSignalCacheCleaner.java:61)
       at java.lang.Thread.run(Thread.java:919)
Fatal Exception: android.database.sqlite.SQLiteDatabaseLockedException
Fatal Exception: android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_mode
       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
       at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:804)
       at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:490)
       at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:464)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:363)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:228)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:512)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:206)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:178)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:894)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:864)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:699)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1520)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:282)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.delete(OneSignalDbHelper.java:269)
       at com.onesignal.OneSignalCacheCleaner.cleanCachedNotifications(OneSignalCacheCleaner.java:82)
       at com.onesignal.OneSignalCacheCleaner.access$000(OneSignalCacheCleaner.java:11)
       at com.onesignal.OneSignalCacheCleaner$1.run(OneSignalCacheCleaner.java:40)
       at java.lang.Thread.run(Thread.java:818)
Fatal Exception: android.database.sqlite.SQLiteException
Fatal Exception: android.database.sqlite.SQLiteException: Failed to change locale for db '/mnt/expand/95a59313-114c-496a-ae37-25b5bac550bc/user/0/live.free.tv_tw/databases/OneSignal.db' to 'zh_TW_#Hant'.
       at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:409)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:223)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:198)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:843)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:828)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:721)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:664)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:289)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.delete(OneSignalDbHelper.java:269)
       at com.onesignal.OneSignalCacheCleaner.cleanCachedNotifications(OneSignalCacheCleaner.java:82)
       at com.onesignal.OneSignalCacheCleaner.access$000(OneSignalCacheCleaner.java:11)
       at com.onesignal.OneSignalCacheCleaner$1.run(OneSignalCacheCleaner.java:40)
       at java.lang.Thread.run(Thread.java:761)
Caused by android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed (code 11)
       at android.database.sqlite.SQLiteConnection.nativeExecuteForString(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:657)
       at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:223)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:198)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:843)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:828)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:721)
       at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:664)
       at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:289)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:149)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:173)
       at com.onesignal.OneSignalDbHelper.delete(OneSignalDbHelper.java:269)
       at com.onesignal.OneSignalCacheCleaner.cleanCachedNotifications(OneSignalCacheCleaner.java:82)
       at com.onesignal.OneSignalCacheCleaner.access$000(OneSignalCacheCleaner.java:11)
       at com.onesignal.OneSignalCacheCleaner$1.run(OneSignalCacheCleaner.java:40)
       at java.lang.Thread.run(Thread.java:761)

@nan-li
Copy link
Contributor

nan-li commented Apr 5, 2022

Hi @fchicken and @WagesOfSin,

I am sorry it has been so long. I am checking in on this issue: we have updated the SDK to major release 4.x.x since these reports. Are you still on 3.x.x and seeing these crashes?

@GvinPin47
Copy link

@nan-li same stuff

SDK version -> 4.8.6

Device Info ->
Brand: Asus
Model: ZenFone Max Pro M1 (ZB602KL) (WW) / Max Pro M1 (ZB601KL) (IN)
Version: Android 9

Fatal Exception: android.database.sqlite.SQLiteDiskIOException
Fatal Exception: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 4874 SQLITE_IOERR_SHMSIZE): , while compiling: PRAGMA journal_mode
       at android.database.sqlite.SQLiteConnection.nativePrepareStatement(SQLiteConnection.java)
       at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
       at android.database.sqlite.SQLiteConnection.executeForString(SQLiteConnection.java:648)
       at android.database.sqlite.SQLiteConnection.setJournalMode(SQLiteConnection.java:333)
       at android.database.sqlite.SQLiteConnection.setWalModeFromConfiguration(SQLiteConnection.java:298)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:217)
       at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:195)
       at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:503)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:204)
       at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:196)
       at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:880)
       at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:865)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
       at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:729)
       at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:355)
       at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:298)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabase(OneSignalDbHelper.java:150)
       at com.onesignal.OneSignalDbHelper.getSQLiteDatabaseWithRetries(OneSignalDbHelper.java:177)
       at com.onesignal.OneSignalDbHelper.delete(OneSignalDbHelper.java:295)
       at com.onesignal.OSNotificationDataController$1.run(OSNotificationDataController.java:57)
       at java.lang.Thread.run(Thread.java:764)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Medium Priority Possible Bug Maintainers need to confirm or reproduce
Projects
None yet
Development

No branches or pull requests

6 participants