diff --git a/synapse/storage/e2e_room_keys.py b/synapse/storage/e2e_room_keys.py
index 994878acf6..8efca11a8c 100644
--- a/synapse/storage/e2e_room_keys.py
+++ b/synapse/storage/e2e_room_keys.py
@@ -172,7 +172,7 @@ class EndToEndRoomKeyStore(SQLBaseStore):
)
@defer.inlineCallbacks
- def get_e2e_room_key_version(self, user_id, version):
+ def get_e2e_room_key_version_info(self, user_id, version):
row = yield self._simple_select_one(
table="e2e_room_key_versions",
@@ -191,23 +191,35 @@ class EndToEndRoomKeyStore(SQLBaseStore):
defer.returnValue(row)
- def create_e2e_room_key_version(self, user_id, version, info):
+ def create_e2e_room_key_version(self, user_id, info):
+ """Atomically creates a new version of this user's e2e_room_keys store
+ with the given version info.
+ """
def _create_e2e_room_key_version_txn(txn):
+ txn.execute(
+ "SELECT MAX(version) FROM e2e_room_key_versions WHERE user_id=?",
+ (user_id,)
+ )
+ current_version = txn.fetchone()[0]
+ if current_version is None:
+ current_version = 0
+
+ new_version = current_version + 1
+
self._simple_insert_txn(
txn,
table="e2e_room_key_versions",
values={
"user_id": user_id,
- "version": version,
+ "version": new_version,
"algorithm": info["algorithm"],
"auth_data": info["auth_data"],
},
- lock=False,
)
- return True
+ return new_version
return self.runInteraction(
"create_e2e_room_key_version_txn", _create_e2e_room_key_version_txn
diff --git a/synapse/storage/schema/delta/46/e2e_room_keys.sql b/synapse/storage/schema/delta/46/e2e_room_keys.sql
index 463f828c66..0d2a85fbe6 100644
--- a/synapse/storage/schema/delta/46/e2e_room_keys.sql
+++ b/synapse/storage/schema/delta/46/e2e_room_keys.sql
@@ -18,7 +18,7 @@ CREATE TABLE e2e_room_keys (
user_id TEXT NOT NULL,
room_id TEXT NOT NULL,
session_id TEXT NOT NULL,
- version INT NOT NULL,
+ version TEXT NOT NULL,
first_message_index INT,
forwarded_count INT,
is_verified BOOLEAN,
@@ -32,7 +32,7 @@ CREATE UNIQUE INDEX e2e_room_keys_session_idx ON e2e_room_keys(session_id);
-- the metadata for each generation of encrypted e2e session backups
CREATE TABLE e2e_room_key_versions (
user_id TEXT NOT NULL,
- version INT NOT NULL,
+ version TEXT NOT NULL,
algorithm TEXT NOT NULL,
auth_data TEXT NOT NULL
);
|