Fix migration issue. We had an infinite migration, since clearWith wait for the list to be empty.

This commit is contained in:
Benoit Marty 2022-06-27 14:49:34 +02:00 committed by Benoit Marty
parent 8ada26529a
commit c9a28c1cf1

View File

@ -17,11 +17,12 @@
package org.matrix.android.sdk.internal.database.migration package org.matrix.android.sdk.internal.database.migration
import io.realm.DynamicRealm import io.realm.DynamicRealm
import io.realm.DynamicRealmObject
import org.matrix.android.sdk.internal.database.model.ChunkEntityFields import org.matrix.android.sdk.internal.database.model.ChunkEntityFields
import org.matrix.android.sdk.internal.database.model.EventEntityFields import org.matrix.android.sdk.internal.database.model.EventEntityFields
import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields import org.matrix.android.sdk.internal.database.model.TimelineEventEntityFields
import org.matrix.android.sdk.internal.extensions.clearWith
import org.matrix.android.sdk.internal.util.database.RealmMigrator import org.matrix.android.sdk.internal.util.database.RealmMigrator
import timber.log.Timber
/** /**
* Migrating to: * Migrating to:
@ -35,16 +36,23 @@ internal class MigrateSessionTo030(realm: DynamicRealm) : RealmMigrator(realm, 3
.equalTo(ChunkEntityFields.IS_LAST_FORWARD, false) .equalTo(ChunkEntityFields.IS_LAST_FORWARD, false)
.findAll() .findAll()
var nbOfDeletedObjects = 0
chunks.forEach { chunk -> chunks.forEach { chunk ->
chunk.getList(ChunkEntityFields.TIMELINE_EVENTS.`$`).clearWith { timelineEvent -> val realmObjectToDelete = mutableListOf<DynamicRealmObject>()
chunk.getList(ChunkEntityFields.TIMELINE_EVENTS.`$`).forEach { timelineEvent ->
// Don't delete state events // Don't delete state events
val event = timelineEvent.getObject(TimelineEventEntityFields.ROOT.`$`) val event = timelineEvent.getObject(TimelineEventEntityFields.ROOT.`$`)
if (event?.isNull(EventEntityFields.STATE_KEY) == true) { if (event?.isNull(EventEntityFields.STATE_KEY) == true) {
event.deleteFromRealm() realmObjectToDelete.add(event)
timelineEvent.deleteFromRealm() realmObjectToDelete.add(timelineEvent)
} }
} }
nbOfDeletedObjects += realmObjectToDelete.size
realmObjectToDelete.forEach {
it.deleteFromRealm()
}
chunk.deleteFromRealm() chunk.deleteFromRealm()
} }
Timber.d("MigrateSessionTo030: $nbOfDeletedObjects deleted object(s).")
} }
} }