From 08f1ddb21243d53d7aef51fac5d8a36a25e24ca4 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Wed, 14 Dec 2022 11:15:23 -0500 Subject: [PATCH] Guard against potentially double-running a migration. --- .../org/thoughtcrime/securesms/database/SignalDatabase.kt | 1 + .../helpers/migration/V166_ThreadAndMessageForeignKeys.kt | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt index 8dba74d7c..2b63d7962 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/SignalDatabase.kt @@ -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() diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt index a5596c365..c5b44c04b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/helpers/migration/V166_ThreadAndMessageForeignKeys.kt @@ -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)