mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 16:10:00 +00:00
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:
committed by
GitHub
parent
a63bc8a88d
commit
798f23316b
+4
-2
@@ -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)
|
||||||
|
|||||||
+7
-1
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user