存储关闭后,xd.lck锁定文件不会被删除



我对xodus数据库锁定的假设是关闭实体存储将关闭数据库。

我用一个简单的例子实现了这一点,使用use模式调用close:

package whatever
import jetbrains.exodus.entitystore.Entity
import kotlinx.dnq.XdEntity
import kotlinx.dnq.XdModel
import kotlinx.dnq.XdNaturalEntityType
import kotlinx.dnq.store.container.StaticStoreContainer
import kotlinx.dnq.util.initMetaData
import kotlinx.dnq.xdRequiredStringProp
import org.junit.Test
import java.nio.file.Files
class UnclosedTest {
private val dbFolder = Files.createTempDirectory(null).toFile()
private val store = StaticStoreContainer.init(
dbFolder = dbFolder,
environmentName = "store"
).also {
XdModel.registerNodes(
Bogus
)
initMetaData(XdModel.hierarchy, it)
}
@Test
fun `lock file is removed when store is closed`() {
store.use { store ->
store.transactional {
Bogus.new {
text = "gnarf"
}
}
}
assert(dbFolder.exists())
assert(dbFolder.isDirectory)
assert(!dbFolder.resolve("xd.lck").exists())
}
class Bogus(entity: Entity) : XdEntity(entity) {
companion object : XdNaturalEntityType<Bogus>()
var text by xdRequiredStringProp()
}
}

令人惊讶的是,这个测试失败了,xd.lck文件仍然存在。

如何关闭所有资源,确保锁定文件已删除?

xd.lck文件在关闭数据库时释放,而不是删除,无论您使用哪种API:Environments、EntityStores或Xodus-DNQ-DSL。看看它是如何实现的。

最新更新