Drop relational profiles store
This commit is contained in:
parent
6aceb24fd2
commit
afa910bbd7
|
@ -188,7 +188,6 @@ import org.whispersystems.textsecuregcm.storage.MessagesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.NonNormalizedAccountCrawlerListener;
|
import org.whispersystems.textsecuregcm.storage.NonNormalizedAccountCrawlerListener;
|
||||||
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
||||||
import org.whispersystems.textsecuregcm.storage.Profiles;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.PubSubManager;
|
import org.whispersystems.textsecuregcm.storage.PubSubManager;
|
||||||
|
@ -386,7 +385,6 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
config.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
config.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
||||||
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
||||||
config.getReservedUsernamesDynamoDbConfiguration().getTableName());
|
config.getReservedUsernamesDynamoDbConfiguration().getTableName());
|
||||||
Profiles profiles = new Profiles(accountDatabase);
|
|
||||||
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
||||||
config.getDynamoDbTables().getProfiles().getTableName());
|
config.getDynamoDbTables().getProfiles().getTableName());
|
||||||
Keys keys = new Keys(preKeyDynamoDb, config.getKeysDynamoDbConfiguration().getTableName());
|
Keys keys = new Keys(preKeyDynamoDb, config.getKeysDynamoDbConfiguration().getTableName());
|
||||||
|
@ -468,7 +466,7 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
||||||
DirectoryQueue directoryQueue = new DirectoryQueue(config.getDirectoryConfiguration().getSqsConfiguration());
|
DirectoryQueue directoryQueue = new DirectoryQueue(config.getDirectoryConfiguration().getSqsConfiguration());
|
||||||
StoredVerificationCodeManager pendingAccountsManager = new StoredVerificationCodeManager(pendingAccounts);
|
StoredVerificationCodeManager pendingAccountsManager = new StoredVerificationCodeManager(pendingAccounts);
|
||||||
StoredVerificationCodeManager pendingDevicesManager = new StoredVerificationCodeManager(pendingDevices);
|
StoredVerificationCodeManager pendingDevicesManager = new StoredVerificationCodeManager(pendingDevices);
|
||||||
ProfilesManager profilesManager = new ProfilesManager(profiles, profilesDynamoDb, cacheCluster, dynamicConfigurationManager);
|
ProfilesManager profilesManager = new ProfilesManager(profilesDynamoDb, cacheCluster);
|
||||||
MessagesCache messagesCache = new MessagesCache(messagesCluster, messagesCluster, keyspaceNotificationDispatchExecutor);
|
MessagesCache messagesCache = new MessagesCache(messagesCluster, messagesCluster, keyspaceNotificationDispatchExecutor);
|
||||||
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
||||||
ReportMessageManager reportMessageManager = new ReportMessageManager(reportMessageDynamoDb, rateLimitersCluster, Metrics.globalRegistry, config.getReportMessageConfiguration().getCounterTtl());
|
ReportMessageManager reportMessageManager = new ReportMessageManager(reportMessageDynamoDb, rateLimitersCluster, Metrics.globalRegistry, config.getReportMessageConfiguration().getCounterTtl());
|
||||||
|
|
|
@ -1,104 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2020 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.storage;
|
|
||||||
|
|
||||||
import static com.codahale.metrics.MetricRegistry.name;
|
|
||||||
|
|
||||||
import com.codahale.metrics.MetricRegistry;
|
|
||||||
import com.codahale.metrics.SharedMetricRegistries;
|
|
||||||
import com.codahale.metrics.Timer;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.mappers.VersionedProfileMapper;
|
|
||||||
import org.whispersystems.textsecuregcm.util.Constants;
|
|
||||||
|
|
||||||
public class Profiles implements ProfilesStore {
|
|
||||||
|
|
||||||
public static final String ID = "id";
|
|
||||||
public static final String UID = "uuid";
|
|
||||||
public static final String VERSION = "version";
|
|
||||||
public static final String NAME = "name";
|
|
||||||
public static final String AVATAR = "avatar";
|
|
||||||
public static final String ABOUT_EMOJI = "about_emoji";
|
|
||||||
public static final String ABOUT = "about";
|
|
||||||
public static final String PAYMENT_ADDRESS = "payment_address";
|
|
||||||
public static final String COMMITMENT = "commitment";
|
|
||||||
public static final String DELETED = "deleted";
|
|
||||||
|
|
||||||
private final MetricRegistry metricRegistry = SharedMetricRegistries.getOrCreate(Constants.METRICS_NAME);
|
|
||||||
|
|
||||||
private final Timer setTimer = metricRegistry.timer(name(Profiles.class, "set" ));
|
|
||||||
private final Timer getTimer = metricRegistry.timer(name(Profiles.class, "get" ));
|
|
||||||
private final Timer deleteTimer = metricRegistry.timer(name(Profiles.class, "delete"));
|
|
||||||
|
|
||||||
private final FaultTolerantDatabase database;
|
|
||||||
|
|
||||||
public Profiles(FaultTolerantDatabase database) {
|
|
||||||
this.database = database;
|
|
||||||
this.database.getDatabase().registerRowMapper(new VersionedProfileMapper());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void set(UUID uuid, VersionedProfile profile) {
|
|
||||||
database.use(jdbi -> jdbi.useHandle(handle -> {
|
|
||||||
try (Timer.Context ignored = setTimer.time()) {
|
|
||||||
handle.createUpdate(
|
|
||||||
"INSERT INTO profiles ("
|
|
||||||
+ UID + ", "
|
|
||||||
+ VERSION + ", "
|
|
||||||
+ NAME + ", "
|
|
||||||
+ AVATAR + ", "
|
|
||||||
+ ABOUT_EMOJI + ", "
|
|
||||||
+ ABOUT + ", "
|
|
||||||
+ PAYMENT_ADDRESS + ", "
|
|
||||||
+ COMMITMENT + ") "
|
|
||||||
+ "VALUES (:uuid, :version, :name, :avatar, :about_emoji, :about, :payment_address, :commitment) "
|
|
||||||
+ "ON CONFLICT (" + UID + ", " + VERSION + ") "
|
|
||||||
+ "DO UPDATE SET "
|
|
||||||
+ NAME + " = EXCLUDED." + NAME + ", "
|
|
||||||
+ AVATAR + " = EXCLUDED." + AVATAR + ", "
|
|
||||||
+ ABOUT + " = EXCLUDED." + ABOUT + ", "
|
|
||||||
+ ABOUT_EMOJI + " = EXCLUDED." + ABOUT_EMOJI + ", "
|
|
||||||
+ PAYMENT_ADDRESS + " = EXCLUDED." + PAYMENT_ADDRESS + ", "
|
|
||||||
+ DELETED + " = FALSE, "
|
|
||||||
+ COMMITMENT + " = CASE WHEN profiles." + DELETED + " = TRUE THEN EXCLUDED." + COMMITMENT + " ELSE profiles." + COMMITMENT + " END")
|
|
||||||
.bind("uuid", uuid)
|
|
||||||
.bind("version", profile.getVersion())
|
|
||||||
.bind("name", profile.getName())
|
|
||||||
.bind("avatar", profile.getAvatar())
|
|
||||||
.bind("about_emoji", profile.getAboutEmoji())
|
|
||||||
.bind("about", profile.getAbout())
|
|
||||||
.bind("payment_address", profile.getPaymentAddress())
|
|
||||||
.bind("commitment", profile.getCommitment())
|
|
||||||
.execute();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Optional<VersionedProfile> get(UUID uuid, String version) {
|
|
||||||
return database.with(jdbi -> jdbi.withHandle(handle -> {
|
|
||||||
try (Timer.Context ignored = getTimer.time()) {
|
|
||||||
return handle.createQuery("SELECT * FROM profiles WHERE " + UID + " = :uuid AND " + VERSION + " = :version AND " + DELETED + "= FALSE")
|
|
||||||
.bind("uuid", uuid)
|
|
||||||
.bind("version", version)
|
|
||||||
.mapTo(VersionedProfile.class)
|
|
||||||
.findFirst();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteAll(UUID uuid) {
|
|
||||||
database.use(jdbi -> jdbi.useHandle(handle -> {
|
|
||||||
try (Timer.Context ignored = deleteTimer.time()) {
|
|
||||||
handle.createUpdate("UPDATE profiles SET " + DELETED + " = TRUE WHERE " + UID + " = :uuid")
|
|
||||||
.bind("uuid", uuid)
|
|
||||||
.execute();
|
|
||||||
}
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -8,16 +8,13 @@ package org.whispersystems.textsecuregcm.storage;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import io.lettuce.core.RedisException;
|
import io.lettuce.core.RedisException;
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
|
|
||||||
import org.whispersystems.textsecuregcm.experiment.Experiment;
|
|
||||||
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
|
||||||
import org.whispersystems.textsecuregcm.util.SystemMapper;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
||||||
|
import org.whispersystems.textsecuregcm.util.SystemMapper;
|
||||||
|
|
||||||
public class ProfilesManager {
|
public class ProfilesManager {
|
||||||
|
|
||||||
|
@ -25,63 +22,31 @@ public class ProfilesManager {
|
||||||
|
|
||||||
private static final String CACHE_PREFIX = "profiles::";
|
private static final String CACHE_PREFIX = "profiles::";
|
||||||
|
|
||||||
private final Profiles profiles;
|
|
||||||
private final ProfilesDynamoDb profilesDynamoDb;
|
private final ProfilesDynamoDb profilesDynamoDb;
|
||||||
private final FaultTolerantRedisCluster cacheCluster;
|
private final FaultTolerantRedisCluster cacheCluster;
|
||||||
private final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager;
|
|
||||||
private final ObjectMapper mapper;
|
private final ObjectMapper mapper;
|
||||||
|
|
||||||
private final Experiment migrationExperiment = new Experiment("profileMigration");
|
public ProfilesManager(final ProfilesDynamoDb profilesDynamoDb, final FaultTolerantRedisCluster cacheCluster) {
|
||||||
|
|
||||||
public ProfilesManager(final Profiles profiles,
|
|
||||||
final ProfilesDynamoDb profilesDynamoDb,
|
|
||||||
final FaultTolerantRedisCluster cacheCluster,
|
|
||||||
final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager) {
|
|
||||||
this.profiles = profiles;
|
|
||||||
this.profilesDynamoDb = profilesDynamoDb;
|
this.profilesDynamoDb = profilesDynamoDb;
|
||||||
this.cacheCluster = cacheCluster;
|
this.cacheCluster = cacheCluster;
|
||||||
this.dynamicConfigurationManager = dynamicConfigurationManager;
|
|
||||||
this.mapper = SystemMapper.getMapper();
|
this.mapper = SystemMapper.getMapper();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void set(UUID uuid, VersionedProfile versionedProfile) {
|
public void set(UUID uuid, VersionedProfile versionedProfile) {
|
||||||
memcacheSet(uuid, versionedProfile);
|
memcacheSet(uuid, versionedProfile);
|
||||||
profiles.set(uuid, versionedProfile);
|
profilesDynamoDb.set(uuid, versionedProfile);
|
||||||
|
|
||||||
if (dynamicConfigurationManager.getConfiguration().getProfileMigrationConfiguration().isDynamoDbWriteEnabled()) {
|
|
||||||
profilesDynamoDb.set(uuid, versionedProfile);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteAll(UUID uuid) {
|
public void deleteAll(UUID uuid) {
|
||||||
memcacheDelete(uuid);
|
memcacheDelete(uuid);
|
||||||
profiles.deleteAll(uuid);
|
profilesDynamoDb.deleteAll(uuid);
|
||||||
|
|
||||||
if (dynamicConfigurationManager.getConfiguration().getProfileMigrationConfiguration().isDynamoDbDeleteEnabled()) {
|
|
||||||
profilesDynamoDb.deleteAll(uuid);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<VersionedProfile> get(UUID uuid, String version) {
|
public Optional<VersionedProfile> get(UUID uuid, String version) {
|
||||||
Optional<VersionedProfile> profile = memcacheGet(uuid, version);
|
Optional<VersionedProfile> profile = memcacheGet(uuid, version);
|
||||||
|
|
||||||
if (profile.isEmpty()) {
|
if (profile.isEmpty()) {
|
||||||
if (dynamicConfigurationManager.getConfiguration().getProfileMigrationConfiguration().isDynamoDbReadPrimary()) {
|
profile = profilesDynamoDb.get(uuid, version);
|
||||||
profile = profilesDynamoDb.get(uuid, version);
|
|
||||||
} else {
|
|
||||||
profile = profiles.get(uuid, version);
|
|
||||||
|
|
||||||
if (dynamicConfigurationManager.getConfiguration().getProfileMigrationConfiguration().isDynamoDbReadForComparisonEnabled()) {
|
|
||||||
final Optional<VersionedProfile> dynamoProfile = profilesDynamoDb.get(uuid, version);
|
|
||||||
migrationExperiment.compareSupplierResult(profile, () -> dynamoProfile);
|
|
||||||
|
|
||||||
if (profile.isEmpty() && dynamoProfile.isPresent() &&
|
|
||||||
dynamicConfigurationManager.getConfiguration().getProfileMigrationConfiguration().isLogMismatches()) {
|
|
||||||
logger.info("Profile {}/{} absent from relational database, but present in DynamoDB", uuid, version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
profile.ifPresent(versionedProfile -> memcacheSet(uuid, versionedProfile));
|
profile.ifPresent(versionedProfile -> memcacheSet(uuid, versionedProfile));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2020 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.storage.mappers;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import org.jdbi.v3.core.mapper.RowMapper;
|
|
||||||
import org.jdbi.v3.core.statement.StatementContext;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.Profiles;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.VersionedProfile;
|
|
||||||
|
|
||||||
public class VersionedProfileMapper implements RowMapper<VersionedProfile> {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public VersionedProfile map(ResultSet resultSet, StatementContext ctx) throws SQLException {
|
|
||||||
return new VersionedProfile(
|
|
||||||
resultSet.getString(Profiles.VERSION),
|
|
||||||
resultSet.getString(Profiles.NAME),
|
|
||||||
resultSet.getString(Profiles.AVATAR),
|
|
||||||
resultSet.getString(Profiles.ABOUT_EMOJI),
|
|
||||||
resultSet.getString(Profiles.ABOUT),
|
|
||||||
resultSet.getString(Profiles.PAYMENT_ADDRESS),
|
|
||||||
resultSet.getBytes(Profiles.COMMITMENT));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -49,7 +49,6 @@ import org.whispersystems.textsecuregcm.storage.MessagesCache;
|
||||||
import org.whispersystems.textsecuregcm.storage.MessagesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.MessagesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
||||||
import org.whispersystems.textsecuregcm.storage.Profiles;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.ReportMessageDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ReportMessageDynamoDb;
|
||||||
|
@ -177,7 +176,6 @@ public class DeleteUserCommand extends EnvironmentCommand<WhisperServerConfigura
|
||||||
configuration.getAccountsDynamoDbConfiguration().getScanPageSize());
|
configuration.getAccountsDynamoDbConfiguration().getScanPageSize());
|
||||||
PhoneNumberIdentifiers phoneNumberIdentifiers = new PhoneNumberIdentifiers(phoneNumberIdentifiersDynamoDbClient,
|
PhoneNumberIdentifiers phoneNumberIdentifiers = new PhoneNumberIdentifiers(phoneNumberIdentifiersDynamoDbClient,
|
||||||
configuration.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
configuration.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
||||||
Profiles profiles = new Profiles(accountDatabase);
|
|
||||||
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
||||||
configuration.getDynamoDbTables().getProfiles().getTableName());
|
configuration.getDynamoDbTables().getProfiles().getTableName());
|
||||||
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
||||||
|
@ -208,8 +206,7 @@ public class DeleteUserCommand extends EnvironmentCommand<WhisperServerConfigura
|
||||||
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
||||||
DirectoryQueue directoryQueue = new DirectoryQueue(
|
DirectoryQueue directoryQueue = new DirectoryQueue(
|
||||||
configuration.getDirectoryConfiguration().getSqsConfiguration());
|
configuration.getDirectoryConfiguration().getSqsConfiguration());
|
||||||
ProfilesManager profilesManager = new ProfilesManager(profiles, profilesDynamoDb, cacheCluster,
|
ProfilesManager profilesManager = new ProfilesManager(profilesDynamoDb, cacheCluster);
|
||||||
dynamicConfigurationManager);
|
|
||||||
ReportMessageDynamoDb reportMessageDynamoDb = new ReportMessageDynamoDb(reportMessagesDynamoDb,
|
ReportMessageDynamoDb reportMessageDynamoDb = new ReportMessageDynamoDb(reportMessagesDynamoDb,
|
||||||
configuration.getReportMessageDynamoDbConfiguration().getTableName(),
|
configuration.getReportMessageDynamoDbConfiguration().getTableName(),
|
||||||
configuration.getReportMessageConfiguration().getReportTtl());
|
configuration.getReportMessageConfiguration().getReportTtl());
|
||||||
|
|
|
@ -47,7 +47,6 @@ import org.whispersystems.textsecuregcm.storage.MessagesCache;
|
||||||
import org.whispersystems.textsecuregcm.storage.MessagesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.MessagesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
import org.whispersystems.textsecuregcm.storage.PhoneNumberIdentifiers;
|
||||||
import org.whispersystems.textsecuregcm.storage.Profiles;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.ReportMessageDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ReportMessageDynamoDb;
|
||||||
|
@ -181,7 +180,6 @@ public class SetUserDiscoverabilityCommand extends EnvironmentCommand<WhisperSer
|
||||||
configuration.getAccountsDynamoDbConfiguration().getScanPageSize());
|
configuration.getAccountsDynamoDbConfiguration().getScanPageSize());
|
||||||
PhoneNumberIdentifiers phoneNumberIdentifiers = new PhoneNumberIdentifiers(phoneNumberIdentifiersDynamoDbClient,
|
PhoneNumberIdentifiers phoneNumberIdentifiers = new PhoneNumberIdentifiers(phoneNumberIdentifiersDynamoDbClient,
|
||||||
configuration.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
configuration.getPhoneNumberIdentifiersDynamoDbConfiguration().getTableName());
|
||||||
Profiles profiles = new Profiles(accountDatabase);
|
|
||||||
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
ProfilesDynamoDb profilesDynamoDb = new ProfilesDynamoDb(dynamoDbClient, dynamoDbAsyncClient,
|
||||||
configuration.getDynamoDbTables().getProfiles().getTableName());
|
configuration.getDynamoDbTables().getProfiles().getTableName());
|
||||||
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
ReservedUsernames reservedUsernames = new ReservedUsernames(reservedUsernamesDynamoDbClient,
|
||||||
|
@ -210,8 +208,7 @@ public class SetUserDiscoverabilityCommand extends EnvironmentCommand<WhisperSer
|
||||||
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
PushLatencyManager pushLatencyManager = new PushLatencyManager(metricsCluster, dynamicConfigurationManager);
|
||||||
DirectoryQueue directoryQueue = new DirectoryQueue(
|
DirectoryQueue directoryQueue = new DirectoryQueue(
|
||||||
configuration.getDirectoryConfiguration().getSqsConfiguration());
|
configuration.getDirectoryConfiguration().getSqsConfiguration());
|
||||||
ProfilesManager profilesManager = new ProfilesManager(profiles, profilesDynamoDb, cacheCluster,
|
ProfilesManager profilesManager = new ProfilesManager(profilesDynamoDb, cacheCluster);
|
||||||
dynamicConfigurationManager);
|
|
||||||
ReportMessageDynamoDb reportMessageDynamoDb = new ReportMessageDynamoDb(reportMessagesDynamoDb,
|
ReportMessageDynamoDb reportMessageDynamoDb = new ReportMessageDynamoDb(reportMessagesDynamoDb,
|
||||||
configuration.getReportMessageDynamoDbConfiguration().getTableName(),
|
configuration.getReportMessageDynamoDbConfiguration().getTableName(),
|
||||||
configuration.getReportMessageConfiguration().getReportTtl());
|
configuration.getReportMessageConfiguration().getReportTtl());
|
||||||
|
|
|
@ -1,39 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright 2013-2021 Signal Messenger, LLC
|
|
||||||
* SPDX-License-Identifier: AGPL-3.0-only
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.storage;
|
|
||||||
|
|
||||||
import com.opentable.db.postgres.embedded.LiquibasePreparer;
|
|
||||||
import com.opentable.db.postgres.junit5.EmbeddedPostgresExtension;
|
|
||||||
import com.opentable.db.postgres.junit5.PreparedDbExtension;
|
|
||||||
import org.jdbi.v3.core.Jdbi;
|
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
|
||||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
|
||||||
import org.whispersystems.textsecuregcm.configuration.CircuitBreakerConfiguration;
|
|
||||||
|
|
||||||
public class ProfilesPostgresTest extends ProfilesTest {
|
|
||||||
|
|
||||||
@RegisterExtension
|
|
||||||
static PreparedDbExtension ACCOUNTS_POSTGRES_EXTENSION =
|
|
||||||
EmbeddedPostgresExtension.preparedDatabase(LiquibasePreparer.forClasspathLocation("accountsdb.xml"));
|
|
||||||
|
|
||||||
private Profiles profiles;
|
|
||||||
|
|
||||||
@BeforeEach
|
|
||||||
void setUp() {
|
|
||||||
final FaultTolerantDatabase faultTolerantDatabase = new FaultTolerantDatabase("profilesTest",
|
|
||||||
Jdbi.create(ACCOUNTS_POSTGRES_EXTENSION.getTestDatabase()),
|
|
||||||
new CircuitBreakerConfiguration());
|
|
||||||
|
|
||||||
profiles = new Profiles(faultTolerantDatabase);
|
|
||||||
|
|
||||||
faultTolerantDatabase.use(jdbi -> jdbi.useHandle(handle -> handle.createUpdate("DELETE FROM profiles").execute()));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ProfilesStore getProfilesStore() {
|
|
||||||
return profiles;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -24,11 +24,7 @@ import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicConfiguration;
|
|
||||||
import org.whispersystems.textsecuregcm.configuration.dynamic.DynamicProfileMigrationConfiguration;
|
|
||||||
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster;
|
||||||
import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.Profiles;
|
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
import org.whispersystems.textsecuregcm.storage.ProfilesDynamoDb;
|
||||||
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
import org.whispersystems.textsecuregcm.storage.ProfilesManager;
|
||||||
import org.whispersystems.textsecuregcm.storage.VersionedProfile;
|
import org.whispersystems.textsecuregcm.storage.VersionedProfile;
|
||||||
|
@ -36,7 +32,7 @@ import org.whispersystems.textsecuregcm.tests.util.RedisClusterHelper;
|
||||||
|
|
||||||
public class ProfilesManagerTest {
|
public class ProfilesManagerTest {
|
||||||
|
|
||||||
private Profiles profiles;
|
private ProfilesDynamoDb profiles;
|
||||||
private RedisAdvancedClusterCommands<String, String> commands;
|
private RedisAdvancedClusterCommands<String, String> commands;
|
||||||
|
|
||||||
private ProfilesManager profilesManager;
|
private ProfilesManager profilesManager;
|
||||||
|
@ -47,22 +43,9 @@ public class ProfilesManagerTest {
|
||||||
commands = mock(RedisAdvancedClusterCommands.class);
|
commands = mock(RedisAdvancedClusterCommands.class);
|
||||||
final FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands);
|
final FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands);
|
||||||
|
|
||||||
profiles = mock(Profiles.class);
|
profiles = mock(ProfilesDynamoDb.class);
|
||||||
|
|
||||||
@SuppressWarnings("unchecked") final DynamicConfigurationManager<DynamicConfiguration> dynamicConfigurationManager =
|
profilesManager = new ProfilesManager(profiles, cacheCluster);
|
||||||
mock(DynamicConfigurationManager.class);
|
|
||||||
|
|
||||||
final DynamicConfiguration dynamicConfiguration = mock(DynamicConfiguration.class);
|
|
||||||
final DynamicProfileMigrationConfiguration profileMigrationConfiguration =
|
|
||||||
mock(DynamicProfileMigrationConfiguration.class);
|
|
||||||
|
|
||||||
when(dynamicConfigurationManager.getConfiguration()).thenReturn(dynamicConfiguration);
|
|
||||||
when(dynamicConfiguration.getProfileMigrationConfiguration()).thenReturn(profileMigrationConfiguration);
|
|
||||||
|
|
||||||
profilesManager = new ProfilesManager(profiles,
|
|
||||||
mock(ProfilesDynamoDb.class),
|
|
||||||
cacheCluster,
|
|
||||||
dynamicConfigurationManager);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue