From bacf524ae60be2f461f5ba359bd35f31d92c8f6e Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Tue, 18 May 2021 14:21:29 -0500 Subject: [PATCH] Add optional logging for mismatches --- ...ccountsDynamoDbMigrationConfiguration.java | 7 +++++++ .../storage/AccountsManager.java | 21 ++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicAccountsDynamoDbMigrationConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicAccountsDynamoDbMigrationConfiguration.java index 05e72227f..5333e6047 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicAccountsDynamoDbMigrationConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/configuration/dynamic/DynamicAccountsDynamoDbMigrationConfiguration.java @@ -20,6 +20,9 @@ public class DynamicAccountsDynamoDbMigrationConfiguration { @JsonProperty boolean readEnabled; + @JsonProperty + boolean logMismatches; + public boolean isBackgroundMigrationEnabled() { return backgroundMigrationEnabled; } @@ -52,4 +55,8 @@ public class DynamicAccountsDynamoDbMigrationConfiguration { public boolean isReadEnabled() { return readEnabled; } + + public boolean isLogMismatches() { + return logMismatches; + } } 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 af01f979f..2e41b4b83 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -498,7 +498,7 @@ public class AccountsManager { try { final T dynamoResult = callable.call(); - compare(databaseResult, dynamoResult, mismatchClassifier, action); + compare(databaseResult, dynamoResult, mismatchClassifier, action, maybeUuid); } catch (final Exception e) { logger.error("Error running " + action + " in Dynamo", e); @@ -507,16 +507,23 @@ public class AccountsManager { } } - private void compare(final T databaseResult, final T dynamoResult, final BiFunction> mismatchClassifier, final String action) { + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + private void compare(final T databaseResult, final T dynamoResult, final BiFunction> mismatchClassifier, final String action, final Optional maybeUUid) { DYNAMO_MIGRATION_COMPARISON_COUNTER.increment(); mismatchClassifier.apply(databaseResult, dynamoResult) - .ifPresent(mismatchType -> - Metrics.counter(DYNAMO_MIGRATION_MISMATCH_COUNTER_NAME, - "mismatchType", action + ":" + mismatchType) - .increment() - ); + .ifPresent(mismatchType -> { + final String mismatchDescription = action + ":" + mismatchType; + Metrics.counter(DYNAMO_MIGRATION_MISMATCH_COUNTER_NAME, + "mismatchType", mismatchDescription) + .increment(); + + if (maybeUUid.isPresent() + && dynamicConfigurationManager.getConfiguration().getAccountsDynamoDbMigrationConfiguration().isLogMismatches()) { + logger.info("Mismatched {} for {}", mismatchDescription, maybeUUid.get()); + } + }); } private static abstract class AccountComparisonMixin extends Account {