diff --git a/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java b/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java index 6ac08ee7e..dd7dc0f9e 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java +++ b/src/main/java/org/whispersystems/textsecuregcm/storage/Messages.java @@ -53,6 +53,9 @@ public abstract class Messages { @SqlUpdate("DELETE FROM messages WHERE " + DESTINATION + " = :destination") abstract void clear(@Bind("destination") String destination); + @SqlUpdate("VACUUM messages") + public abstract void vacuum(); + public static class MessageMapper implements ResultSetMapper> { @Override public Pair map(int i, ResultSet resultSet, StatementContext statementContext) diff --git a/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java b/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java index ecfe4b8e6..ecfaf11e8 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java +++ b/src/main/java/org/whispersystems/textsecuregcm/workers/VacuumCommand.java @@ -7,6 +7,7 @@ import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.WhisperServerConfiguration; import org.whispersystems.textsecuregcm.storage.Accounts; import org.whispersystems.textsecuregcm.storage.Keys; +import org.whispersystems.textsecuregcm.storage.Messages; import org.whispersystems.textsecuregcm.storage.PendingAccounts; import io.dropwizard.cli.ConfiguredCommand; @@ -32,17 +33,25 @@ public class VacuumCommand extends ConfiguredCommand WhisperServerConfiguration config) throws Exception { - DataSourceFactory dbConfig = config.getDataSourceFactory(); - DBI dbi = new DBI(dbConfig.getUrl(), dbConfig.getUser(), dbConfig.getPassword()); + DataSourceFactory dbConfig = config.getDataSourceFactory(); + DataSourceFactory messageDbConfig = config.getMessageStoreConfiguration(); + DBI dbi = new DBI(dbConfig.getUrl(), dbConfig.getUser(), dbConfig.getPassword() ); + DBI messageDbi = new DBI(messageDbConfig.getUrl(), messageDbConfig.getUser(), messageDbConfig.getPassword()); dbi.registerArgumentFactory(new OptionalArgumentFactory(dbConfig.getDriverClass())); dbi.registerContainerFactory(new ImmutableListContainerFactory()); dbi.registerContainerFactory(new ImmutableSetContainerFactory()); dbi.registerContainerFactory(new OptionalContainerFactory()); + messageDbi.registerArgumentFactory(new OptionalArgumentFactory(dbConfig.getDriverClass())); + messageDbi.registerContainerFactory(new ImmutableListContainerFactory()); + messageDbi.registerContainerFactory(new ImmutableSetContainerFactory()); + messageDbi.registerContainerFactory(new OptionalContainerFactory()); + Accounts accounts = dbi.onDemand(Accounts.class ); Keys keys = dbi.onDemand(Keys.class ); PendingAccounts pendingAccounts = dbi.onDemand(PendingAccounts.class); + Messages messages = dbi.onDemand(Messages.class ); logger.warn("Vacuuming accounts..."); accounts.vacuum(); @@ -53,6 +62,9 @@ public class VacuumCommand extends ConfiguredCommand logger.warn("Vacuuming keys..."); keys.vacuum(); + logger.warn("Vacuuming messages..."); + messages.vacuum(); + Thread.sleep(3000); System.exit(0); }