diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java index 5cb88e7c0..5976db2c4 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/ActiveUserTally.java @@ -19,11 +19,10 @@ package org.whispersystems.textsecuregcm.entities; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Map; import java.util.HashMap; -import java.util.UUID; public class ActiveUserTally { @JsonProperty - private UUID fromUuid; + private String fromNumber; @JsonProperty private Map platforms; @@ -33,14 +32,14 @@ public class ActiveUserTally { public ActiveUserTally() {} - public ActiveUserTally(UUID fromUuid, Map platforms, Map countries) { - this.fromUuid = fromUuid; + public ActiveUserTally(String fromNumber, Map platforms, Map countries) { + this.fromNumber = fromNumber; this.platforms = platforms; this.countries = countries; } - public UUID getFromUuid() { - return this.fromUuid; + public String getFromNumber() { + return this.fromNumber; } public Map getPlatforms() { @@ -51,8 +50,8 @@ public class ActiveUserTally { return this.countries; } - public void setFromUuid(UUID fromUuid) { - this.fromUuid = fromUuid; + public void setFromNumber(String fromNumber) { + this.fromNumber = fromNumber; } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java index bea0b34d0..2731347eb 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/entities/DirectoryReconciliationRequest.java @@ -19,18 +19,14 @@ package org.whispersystems.textsecuregcm.entities; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.List; -import java.util.UUID; public class DirectoryReconciliationRequest { @JsonProperty - private UUID fromUuid; + private String fromNumber; @JsonProperty - private UUID toUuid; - - @JsonProperty - private List uuids; + private String toNumber; @JsonProperty private List numbers; @@ -38,23 +34,18 @@ public class DirectoryReconciliationRequest { public DirectoryReconciliationRequest() { } - public DirectoryReconciliationRequest(UUID fromUuid, UUID toUuid, List uuids, List numbers) { - this.fromUuid = fromUuid; - this.toUuid = toUuid; - this.uuids = uuids; - this.numbers = numbers; + public DirectoryReconciliationRequest(String fromNumber, String toNumber, List numbers) { + this.fromNumber = fromNumber; + this.toNumber = toNumber; + this.numbers = numbers; } - public UUID getFromUuid() { - return fromUuid; + public String getFromNumber() { + return fromNumber; } - public UUID getToUuid() { - return toUuid; - } - - public List getUuids() { - return uuids; + public String getToNumber() { + return toNumber; } public List getNumbers() { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountCleaner.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountCleaner.java index cf68231aa..066ecb222 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountCleaner.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountCleaner.java @@ -26,7 +26,6 @@ import org.whispersystems.textsecuregcm.util.Util; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; import static com.codahale.metrics.MetricRegistry.name; @@ -52,7 +51,7 @@ public class AccountCleaner implements AccountDatabaseCrawlerListener { } @Override - public void onCrawlChunk(Optional fromUuid, List chunkAccounts) { + public void onCrawlChunk(Optional fromNumber, List chunkAccounts) { int accountUpdateCount = 0; for (Account account : chunkAccounts) { if (needsExplicitRemoval(account)) { @@ -75,7 +74,7 @@ public class AccountCleaner implements AccountDatabaseCrawlerListener { } @Override - public void onCrawlEnd(Optional fromUuid) { + public void onCrawlEnd(Optional fromNumber) { } private boolean needsExplicitRemoval(Account account) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java index 93d08d679..80cf9cc74 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawler.java @@ -122,26 +122,26 @@ public class AccountDatabaseCrawler implements Managed, Runnable { } private void processChunk() { - Optional fromUuid = cache.getLastUuid(); + Optional fromNumber = cache.getLastNumber(); - if (!fromUuid.isPresent()) { - listeners.forEach(AccountDatabaseCrawlerListener::onCrawlStart); + if (!fromNumber.isPresent()) { + listeners.forEach(listener -> { listener.onCrawlStart(); }); } - List chunkAccounts = readChunk(fromUuid, chunkSize); + List chunkAccounts = readChunk(fromNumber, chunkSize); if (chunkAccounts.isEmpty()) { - listeners.forEach(listener -> listener.onCrawlEnd(fromUuid)); - cache.setLastUuid(Optional.empty()); + listeners.forEach(listener -> { listener.onCrawlEnd(fromNumber); }); + cache.setLastNumber(Optional.empty()); cache.clearAccelerate(); } else { try { for (AccountDatabaseCrawlerListener listener : listeners) { - listener.onCrawlChunk(fromUuid, chunkAccounts); + listener.onCrawlChunk(fromNumber, chunkAccounts); } - cache.setLastUuid(Optional.of(chunkAccounts.get(chunkAccounts.size() - 1).getUuid())); + cache.setLastNumber(Optional.of(chunkAccounts.get(chunkAccounts.size() - 1).getNumber())); } catch (AccountDatabaseCrawlerRestartException e) { - cache.setLastUuid(Optional.empty()); + cache.setLastNumber(Optional.empty()); cache.clearAccelerate(); } @@ -149,12 +149,12 @@ public class AccountDatabaseCrawler implements Managed, Runnable { } - private List readChunk(Optional fromUuid, int chunkSize) { + private List readChunk(Optional fromNumber, int chunkSize) { try (Timer.Context timer = readChunkTimer.time()) { List chunkAccounts; - if (fromUuid.isPresent()) { - chunkAccounts = accounts.getAllFrom(fromUuid.get(), chunkSize); + if (fromNumber.isPresent()) { + chunkAccounts = accounts.getAllFrom(fromNumber.get(), chunkSize); } else { chunkAccounts = accounts.getAllFrom(chunkSize); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java index 4b1402b1a..abd578c12 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerCache.java @@ -23,7 +23,6 @@ import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.UUID; import redis.clients.jedis.Jedis; @@ -31,7 +30,7 @@ import redis.clients.jedis.Jedis; public class AccountDatabaseCrawlerCache { private static final String ACTIVE_WORKER_KEY = "account_database_crawler_cache_active_worker"; - private static final String LAST_UUID_KEY = "account_database_crawler_cache_last_uuid"; + private static final String LAST_NUMBER_KEY = "account_database_crawler_cache_last_number"; private static final String ACCELERATE_KEY = "account_database_crawler_cache_accelerate"; private static final long LAST_NUMBER_TTL_MS = 86400_000L; @@ -68,21 +67,18 @@ public class AccountDatabaseCrawlerCache { luaScript.execute(keys, args); } - public Optional getLastUuid() { + public Optional getLastNumber() { try (Jedis jedis = jedisPool.getWriteResource()) { - String lastUuidString = jedis.get(LAST_UUID_KEY); - - if (lastUuidString == null) return Optional.empty(); - else return Optional.of(UUID.fromString(lastUuidString)); + return Optional.ofNullable(jedis.get(LAST_NUMBER_KEY)); } } - public void setLastUuid(Optional lastUuid) { + public void setLastNumber(Optional lastNumber) { try (Jedis jedis = jedisPool.getWriteResource()) { - if (lastUuid.isPresent()) { - jedis.psetex(LAST_UUID_KEY, LAST_NUMBER_TTL_MS, lastUuid.get().toString()); + if (lastNumber.isPresent()) { + jedis.psetex(LAST_NUMBER_KEY, LAST_NUMBER_TTL_MS, lastNumber.get()); } else { - jedis.del(LAST_UUID_KEY); + jedis.del(LAST_NUMBER_KEY); } } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java index 590f61c38..0ffb673a1 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountDatabaseCrawlerListener.java @@ -18,11 +18,10 @@ package org.whispersystems.textsecuregcm.storage; import java.util.List; import java.util.Optional; -import java.util.UUID; @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public interface AccountDatabaseCrawlerListener { void onCrawlStart(); - void onCrawlChunk(Optional fromUuid, List chunkAccounts) throws AccountDatabaseCrawlerRestartException; - void onCrawlEnd(Optional fromUuid); + void onCrawlChunk(Optional fromNumber, List chunkAccounts) throws AccountDatabaseCrawlerRestartException; + void onCrawlEnd(Optional fromNumber); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java index 89a5a6417..df6b9b553 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/Accounts.java @@ -110,10 +110,10 @@ public class Accounts { })); } - public List getAllFrom(UUID from, int length) { + public List getAllFrom(String from, int length) { return database.with(jdbi -> jdbi.withHandle(handle -> { try (Timer.Context ignored = getAllFromOffsetTimer.time()) { - return handle.createQuery("SELECT * FROM accounts WHERE " + UID + " > :from ORDER BY " + UID + " LIMIT :limit") + return handle.createQuery("SELECT * FROM accounts WHERE " + NUMBER + " > :from ORDER BY " + NUMBER + " LIMIT :limit") .bind("from", from) .bind("limit", length) .mapTo(Account.class) @@ -125,7 +125,7 @@ public class Accounts { public List getAllFrom(int length) { return database.with(jdbi -> jdbi.withHandle(handle -> { try (Timer.Context ignored = getAllFromTimer.time()) { - return handle.createQuery("SELECT * FROM accounts ORDER BY " + UID + " LIMIT :limit") + return handle.createQuery("SELECT * FROM accounts ORDER BY " + NUMBER + " LIMIT :limit") .bind("limit", length) .mapTo(Account.class) .list(); 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 38b07866d..24044c295 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -121,8 +121,8 @@ public class AccountsManager { return accounts.getAllFrom(length); } - public List getAllFrom(UUID uuid, int length) { - return accounts.getAllFrom(uuid, length); + public List getAllFrom(String number, int length) { + return accounts.getAllFrom(number, length); } private void updateDirectory(Account account) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java index 099cae5d5..5c84baf7d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/ActiveUserCounter.java @@ -30,7 +30,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; import io.dropwizard.metrics.MetricsFactory; @@ -44,6 +43,8 @@ public class ActiveUserCounter implements AccountDatabaseCrawlerListener { private static final String PLATFORM_IOS = "ios"; private static final String PLATFORM_ANDROID = "android"; + private static final String FIRST_FROM_NUMBER = "+"; + private static final String INTERVALS[] = {"daily", "weekly", "monthly", "quarterly", "yearly"}; private final MetricsFactory metricsFactory; @@ -63,7 +64,7 @@ public class ActiveUserCounter implements AccountDatabaseCrawlerListener { } @Override - public void onCrawlChunk(Optional fromNumber, List chunkAccounts) { + public void onCrawlChunk(Optional fromNumber, List chunkAccounts) { long nowDays = TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()); long agoMs[] = {TimeUnit.DAYS.toMillis(nowDays - 1), TimeUnit.DAYS.toMillis(nowDays - 7), @@ -106,11 +107,12 @@ public class ActiveUserCounter implements AccountDatabaseCrawlerListener { } } - incrementTallies(fromNumber.orElse(UUID.randomUUID()), platformIncrements, countryIncrements); + incrementTallies(fromNumber.orElse(FIRST_FROM_NUMBER), platformIncrements, countryIncrements); + } @Override - public void onCrawlEnd(Optional fromNumber) { + public void onCrawlEnd(Optional fromNumber) { MetricRegistry metrics = new MetricRegistry(); long intervalTallies[] = new long[INTERVALS.length]; ActiveUserTally activeUserTally = getFinalTallies(); @@ -154,18 +156,17 @@ public class ActiveUserCounter implements AccountDatabaseCrawlerListener { return tally; } - private void incrementTallies(UUID fromUuid, Map platformIncrements, Map countryIncrements) { + private void incrementTallies(String fromNumber, Map platformIncrements, Map countryIncrements) { try (Jedis jedis = jedisPool.getWriteResource()) { String tallyValue = jedis.get(TALLY_KEY); ActiveUserTally activeUserTally; if (tallyValue == null) { - activeUserTally = new ActiveUserTally(fromUuid, platformIncrements, countryIncrements); + activeUserTally = new ActiveUserTally(fromNumber, platformIncrements, countryIncrements); } else { activeUserTally = mapper.readValue(tallyValue, ActiveUserTally.class); - - if (!fromUuid.equals(activeUserTally.getFromUuid())) { - activeUserTally.setFromUuid(fromUuid); + if (activeUserTally.getFromNumber() != fromNumber) { + activeUserTally.setFromNumber(fromNumber); Map platformTallies = activeUserTally.getPlatforms(); addTallyMaps(platformTallies, platformIncrements); Map countryTallies = activeUserTally.getCountries(); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java index 18b57c0e9..e83c0f7e0 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryReconciler.java @@ -30,12 +30,9 @@ import org.whispersystems.textsecuregcm.util.Constants; import org.whispersystems.textsecuregcm.util.Util; import javax.ws.rs.ProcessingException; - -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.stream.Collectors; import static com.codahale.metrics.MetricRegistry.name; @@ -58,16 +55,16 @@ public class DirectoryReconciler implements AccountDatabaseCrawlerListener { public void onCrawlStart() { } - public void onCrawlEnd(Optional fromUuid) { - DirectoryReconciliationRequest request = new DirectoryReconciliationRequest(fromUuid.orElse(null), null, Collections.emptyList(), Collections.emptyList()); + public void onCrawlEnd(Optional fromNumber) { + DirectoryReconciliationRequest request = new DirectoryReconciliationRequest(fromNumber.orElse(null), null, Collections.emptyList()); DirectoryReconciliationResponse response = sendChunk(request); } - public void onCrawlChunk(Optional fromUuid, List chunkAccounts) throws AccountDatabaseCrawlerRestartException { + public void onCrawlChunk(Optional fromNumber, List chunkAccounts) throws AccountDatabaseCrawlerRestartException { updateDirectoryCache(chunkAccounts); - DirectoryReconciliationRequest request = createChunkRequest(fromUuid, chunkAccounts); + DirectoryReconciliationRequest request = createChunkRequest(fromNumber, chunkAccounts); DirectoryReconciliationResponse response = sendChunk(request); if (response.getStatus() == DirectoryReconciliationResponse.Status.MISSING) { throw new AccountDatabaseCrawlerRestartException("directory reconciler missing"); @@ -94,23 +91,19 @@ public class DirectoryReconciler implements AccountDatabaseCrawlerListener { } @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - private DirectoryReconciliationRequest createChunkRequest(Optional fromUuid, List accounts) { - List uuids = new ArrayList<>(accounts.size()); - List numbers = new ArrayList<>(accounts.size()); - for (Account account : accounts) { - if (account.isEnabled()) { - uuids.add(account.getUuid()); - numbers.add(account.getNumber()); - } - } + private DirectoryReconciliationRequest createChunkRequest(Optional fromNumber, List accounts) { + List numbers = accounts.stream() + .filter(Account::isEnabled) + .map(Account::getNumber) + .collect(Collectors.toList()); - Optional toUuid = Optional.empty(); + Optional toNumber = Optional.empty(); if (!accounts.isEmpty()) { - toUuid = Optional.of(accounts.get(accounts.size() - 1).getUuid()); + toNumber = Optional.of(accounts.get(accounts.size() - 1).getNumber()); } - return new DirectoryReconciliationRequest(fromUuid.orElse(null), toUuid.orElse(null), uuids, numbers); + return new DirectoryReconciliationRequest(fromNumber.orElse(null), toNumber.orElse(null), numbers); } private DirectoryReconciliationResponse sendChunk(DirectoryReconciliationRequest request) { diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/PushFeedbackProcessor.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PushFeedbackProcessor.java index fd3d6ceb8..1464dff66 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/PushFeedbackProcessor.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/PushFeedbackProcessor.java @@ -9,7 +9,6 @@ import org.whispersystems.textsecuregcm.util.Util; import java.util.List; import java.util.Optional; -import java.util.UUID; import java.util.concurrent.TimeUnit; import static com.codahale.metrics.MetricRegistry.name; @@ -32,7 +31,7 @@ public class PushFeedbackProcessor implements AccountDatabaseCrawlerListener { public void onCrawlStart() {} @Override - public void onCrawlChunk(Optional fromUuid, List chunkAccounts) { + public void onCrawlChunk(Optional fromNumber, List chunkAccounts) { for (Account account : chunkAccounts) { boolean update = false; @@ -66,5 +65,5 @@ public class PushFeedbackProcessor implements AccountDatabaseCrawlerListener { } @Override - public void onCrawlEnd(Optional toUuid) {} + public void onCrawlEnd(Optional fromNumber) {} } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java index 1ce7ef08a..8e31a6c19 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountDatabaseCrawlerTest.java @@ -29,7 +29,6 @@ import org.whispersystems.textsecuregcm.storage.AccountsManager; import java.util.Arrays; import java.util.Collections; import java.util.Optional; -import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -40,8 +39,8 @@ import static org.mockito.Mockito.*; public class AccountDatabaseCrawlerTest { - private static final UUID ACCOUNT1 = UUID.randomUUID(); - private static final UUID ACCOUNT2 = UUID.randomUUID(); + private static final String ACCOUNT1 = "+1"; + private static final String ACCOUNT2 = "+2"; private static final int CHUNK_SIZE = 1000; private static final long CHUNK_INTERVAL_MS = 30_000L; @@ -57,8 +56,8 @@ public class AccountDatabaseCrawlerTest { @Before public void setup() { - when(account1.getUuid()).thenReturn(ACCOUNT1); - when(account2.getUuid()).thenReturn(ACCOUNT2); + when(account1.getNumber()).thenReturn(ACCOUNT1); + when(account2.getNumber()).thenReturn(ACCOUNT2); when(accounts.getAllFrom(anyInt())).thenReturn(Arrays.asList(account1, account2)); when(accounts.getAllFrom(eq(ACCOUNT1), anyInt())).thenReturn(Arrays.asList(account2)); @@ -70,20 +69,20 @@ public class AccountDatabaseCrawlerTest { @Test public void testCrawlStart() throws AccountDatabaseCrawlerRestartException { - when(cache.getLastUuid()).thenReturn(Optional.empty()); + when(cache.getLastNumber()).thenReturn(Optional.empty()); boolean accelerated = crawler.doPeriodicWork(); assertThat(accelerated).isFalse(); verify(cache, times(1)).claimActiveWork(any(String.class), anyLong()); - verify(cache, times(1)).getLastUuid(); + verify(cache, times(1)).getLastNumber(); verify(listener, times(1)).onCrawlStart(); verify(accounts, times(1)).getAllFrom(eq(CHUNK_SIZE)); - verify(accounts, times(0)).getAllFrom(any(UUID.class), eq(CHUNK_SIZE)); - verify(account1, times(0)).getUuid(); - verify(account2, times(1)).getUuid(); + verify(accounts, times(0)).getAllFrom(any(String.class), eq(CHUNK_SIZE)); + verify(account1, times(0)).getNumber(); + verify(account2, times(1)).getNumber(); verify(listener, times(1)).onCrawlChunk(eq(Optional.empty()), eq(Arrays.asList(account1, account2))); - verify(cache, times(1)).setLastUuid(eq(Optional.of(ACCOUNT2))); + verify(cache, times(1)).setLastNumber(eq(Optional.of(ACCOUNT2))); verify(cache, times(1)).isAccelerated(); verify(cache, times(1)).releaseActiveWork(any(String.class)); @@ -96,18 +95,18 @@ public class AccountDatabaseCrawlerTest { @Test public void testCrawlChunk() throws AccountDatabaseCrawlerRestartException { - when(cache.getLastUuid()).thenReturn(Optional.of(ACCOUNT1)); + when(cache.getLastNumber()).thenReturn(Optional.of(ACCOUNT1)); boolean accelerated = crawler.doPeriodicWork(); assertThat(accelerated).isFalse(); verify(cache, times(1)).claimActiveWork(any(String.class), anyLong()); - verify(cache, times(1)).getLastUuid(); + verify(cache, times(1)).getLastNumber(); verify(accounts, times(0)).getAllFrom(eq(CHUNK_SIZE)); verify(accounts, times(1)).getAllFrom(eq(ACCOUNT1), eq(CHUNK_SIZE)); - verify(account2, times(1)).getUuid(); + verify(account2, times(1)).getNumber(); verify(listener, times(1)).onCrawlChunk(eq(Optional.of(ACCOUNT1)), eq(Arrays.asList(account2))); - verify(cache, times(1)).setLastUuid(eq(Optional.of(ACCOUNT2))); + verify(cache, times(1)).setLastNumber(eq(Optional.of(ACCOUNT2))); verify(cache, times(1)).isAccelerated(); verify(cache, times(1)).releaseActiveWork(any(String.class)); @@ -122,18 +121,18 @@ public class AccountDatabaseCrawlerTest { @Test public void testCrawlChunkAccelerated() throws AccountDatabaseCrawlerRestartException { when(cache.isAccelerated()).thenReturn(true); - when(cache.getLastUuid()).thenReturn(Optional.of(ACCOUNT1)); + when(cache.getLastNumber()).thenReturn(Optional.of(ACCOUNT1)); boolean accelerated = crawler.doPeriodicWork(); assertThat(accelerated).isTrue(); verify(cache, times(1)).claimActiveWork(any(String.class), anyLong()); - verify(cache, times(1)).getLastUuid(); + verify(cache, times(1)).getLastNumber(); verify(accounts, times(0)).getAllFrom(eq(CHUNK_SIZE)); verify(accounts, times(1)).getAllFrom(eq(ACCOUNT1), eq(CHUNK_SIZE)); - verify(account2, times(1)).getUuid(); + verify(account2, times(1)).getNumber(); verify(listener, times(1)).onCrawlChunk(eq(Optional.of(ACCOUNT1)), eq(Arrays.asList(account2))); - verify(cache, times(1)).setLastUuid(eq(Optional.of(ACCOUNT2))); + verify(cache, times(1)).setLastNumber(eq(Optional.of(ACCOUNT2))); verify(cache, times(1)).isAccelerated(); verify(cache, times(1)).releaseActiveWork(any(String.class)); @@ -147,19 +146,19 @@ public class AccountDatabaseCrawlerTest { @Test public void testCrawlChunkRestart() throws AccountDatabaseCrawlerRestartException { - when(cache.getLastUuid()).thenReturn(Optional.of(ACCOUNT1)); + when(cache.getLastNumber()).thenReturn(Optional.of(ACCOUNT1)); doThrow(AccountDatabaseCrawlerRestartException.class).when(listener).onCrawlChunk(eq(Optional.of(ACCOUNT1)), eq(Arrays.asList(account2))); boolean accelerated = crawler.doPeriodicWork(); assertThat(accelerated).isFalse(); verify(cache, times(1)).claimActiveWork(any(String.class), anyLong()); - verify(cache, times(1)).getLastUuid(); + verify(cache, times(1)).getLastNumber(); verify(accounts, times(0)).getAllFrom(eq(CHUNK_SIZE)); verify(accounts, times(1)).getAllFrom(eq(ACCOUNT1), eq(CHUNK_SIZE)); verify(account2, times(0)).getNumber(); verify(listener, times(1)).onCrawlChunk(eq(Optional.of(ACCOUNT1)), eq(Arrays.asList(account2))); - verify(cache, times(1)).setLastUuid(eq(Optional.empty())); + verify(cache, times(1)).setLastNumber(eq(Optional.empty())); verify(cache, times(1)).clearAccelerate(); verify(cache, times(1)).isAccelerated(); verify(cache, times(1)).releaseActiveWork(any(String.class)); @@ -174,19 +173,19 @@ public class AccountDatabaseCrawlerTest { @Test public void testCrawlEnd() { - when(cache.getLastUuid()).thenReturn(Optional.of(ACCOUNT2)); + when(cache.getLastNumber()).thenReturn(Optional.of(ACCOUNT2)); boolean accelerated = crawler.doPeriodicWork(); assertThat(accelerated).isFalse(); verify(cache, times(1)).claimActiveWork(any(String.class), anyLong()); - verify(cache, times(1)).getLastUuid(); + verify(cache, times(1)).getLastNumber(); verify(accounts, times(0)).getAllFrom(eq(CHUNK_SIZE)); verify(accounts, times(1)).getAllFrom(eq(ACCOUNT2), eq(CHUNK_SIZE)); verify(account1, times(0)).getNumber(); verify(account2, times(0)).getNumber(); verify(listener, times(1)).onCrawlEnd(eq(Optional.of(ACCOUNT2))); - verify(cache, times(1)).setLastUuid(eq(Optional.empty())); + verify(cache, times(1)).setLastNumber(eq(Optional.empty())); verify(cache, times(1)).clearAccelerate(); verify(cache, times(1)).isAccelerated(); verify(cache, times(1)).releaseActiveWork(any(String.class)); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java index c8c893d28..bb1664cf4 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsTest.java @@ -173,8 +173,6 @@ public class AccountsTest { accounts.create(account); } - users.sort((account, t1) -> UUIDComparator.staticCompare(account.getUuid(), t1.getUuid())); - List retrieved = accounts.getAllFrom(10); assertThat(retrieved.size()).isEqualTo(10); @@ -183,7 +181,7 @@ public class AccountsTest { } for (int j=0;j<9;j++) { - retrieved = accounts.getAllFrom(retrieved.get(9).getUuid(), 10); + retrieved = accounts.getAllFrom(retrieved.get(9).getNumber(), 10); assertThat(retrieved.size()).isEqualTo(10); for (int i=0;i request = ArgumentCaptor.forClass(DirectoryReconciliationRequest.class); verify(reconciliationClient, times(1)).sendChunk(request.capture()); - assertThat(request.getValue().getFromUuid()).isEqualTo(VALID_UUID); - assertThat(request.getValue().getToUuid()).isEqualTo(INACTIVE_UUID); - assertThat(request.getValue().getNumbers()).isEqualTo(Arrays.asList(VALID_NUMBERRR)); + assertThat(request.getValue().getFromNumber()).isEqualTo(VALID_NUMBER); + assertThat(request.getValue().getToNumber()).isEqualTo(INACTIVE_NUMBER); + assertThat(request.getValue().getNumbers()).isEqualTo(Arrays.asList(VALID_NUMBER)); ArgumentCaptor addedContact = ArgumentCaptor.forClass(ClientContact.class); verify(directoryManager, times(1)).startBatchOperation(); verify(directoryManager, times(1)).add(eq(batchOperationHandle), addedContact.capture()); - verify(directoryManager, times(1)).remove(eq(batchOperationHandle), eq(INACTIVE_NUMBERRR)); + verify(directoryManager, times(1)).remove(eq(batchOperationHandle), eq(INACTIVE_NUMBER)); verify(directoryManager, times(1)).stopBatchOperation(eq(batchOperationHandle)); - assertThat(addedContact.getValue().getToken()).isEqualTo(Util.getContactToken(VALID_NUMBERRR)); + assertThat(addedContact.getValue().getToken()).isEqualTo(Util.getContactToken(VALID_NUMBER)); verifyNoMoreInteractions(activeAccount); verifyNoMoreInteractions(inactiveAccount); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PushFeedbackProcessorTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PushFeedbackProcessorTest.java index 8a39a7c4a..87a59d1f0 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PushFeedbackProcessorTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/PushFeedbackProcessorTest.java @@ -13,7 +13,6 @@ import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Set; -import java.util.UUID; import java.util.concurrent.TimeUnit; import static org.mockito.Mockito.*; @@ -63,7 +62,7 @@ public class PushFeedbackProcessorTest { @Test public void testEmpty() { PushFeedbackProcessor processor = new PushFeedbackProcessor(accountsManager, directoryQueue); - processor.onCrawlChunk(Optional.of(UUID.randomUUID()), Collections.emptyList()); + processor.onCrawlChunk(Optional.of("+14152222222"), Collections.emptyList()); verifyZeroInteractions(accountsManager); verifyZeroInteractions(directoryQueue); @@ -72,7 +71,7 @@ public class PushFeedbackProcessorTest { @Test public void testUpdate() { PushFeedbackProcessor processor = new PushFeedbackProcessor(accountsManager, directoryQueue); - processor.onCrawlChunk(Optional.of(UUID.randomUUID()), List.of(uninstalledAccount, mixedAccount, stillActiveAccount, freshAccount, cleanAccount)); + processor.onCrawlChunk(Optional.of("+14153333333"), List.of(uninstalledAccount, mixedAccount, stillActiveAccount, freshAccount, cleanAccount)); verify(uninstalledDevice).setApnId(isNull()); verify(uninstalledDevice).setGcmId(isNull());