Merge pull request #5755 from element-hq/feature/bma/cleanupDb

Remove unused `slidingSyncProxy` from DB.
This commit is contained in:
Benoit Marty 2025-11-18 17:42:09 +01:00 committed by GitHub
commit b54b077125
14 changed files with 43 additions and 37 deletions

View file

@ -39,7 +39,6 @@ class DefaultMessageParser(
accessToken = accessToken, accessToken = accessToken,
deviceId = deviceId, deviceId = deviceId,
refreshToken = null, refreshToken = null,
slidingSyncProxy = null
) )
} }
} }

View file

@ -84,5 +84,4 @@ internal fun anExternalSession(
accessToken = "access_token", accessToken = "access_token",
deviceId = "device_id", deviceId = "device_id",
refreshToken = null, refreshToken = null,
slidingSyncProxy = null
) )

View file

@ -37,7 +37,6 @@ private fun aSessionData(
refreshToken = "aRefreshToken", refreshToken = "aRefreshToken",
homeserverUrl = "aHomeserverUrl", homeserverUrl = "aHomeserverUrl",
oidcData = null, oidcData = null,
slidingSyncProxy = null,
loginTimestamp = null, loginTimestamp = null,
isTokenValid = isTokenValid, isTokenValid = isTokenValid,
loginType = LoginType.UNKNOWN, loginType = LoginType.UNKNOWN,

View file

@ -17,5 +17,4 @@ data class ExternalSession(
val accessToken: String, val accessToken: String,
val refreshToken: String?, val refreshToken: String?,
val homeserverUrl: String, val homeserverUrl: String,
val slidingSyncProxy: String?
) )

View file

@ -28,7 +28,6 @@ internal fun Session.toSessionData(
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl ?: this.homeserverUrl, homeserverUrl = homeserverUrl ?: this.homeserverUrl,
oidcData = oidcData, oidcData = oidcData,
slidingSyncProxy = null,
loginTimestamp = Date(), loginTimestamp = Date(),
isTokenValid = isTokenValid, isTokenValid = isTokenValid,
loginType = loginType, loginType = loginType,
@ -54,7 +53,6 @@ internal fun ExternalSession.toSessionData(
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
oidcData = null, oidcData = null,
slidingSyncProxy = slidingSyncProxy,
loginTimestamp = Date(), loginTimestamp = Date(),
isTokenValid = isTokenValid, isTokenValid = isTokenValid,
loginType = loginType, loginType = loginType,

View file

@ -19,7 +19,6 @@ import io.element.android.libraries.matrix.test.A_SECRET
import io.element.android.libraries.matrix.test.A_USER_ID import io.element.android.libraries.matrix.test.A_USER_ID
import io.element.android.libraries.sessionstorage.api.LoginType import io.element.android.libraries.sessionstorage.api.LoginType
import org.junit.Test import org.junit.Test
import org.matrix.rustcomponents.sdk.SlidingSyncVersion
import java.io.File import java.io.File
class SessionKtTest { class SessionKtTest {
@ -38,7 +37,6 @@ class SessionKtTest {
assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL) assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL)
assertThat(result.isTokenValid).isTrue() assertThat(result.isTokenValid).isTrue()
assertThat(result.oidcData).isNull() assertThat(result.oidcData).isNull()
assertThat(result.slidingSyncProxy).isNull()
assertThat(result.loginType).isEqualTo(LoginType.PASSWORD) assertThat(result.loginType).isEqualTo(LoginType.PASSWORD)
assertThat(result.loginTimestamp).isNotNull() assertThat(result.loginTimestamp).isNotNull()
assertThat(result.passphrase).isEqualTo(A_SECRET) assertThat(result.passphrase).isEqualTo(A_SECRET)
@ -70,20 +68,6 @@ class SessionKtTest {
assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL_2) assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL_2)
} }
@Test
fun `toSessionData copy the sliding sync url if present`() {
val result = aRustSession(
proxy = SlidingSyncVersion.NATIVE
).toSessionData(
isTokenValid = true,
loginType = LoginType.PASSWORD,
passphrase = A_SECRET,
sessionPaths = SessionPaths(File("/a/file"), File("/a/cache")),
homeserverUrl = A_HOMESERVER_URL_2,
)
assertThat(result.slidingSyncProxy).isNull()
}
@Test @Test
fun `ExternalSession toSessionData compute the expected result`() { fun `ExternalSession toSessionData compute the expected result`() {
val result = anExternalSession().toSessionData( val result = anExternalSession().toSessionData(
@ -99,7 +83,6 @@ class SessionKtTest {
assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL) assertThat(result.homeserverUrl).isEqualTo(A_HOMESERVER_URL)
assertThat(result.isTokenValid).isTrue() assertThat(result.isTokenValid).isTrue()
assertThat(result.oidcData).isNull() assertThat(result.oidcData).isNull()
assertThat(result.slidingSyncProxy).isNull()
assertThat(result.loginType).isEqualTo(LoginType.PASSWORD) assertThat(result.loginType).isEqualTo(LoginType.PASSWORD)
assertThat(result.loginTimestamp).isNotNull() assertThat(result.loginTimestamp).isNotNull()
assertThat(result.passphrase).isEqualTo(A_SECRET) assertThat(result.passphrase).isEqualTo(A_SECRET)
@ -125,12 +108,10 @@ private fun anExternalSession(
accessToken: String = "accessToken", accessToken: String = "accessToken",
refreshToken: String? = null, refreshToken: String? = null,
homeserverUrl: String = A_HOMESERVER_URL, homeserverUrl: String = A_HOMESERVER_URL,
slidingSyncProxy: String? = null,
) = ExternalSession( ) = ExternalSession(
userId = userId, userId = userId,
deviceId = deviceId, deviceId = deviceId,
accessToken = accessToken, accessToken = accessToken,
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
slidingSyncProxy = slidingSyncProxy,
) )

View file

@ -26,8 +26,6 @@ data class SessionData(
val homeserverUrl: String, val homeserverUrl: String,
/** The Open ID Connect info for this session, if any. */ /** The Open ID Connect info for this session, if any. */
val oidcData: String?, val oidcData: String?,
/** The Sliding Sync Proxy URL for this session, if any. */
val slidingSyncProxy: String?,
/** The timestamp of the last login. May be `null` in very old sessions. */ /** The timestamp of the last login. May be `null` in very old sessions. */
val loginTimestamp: Date?, val loginTimestamp: Date?,
/** Whether the [accessToken] is valid or not. */ /** Whether the [accessToken] is valid or not. */

View file

@ -21,7 +21,6 @@ internal fun SessionData.toDbModel(): DbSessionData {
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
oidcData = oidcData, oidcData = oidcData,
slidingSyncProxy = slidingSyncProxy,
loginTimestamp = loginTimestamp?.time, loginTimestamp = loginTimestamp?.time,
isTokenValid = if (isTokenValid) 1L else 0L, isTokenValid = if (isTokenValid) 1L else 0L,
loginType = loginType.name, loginType = loginType.name,
@ -43,7 +42,6 @@ internal fun DbSessionData.toApiModel(): SessionData {
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = homeserverUrl, homeserverUrl = homeserverUrl,
oidcData = oidcData, oidcData = oidcData,
slidingSyncProxy = slidingSyncProxy,
loginTimestamp = loginTimestamp?.let { Date(it) }, loginTimestamp = loginTimestamp?.let { Date(it) },
isTokenValid = isTokenValid == 1L, isTokenValid = isTokenValid == 1L,
loginType = LoginType.fromName(loginType ?: LoginType.UNKNOWN.name), loginType = LoginType.fromName(loginType ?: LoginType.UNKNOWN.name),

View file

@ -14,7 +14,6 @@ CREATE TABLE SessionData (
accessToken TEXT NOT NULL, accessToken TEXT NOT NULL,
refreshToken TEXT, refreshToken TEXT,
homeserverUrl TEXT NOT NULL, homeserverUrl TEXT NOT NULL,
slidingSyncProxy TEXT,
-- added in version 2 -- added in version 2
loginTimestamp INTEGER, loginTimestamp INTEGER,
-- added in version 3 -- added in version 3

View file

@ -0,0 +1,43 @@
-- Migrate DB from version 10
-- Remove field slidingSyncProxy
-- Equivalent to (DROP not supported by sqldelight):
-- ALTER TABLE SessionData DROP slidingSyncProxy;
CREATE TABLE SessionData_bak (
userId TEXT NOT NULL PRIMARY KEY,
deviceId TEXT NOT NULL,
accessToken TEXT NOT NULL,
refreshToken TEXT,
homeserverUrl TEXT NOT NULL,
loginTimestamp INTEGER,
oidcData TEXT,
isTokenValid INTEGER NOT NULL DEFAULT 1,
loginType TEXT,
passphrase TEXT,
sessionPath TEXT NOT NULL DEFAULT "",
cachePath TEXT NOT NULL DEFAULT "",
position INTEGER NOT NULL DEFAULT 0,
lastUsageIndex INTEGER NOT NULL DEFAULT 0,
userDisplayName TEXT,
userAvatarUrl TEXT
);
INSERT INTO SessionData_bak SELECT
userId,
deviceId,
accessToken,
refreshToken,
homeserverUrl,
loginTimestamp,
oidcData,
isTokenValid,
loginType,
passphrase,
sessionPath,
cachePath,
position,
lastUsageIndex,
userDisplayName,
userAvatarUrl FROM SessionData;
DROP TABLE SessionData;
ALTER TABLE SessionData_bak RENAME TO SessionData;

View file

@ -220,7 +220,6 @@ class DatabaseSessionStoreTest {
accessToken = "accessToken", accessToken = "accessToken",
refreshToken = "refreshToken", refreshToken = "refreshToken",
homeserverUrl = "homeserverUrl", homeserverUrl = "homeserverUrl",
slidingSyncProxy = "slidingSyncProxy",
loginTimestamp = 1, loginTimestamp = 1,
oidcData = "aOidcData", oidcData = "aOidcData",
isTokenValid = 1, isTokenValid = 1,
@ -239,7 +238,6 @@ class DatabaseSessionStoreTest {
accessToken = "accessTokenAltered", accessToken = "accessTokenAltered",
refreshToken = "refreshTokenAltered", refreshToken = "refreshTokenAltered",
homeserverUrl = "homeserverUrlAltered", homeserverUrl = "homeserverUrlAltered",
slidingSyncProxy = "slidingSyncProxyAltered",
loginTimestamp = 2, loginTimestamp = 2,
oidcData = "aOidcDataAltered", oidcData = "aOidcDataAltered",
isTokenValid = 1, isTokenValid = 1,
@ -266,7 +264,6 @@ class DatabaseSessionStoreTest {
assertThat(alteredSession.accessToken).isEqualTo(secondSessionData.accessToken) assertThat(alteredSession.accessToken).isEqualTo(secondSessionData.accessToken)
assertThat(alteredSession.refreshToken).isEqualTo(secondSessionData.refreshToken) assertThat(alteredSession.refreshToken).isEqualTo(secondSessionData.refreshToken)
assertThat(alteredSession.homeserverUrl).isEqualTo(secondSessionData.homeserverUrl) assertThat(alteredSession.homeserverUrl).isEqualTo(secondSessionData.homeserverUrl)
assertThat(alteredSession.slidingSyncProxy).isEqualTo(secondSessionData.slidingSyncProxy)
// Check that alteredSession.loginTimestamp is not altered, so equal to firstSessionData.loginTimestamp // Check that alteredSession.loginTimestamp is not altered, so equal to firstSessionData.loginTimestamp
assertThat(alteredSession.loginTimestamp).isEqualTo(firstSessionData.loginTimestamp) assertThat(alteredSession.loginTimestamp).isEqualTo(firstSessionData.loginTimestamp)
assertThat(alteredSession.oidcData).isEqualTo(secondSessionData.oidcData) assertThat(alteredSession.oidcData).isEqualTo(secondSessionData.oidcData)
@ -286,7 +283,6 @@ class DatabaseSessionStoreTest {
accessToken = "accessToken", accessToken = "accessToken",
refreshToken = "refreshToken", refreshToken = "refreshToken",
homeserverUrl = "homeserverUrl", homeserverUrl = "homeserverUrl",
slidingSyncProxy = "slidingSyncProxy",
loginTimestamp = 1, loginTimestamp = 1,
oidcData = "aOidcData", oidcData = "aOidcData",
isTokenValid = 1, isTokenValid = 1,
@ -305,7 +301,6 @@ class DatabaseSessionStoreTest {
accessToken = "accessTokenAltered", accessToken = "accessTokenAltered",
refreshToken = "refreshTokenAltered", refreshToken = "refreshTokenAltered",
homeserverUrl = "homeserverUrlAltered", homeserverUrl = "homeserverUrlAltered",
slidingSyncProxy = "slidingSyncProxyAltered",
loginTimestamp = 2, loginTimestamp = 2,
oidcData = "aOidcDataAltered", oidcData = "aOidcDataAltered",
isTokenValid = 1, isTokenValid = 1,

View file

@ -19,7 +19,6 @@ internal fun aDbSessionData(
accessToken = "accessToken", accessToken = "accessToken",
refreshToken = "refreshToken", refreshToken = "refreshToken",
homeserverUrl = "homeserverUrl", homeserverUrl = "homeserverUrl",
slidingSyncProxy = null,
loginTimestamp = null, loginTimestamp = null,
oidcData = "aOidcData", oidcData = "aOidcData",
isTokenValid = 1, isTokenValid = 1,

View file

@ -31,7 +31,6 @@ fun aSessionData(
refreshToken = refreshToken, refreshToken = refreshToken,
homeserverUrl = "aHomeserverUrl", homeserverUrl = "aHomeserverUrl",
oidcData = null, oidcData = null,
slidingSyncProxy = null,
loginTimestamp = null, loginTimestamp = null,
isTokenValid = isTokenValid, isTokenValid = isTokenValid,
loginType = LoginType.UNKNOWN, loginType = LoginType.UNKNOWN,