Add some DB optimizations (#6249)
* Set a maximum journal size limit (WAL file size) of 25MB The previous value was null, which meant unlimited growth. This can affect performance, since the WAL file performance as a cache will worsen the larger it is * When scheduling the vacuum task, make sure the user has enough free disk storage, since vacuuming can duplicate the DB sizes in disk
This commit is contained in:
parent
5f29446f75
commit
dc11430a73
2 changed files with 11 additions and 3 deletions
|
|
@ -7,6 +7,8 @@
|
||||||
|
|
||||||
package io.element.android.libraries.matrix.impl.storage
|
package io.element.android.libraries.matrix.impl.storage
|
||||||
|
|
||||||
|
import io.element.android.libraries.core.data.ByteUnit
|
||||||
|
import io.element.android.libraries.core.data.megaBytes
|
||||||
import io.element.android.libraries.matrix.impl.paths.SessionPaths
|
import io.element.android.libraries.matrix.impl.paths.SessionPaths
|
||||||
import org.matrix.rustcomponents.sdk.ClientBuilder
|
import org.matrix.rustcomponents.sdk.ClientBuilder
|
||||||
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder as SdkSqliteStoreBuilder
|
import org.matrix.rustcomponents.sdk.SqliteStoreBuilder as SdkSqliteStoreBuilder
|
||||||
|
|
@ -17,12 +19,12 @@ interface SqliteStoreBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
class RustSqliteStoreBuilder(
|
class RustSqliteStoreBuilder(
|
||||||
private val sessionPaths: SessionPaths,
|
sessionPaths: SessionPaths,
|
||||||
) : SqliteStoreBuilder {
|
) : SqliteStoreBuilder {
|
||||||
private var inner = SdkSqliteStoreBuilder(
|
private var inner = SdkSqliteStoreBuilder(
|
||||||
dataPath = sessionPaths.fileDirectory.absolutePath,
|
dataPath = sessionPaths.fileDirectory.absolutePath,
|
||||||
cachePath = sessionPaths.cacheDirectory.absolutePath,
|
cachePath = sessionPaths.cacheDirectory.absolutePath,
|
||||||
)
|
).journalSizeLimit(25.megaBytes.into(ByteUnit.BYTES).toUInt())
|
||||||
|
|
||||||
override fun passphrase(passphrase: String?): SqliteStoreBuilder {
|
override fun passphrase(passphrase: String?): SqliteStoreBuilder {
|
||||||
inner = inner.passphrase(passphrase)
|
inner = inner.passphrase(passphrase)
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,13 @@ class PerformDatabaseVacuumWorkManagerRequest(
|
||||||
.addTag(workManagerTag(sessionId, WorkManagerRequestType.DB_VACUUM))
|
.addTag(workManagerTag(sessionId, WorkManagerRequestType.DB_VACUUM))
|
||||||
.setInputData(data)
|
.setInputData(data)
|
||||||
// Only run when the device is idle to avoid impacting user experience
|
// Only run when the device is idle to avoid impacting user experience
|
||||||
.setConstraints(Constraints.Builder().setRequiresDeviceIdle(true).build())
|
.setConstraints(
|
||||||
|
Constraints.Builder()
|
||||||
|
.setRequiresDeviceIdle(true)
|
||||||
|
// Vacuuming can duplicate the DB sizes in disk
|
||||||
|
.setRequiresStorageNotLow(true)
|
||||||
|
.build()
|
||||||
|
)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
return Result.success(listOf(workRequest))
|
return Result.success(listOf(workRequest))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue