我在 Firebase 崩溃分析上遇到一个问题,它显示重复的列名称“expiration”,这是在保存文档时设置的文档过期时间,根据异常,它在收集时抛出异常创建。
在我的代码中,我检查集合是否已存在,然后使用该集合,但我不会再次创建相同的集合,但仍会出现以下异常
由 com.couchbase.lite.LiteCoreException 引起:重复的列名称:过期 -- ALTER TABLE "kv_.\Events\Logs\Scope.\Event\Logs\Collection" ADD COLUMNexpiration INTEGER; CREATE INDEX "kv_.\Events\Logs\Scope.\Event\Logs\Collection_expiration" ON "kv_.\Events\Logs\Scope.\Event\Logs\Collection" (过期) WHERE 过期不为空 在 com.couchbase.lite.internal.core.impl.NativeC4Collection.createCollection(NativeC4Collection.java) 在 com.couchbase.lite.internal.core.impl.NativeC4Collection.nCreateCollection(NativeC4Collection.java) 在 com.couchbase.lite.internal.core.C4Collection.create(C4Collection.java:6) 在 com.couchbase.lite.internal.core.C4Collection.create(C4Collection.java:2) 在 com.couchbase.lite.internal.core.C4Database.addCollection(C4Database.java) 在 com.couchbase.lite.AbstractDatabase.addC4Collection(AbstractDatabase.java:9) 在 com.couchbase.lite.Collection.createCollection(Collection.java:2) 在 com.couchbase.lite.AbstractDatabase.createCollection(AbstractDatabase.java:16) 在 ma.dista.repository.storage.CouchbaseStorage.create(CouchbaseStorage.java:33) 在 ma.dista.repository.MetaLayer.create(MetaLayer.java:42) 在 ma.dista.repository.repositories.EventLoggerRepository。(EventLoggerRepository.java:45) 在 ma.dista.repository.repositories.EventLoggerRepository$Companion.getInstance(EventLoggerRepository.java:2) 在 ma.dista.repository.RepositoryProvider.getEventLoggerRepository(RepositoryProvider.java:2) 在 ma.dista.activities.newClientDiscovery.ClientDiscoveryActivity$invokeClientDiscoveryLoadEvent$1.invokeSuspend(ClientDiscoveryActivity.java:12) 在 kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(BaseContinuationImpl.java:11) 在 kotlinx.coroutines.DispatchedTask.run(DispatchedTask.java:88) 在 kotlinx.coroutines.internal.LimitedDispatcher.run(LimitedDispatcher.java:12) 在 kotlinx.coroutines.scheduling.TaskImpl.run(TaskImpl.java:2) 在 kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.java) 在 kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.java:14) 在 kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.java:28) 在 kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.java)
我想找到此问题的实际原因,而不检查过期列是否存在,因为我没有再次创建相同的集合
这可能是我们处理
expiration
列创建方式的数据竞争。
我创建了 https://issues.couchbase.com/browse/CBL-6131 来跟踪问题。
编辑: 门票现在在这里: https://jira.issues.couchbase.com/browse/CBL-6131