Guard against potentially double-running a migration.

main
Greyson Parrelli 2022-12-14 11:15:23 -05:00
rodzic 4c318d8d82
commit 08f1ddb212
2 zmienionych plików z 9 dodań i 0 usunięć

Wyświetl plik

@ -168,6 +168,7 @@ open class SignalDatabase(private val context: Application, databaseSecret: Data
db.beginTransaction()
try {
migrate(context, db, oldVersion, newVersion)
db.version = newVersion
db.setTransactionSuccessful()
} finally {
db.endTransaction()

Wyświetl plik

@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.database.helpers.migration
import android.app.Application
import net.zetetic.database.sqlcipher.SQLiteDatabase
import org.signal.core.util.SqlUtil
import org.signal.core.util.Stopwatch
import org.signal.core.util.delete
import org.signal.core.util.logging.Log
@ -19,6 +20,13 @@ object V166_ThreadAndMessageForeignKeys : SignalDatabaseMigration {
private val TAG = Log.tag(V166_ThreadAndMessageForeignKeys::class.java)
override fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
// Some crashes we were seeing indicated that we may have been running this migration twice on some unlucky devices, likely due
// to some gaps that were left between some transactions during the upgrade path.
if (!SqlUtil.columnExists(db, "thread", "thread_recipient_id")) {
Log.w(TAG, "Migration must have already run! Skipping.")
return
}
val stopwatch = Stopwatch("migration")
removeDuplicateThreadEntries(db)