diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index 9208d9a82..644d0b4c7 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -292,6 +292,7 @@ public class AccountsManager { final UUID uuid = account.getUuid(); final String originalNumber = account.getNumber(); + final UUID originalPhoneNumberIdentifier = account.getPhoneNumberIdentifier(); updatedAccount = updateWithRetries(account, updater, @@ -305,6 +306,13 @@ public class AccountsManager { new RuntimeException()); } + assert updatedAccount.getPhoneNumberIdentifier().equals(originalPhoneNumberIdentifier); + + if (!updatedAccount.getPhoneNumberIdentifier().equals(originalPhoneNumberIdentifier)) { + logger.error("Phone number identifier changed via \"normal\" update; PNIs must be changed via changeNumber method", + new RuntimeException()); + } + redisSet(updatedAccount); } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java index c37c3971e..5df767be7 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java @@ -355,18 +355,19 @@ class AccountsManagerTest { @Test void testUpdate_optimisticLockingFailure() { UUID uuid = UUID.randomUUID(); - Account account = new Account("+14152222222", uuid, UUID.randomUUID(), new HashSet<>(), new byte[16]); + UUID pni = UUID.randomUUID(); + Account account = new Account("+14152222222", uuid, pni, new HashSet<>(), new byte[16]); when(commands.get(eq("Account3::" + uuid))).thenReturn(null); when(accounts.getByAccountIdentifier(uuid)).thenReturn( - Optional.of(new Account("+14152222222", uuid, UUID.randomUUID(), new HashSet<>(), new byte[16]))); + Optional.of(new Account("+14152222222", uuid, pni, new HashSet<>(), new byte[16]))); doThrow(ContestedOptimisticLockException.class) .doAnswer(ACCOUNT_UPDATE_ANSWER) .when(accounts).update(any()); when(accounts.getByAccountIdentifier(uuid)).thenReturn( - Optional.of(new Account("+14152222222", uuid, UUID.randomUUID(), new HashSet<>(), new byte[16]))); + Optional.of(new Account("+14152222222", uuid, pni, new HashSet<>(), new byte[16]))); doThrow(ContestedOptimisticLockException.class) .doAnswer(ACCOUNT_UPDATE_ANSWER) .when(accounts).update(any());