Control signed pre-key deletion via a dynamic configuration flag to facilitate migration

This commit is contained in:
Jon Chambers 2023-07-05 11:08:39 -04:00 committed by Jon Chambers
parent 4a91fc3c3d
commit b593d49399
4 changed files with 9 additions and 4 deletions

View File

@ -57,7 +57,7 @@ public class DynamicConfiguration {
@JsonProperty @JsonProperty
@Valid @Valid
DynamicECPreKeyMigrationConfiguration ecPreKeyMigration = new DynamicECPreKeyMigrationConfiguration(false); DynamicECPreKeyMigrationConfiguration ecPreKeyMigration = new DynamicECPreKeyMigrationConfiguration(true, false);
public Optional<DynamicExperimentEnrollmentConfiguration> getExperimentEnrollmentConfiguration( public Optional<DynamicExperimentEnrollmentConfiguration> getExperimentEnrollmentConfiguration(
final String experimentName) { final String experimentName) {

View File

@ -5,5 +5,5 @@
package org.whispersystems.textsecuregcm.configuration.dynamic; package org.whispersystems.textsecuregcm.configuration.dynamic;
public record DynamicECPreKeyMigrationConfiguration(boolean storeEcSignedPreKeys) { public record DynamicECPreKeyMigrationConfiguration(boolean deleteEcSignedPreKeys, boolean storeEcSignedPreKeys) {
} }

View File

@ -124,7 +124,9 @@ public class KeysManager {
CompletableFuture.allOf( CompletableFuture.allOf(
ecPreKeys.delete(accountUuid), ecPreKeys.delete(accountUuid),
pqPreKeys.delete(accountUuid), pqPreKeys.delete(accountUuid),
ecSignedPreKeys.delete(accountUuid), dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().deleteEcSignedPreKeys()
? ecSignedPreKeys.delete(accountUuid)
: CompletableFuture.completedFuture(null),
pqLastResortKeys.delete(accountUuid)) pqLastResortKeys.delete(accountUuid))
.join(); .join();
} }
@ -133,7 +135,9 @@ public class KeysManager {
CompletableFuture.allOf( CompletableFuture.allOf(
ecPreKeys.delete(accountUuid, deviceId), ecPreKeys.delete(accountUuid, deviceId),
pqPreKeys.delete(accountUuid, deviceId), pqPreKeys.delete(accountUuid, deviceId),
ecSignedPreKeys.delete(accountUuid, deviceId), dynamicConfigurationManager.getConfiguration().getEcPreKeyMigrationConfiguration().deleteEcSignedPreKeys()
? ecSignedPreKeys.delete(accountUuid, deviceId)
: CompletableFuture.completedFuture(null),
pqLastResortKeys.delete(accountUuid, deviceId)) pqLastResortKeys.delete(accountUuid, deviceId))
.join(); .join();
} }

View File

@ -53,6 +53,7 @@ class KeysManagerTest {
when(dynamicConfigurationManager.getConfiguration()).thenReturn(dynamicConfiguration); when(dynamicConfigurationManager.getConfiguration()).thenReturn(dynamicConfiguration);
when(dynamicConfiguration.getEcPreKeyMigrationConfiguration()).thenReturn(ecPreKeyMigrationConfiguration); when(dynamicConfiguration.getEcPreKeyMigrationConfiguration()).thenReturn(ecPreKeyMigrationConfiguration);
when(ecPreKeyMigrationConfiguration.storeEcSignedPreKeys()).thenReturn(true); when(ecPreKeyMigrationConfiguration.storeEcSignedPreKeys()).thenReturn(true);
when(ecPreKeyMigrationConfiguration.deleteEcSignedPreKeys()).thenReturn(true);
keysManager = new KeysManager( keysManager = new KeysManager(
DYNAMO_DB_EXTENSION.getDynamoDbAsyncClient(), DYNAMO_DB_EXTENSION.getDynamoDbAsyncClient(),