diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java b/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java index 1c0c2f950..78c7e96a1 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/DirectoryManager.java @@ -171,12 +171,15 @@ public class DirectoryManager { } private static class TokenValue { + @JsonProperty(value = "r") private String relay; @JsonProperty(value = "s") private boolean supportsSms; + public TokenValue() {} + public TokenValue(String relay, boolean supportsSms) { this.relay = relay; this.supportsSms = supportsSms; diff --git a/src/main/java/org/whispersystems/textsecuregcm/workers/DirectoryUpdater.java b/src/main/java/org/whispersystems/textsecuregcm/workers/DirectoryUpdater.java index 2348e0500..d27b0e059 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/workers/DirectoryUpdater.java +++ b/src/main/java/org/whispersystems/textsecuregcm/workers/DirectoryUpdater.java @@ -38,6 +38,8 @@ import static org.whispersystems.textsecuregcm.storage.DirectoryManager.PendingC public class DirectoryUpdater { + private static final int CHUNK_SIZE = 10000; + private final Logger logger = LoggerFactory.getLogger(DirectoryUpdater.class); private final AccountsManager accountsManager; @@ -60,24 +62,28 @@ public class DirectoryUpdater { try { logger.info("Updating from local DB."); - Iterator accounts = accountsManager.getAll(); + int offset = 0; - if (accounts == null) - return; + for (;;) { + List accounts = accountsManager.getAll(offset, CHUNK_SIZE); - while (accounts.hasNext()) { - Account account = accounts.next(); + if (accounts == null || accounts.isEmpty()) break; + else offset += accounts.size(); - if (account.isActive()) { - byte[] token = Util.getContactToken(account.getNumber()); - ClientContact clientContact = new ClientContact(token, null, account.getSupportsSms()); + for (Account account : accounts) { + if (account.isActive()) { + byte[] token = Util.getContactToken(account.getNumber()); + ClientContact clientContact = new ClientContact(token, null, account.getSupportsSms()); - directory.add(batchOperation, clientContact); - contactsAdded++; - } else { - directory.remove(batchOperation, account.getNumber()); - contactsRemoved++; + directory.add(batchOperation, clientContact); + contactsAdded++; + } else { + directory.remove(batchOperation, account.getNumber()); + contactsRemoved++; + } } + + logger.info("Processed " + CHUNK_SIZE + " local accounts..."); } } finally { directory.stopBatchOperation(batchOperation);