Drop caching for pending accounts/devices.
This commit is contained in:
parent
4c99577c08
commit
bf1dd791a5
|
@ -440,8 +440,8 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
SecureStorageClient secureStorageClient = new SecureStorageClient(storageCredentialsGenerator, storageServiceExecutor, config.getSecureStorageServiceConfiguration());
|
SecureStorageClient secureStorageClient = new SecureStorageClient(storageCredentialsGenerator, storageServiceExecutor, config.getSecureStorageServiceConfiguration());
|
||||||
ClientPresenceManager clientPresenceManager = new ClientPresenceManager(clientPresenceCluster, recurringJobExecutor, keyspaceNotificationDispatchExecutor);
|
ClientPresenceManager clientPresenceManager = new ClientPresenceManager(clientPresenceCluster, recurringJobExecutor, keyspaceNotificationDispatchExecutor);
|
||||||
DirectoryQueue directoryQueue = new DirectoryQueue(config.getDirectoryConfiguration().getSqsConfiguration());
|
DirectoryQueue directoryQueue = new DirectoryQueue(config.getDirectoryConfiguration().getSqsConfiguration());
|
||||||
PendingAccountsManager pendingAccountsManager = new PendingAccountsManager(pendingAccounts, cacheCluster);
|
PendingAccountsManager pendingAccountsManager = new PendingAccountsManager(pendingAccounts);
|
||||||
PendingDevicesManager pendingDevicesManager = new PendingDevicesManager(pendingDevices, cacheCluster);
|
PendingDevicesManager pendingDevicesManager = new PendingDevicesManager(pendingDevices);
|
||||||
UsernamesManager usernamesManager = new UsernamesManager(usernames, reservedUsernames, cacheCluster);
|
UsernamesManager usernamesManager = new UsernamesManager(usernames, reservedUsernames, cacheCluster);
|
||||||
ProfilesManager profilesManager = new ProfilesManager(profiles, cacheCluster);
|
ProfilesManager profilesManager = new ProfilesManager(profiles, cacheCluster);
|
||||||
MessagesCache messagesCache = new MessagesCache(messagesCluster, messagesCluster, keyspaceNotificationDispatchExecutor);
|
MessagesCache messagesCache = new MessagesCache(messagesCluster, messagesCluster, keyspaceNotificationDispatchExecutor);
|
||||||
|
|
|
@ -4,79 +4,27 @@
|
||||||
*/
|
*/
|
||||||
package org.whispersystems.textsecuregcm.storage;
|
package org.whispersystems.textsecuregcm.storage;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.whispersystems.textsecuregcm.auth.StoredVerificationCode;
|
|
||||||
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
|
||||||
import org.whispersystems.textsecuregcm.util.SystemMapper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import org.whispersystems.textsecuregcm.auth.StoredVerificationCode;
|
||||||
|
|
||||||
public class PendingAccountsManager {
|
public class PendingAccountsManager {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(PendingAccountsManager.class);
|
private final PendingAccounts pendingAccounts;
|
||||||
|
|
||||||
private static final String CACHE_PREFIX = "pending_account2::";
|
public PendingAccountsManager(PendingAccounts pendingAccounts) {
|
||||||
|
|
||||||
private final PendingAccounts pendingAccounts;
|
|
||||||
private final FaultTolerantRedisCluster cacheCluster;
|
|
||||||
private final ObjectMapper mapper;
|
|
||||||
|
|
||||||
public PendingAccountsManager(PendingAccounts pendingAccounts, FaultTolerantRedisCluster cacheCluster)
|
|
||||||
{
|
|
||||||
this.pendingAccounts = pendingAccounts;
|
this.pendingAccounts = pendingAccounts;
|
||||||
this.cacheCluster = cacheCluster;
|
|
||||||
this.mapper = SystemMapper.getMapper();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void store(String number, StoredVerificationCode code) {
|
public void store(String number, StoredVerificationCode code) {
|
||||||
memcacheSet(number, code);
|
|
||||||
pendingAccounts.insert(number, code.getCode(), code.getTimestamp(), code.getPushCode(),
|
pendingAccounts.insert(number, code.getCode(), code.getTimestamp(), code.getPushCode(),
|
||||||
code.getTwilioVerificationSid().orElse(null));
|
code.getTwilioVerificationSid().orElse(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove(String number) {
|
public void remove(String number) {
|
||||||
memcacheDelete(number);
|
|
||||||
pendingAccounts.remove(number);
|
pendingAccounts.remove(number);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<StoredVerificationCode> getCodeForNumber(String number) {
|
public Optional<StoredVerificationCode> getCodeForNumber(String number) {
|
||||||
Optional<StoredVerificationCode> code = memcacheGet(number);
|
return pendingAccounts.getCodeForNumber(number);
|
||||||
|
|
||||||
if (!code.isPresent()) {
|
|
||||||
code = pendingAccounts.getCodeForNumber(number);
|
|
||||||
code.ifPresent(storedVerificationCode -> memcacheSet(number, storedVerificationCode));
|
|
||||||
}
|
|
||||||
|
|
||||||
return code;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void memcacheSet(String number, StoredVerificationCode code) {
|
|
||||||
try {
|
|
||||||
final String verificationCodeJson = mapper.writeValueAsString(code);
|
|
||||||
|
|
||||||
cacheCluster.useCluster(connection -> connection.sync().set(CACHE_PREFIX + number, verificationCodeJson));
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
throw new IllegalArgumentException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<StoredVerificationCode> memcacheGet(String number) {
|
|
||||||
try {
|
|
||||||
final String json = cacheCluster.withCluster(connection -> connection.sync().get(CACHE_PREFIX + number));
|
|
||||||
|
|
||||||
if (json == null) return Optional.empty();
|
|
||||||
else return Optional.of(mapper.readValue(json, StoredVerificationCode.class));
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.warn("Error deserializing value...", e);
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void memcacheDelete(String number) {
|
|
||||||
cacheCluster.useCluster(connection -> connection.sync().del(CACHE_PREFIX + number));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,78 +4,26 @@
|
||||||
*/
|
*/
|
||||||
package org.whispersystems.textsecuregcm.storage;
|
package org.whispersystems.textsecuregcm.storage;
|
||||||
|
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.whispersystems.textsecuregcm.auth.StoredVerificationCode;
|
|
||||||
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
|
||||||
import org.whispersystems.textsecuregcm.util.SystemMapper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import org.whispersystems.textsecuregcm.auth.StoredVerificationCode;
|
||||||
|
|
||||||
public class PendingDevicesManager {
|
public class PendingDevicesManager {
|
||||||
|
|
||||||
private final Logger logger = LoggerFactory.getLogger(PendingDevicesManager.class);
|
private final PendingDevices pendingDevices;
|
||||||
|
|
||||||
private static final String CACHE_PREFIX = "pending_devices2::";
|
public PendingDevicesManager(PendingDevices pendingDevices) {
|
||||||
|
|
||||||
private final PendingDevices pendingDevices;
|
|
||||||
private final FaultTolerantRedisCluster cacheCluster;
|
|
||||||
private final ObjectMapper mapper;
|
|
||||||
|
|
||||||
public PendingDevicesManager(PendingDevices pendingDevices, FaultTolerantRedisCluster cacheCluster) {
|
|
||||||
this.pendingDevices = pendingDevices;
|
this.pendingDevices = pendingDevices;
|
||||||
this.cacheCluster = cacheCluster;
|
|
||||||
this.mapper = SystemMapper.getMapper();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void store(String number, StoredVerificationCode code) {
|
public void store(String number, StoredVerificationCode code) {
|
||||||
memcacheSet(number, code);
|
|
||||||
pendingDevices.insert(number, code.getCode(), code.getTimestamp());
|
pendingDevices.insert(number, code.getCode(), code.getTimestamp());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remove(String number) {
|
public void remove(String number) {
|
||||||
memcacheDelete(number);
|
|
||||||
pendingDevices.remove(number);
|
pendingDevices.remove(number);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<StoredVerificationCode> getCodeForNumber(String number) {
|
public Optional<StoredVerificationCode> getCodeForNumber(String number) {
|
||||||
Optional<StoredVerificationCode> code = memcacheGet(number);
|
return pendingDevices.getCodeForNumber(number);
|
||||||
|
|
||||||
if (!code.isPresent()) {
|
|
||||||
code = pendingDevices.getCodeForNumber(number);
|
|
||||||
code.ifPresent(storedVerificationCode -> memcacheSet(number, storedVerificationCode));
|
|
||||||
}
|
|
||||||
|
|
||||||
return code;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void memcacheSet(String number, StoredVerificationCode code) {
|
|
||||||
try {
|
|
||||||
final String verificationCodeJson = mapper.writeValueAsString(code);
|
|
||||||
|
|
||||||
cacheCluster.useCluster(connection -> connection.sync().set(CACHE_PREFIX + number, verificationCodeJson));
|
|
||||||
} catch (JsonProcessingException e) {
|
|
||||||
throw new IllegalArgumentException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Optional<StoredVerificationCode> memcacheGet(String number) {
|
|
||||||
try {
|
|
||||||
final String json = cacheCluster.withCluster(connection -> connection.sync().get(CACHE_PREFIX + number));
|
|
||||||
|
|
||||||
if (json == null) return Optional.empty();
|
|
||||||
else return Optional.of(mapper.readValue(json, StoredVerificationCode.class));
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.warn("Could not parse pending device stored verification json");
|
|
||||||
return Optional.empty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void memcacheDelete(String number) {
|
|
||||||
cacheCluster.useCluster(connection -> connection.sync().del(CACHE_PREFIX + number));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue