Skip to content

Commit

Permalink
Add 'use-test-checksum-in-determinism-analyzer' config property to Ve…
Browse files Browse the repository at this point in the history
…rifier.
  • Loading branch information
spershin committed Feb 4, 2025
1 parent a8a6ffd commit f913c56
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ public abstract class AbstractVerification<B extends QueryBundle, R extends Matc
protected final String runningMode;
protected final boolean saveSnapshot;
protected final boolean isExplain;
protected final boolean isUseTestChecksumInDeterminismAnalyzer;
private final boolean concurrentControlAndTest;
protected final SnapshotQueryConsumer snapshotQueryConsumer;
protected final Map<String, SnapshotQuery> snapshotQueries;
Expand Down Expand Up @@ -131,6 +132,7 @@ public AbstractVerification(
this.runningMode = verifierConfig.getRunningMode();
this.saveSnapshot = verifierConfig.isSaveSnapshot();
this.isExplain = verifierConfig.isExplain();
this.isUseTestChecksumInDeterminismAnalyzer = verifierConfig.isUseTestChecksumInDeterminismAnalyzer();
}

protected abstract B getQueryRewrite(ClusterType clusterType);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public enum MatchType
private final DataType dataType;
private final MatchType matchType;
private final Optional<ChecksumResult> controlChecksum;
private final Optional<ChecksumResult> testChecksum;
private final OptionalLong controlRowCount;
private final OptionalLong testRowCount;
private final List<ColumnMatchResult<?>> mismatchedColumns;
Expand All @@ -61,13 +62,15 @@ public DataMatchResult(
DataType dataType,
MatchType matchType,
Optional<ChecksumResult> controlChecksum,
Optional<ChecksumResult> testChecksum,
OptionalLong controlRowCount,
OptionalLong testRowCount,
List<ColumnMatchResult<?>> mismatchedColumns)
{
this.dataType = requireNonNull(dataType, "data type is null");
this.matchType = requireNonNull(matchType, "match type is null");
this.controlChecksum = requireNonNull(controlChecksum, "controlChecksum is null");
this.testChecksum = requireNonNull(testChecksum, "testChecksum is null");
this.controlRowCount = requireNonNull(controlRowCount, "controlRowCount is null");
this.testRowCount = requireNonNull(testRowCount, "testRowCount is null");
this.mismatchedColumns = ImmutableList.copyOf(mismatchedColumns);
Expand Down Expand Up @@ -114,6 +117,12 @@ public ChecksumResult getControlChecksum()
return controlChecksum.get();
}

public ChecksumResult getTestChecksum()
{
checkState(testChecksum.isPresent(), "testChecksum is missing");
return testChecksum.get();
}

public List<ColumnMatchResult<?>> getMismatchedColumns()
{
return mismatchedColumns;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ public DataMatchResult verify(
DATA,
MATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.empty(),
OptionalLong.empty(),
ImmutableList.of());
Expand All @@ -146,7 +147,14 @@ else if (QUERY_BANK_MODE.equals(runningMode)) {
controlChecksumResult = ChecksumResult.fromJson(snapshotJson);
}
else {
return new DataMatchResult(DATA, SNAPSHOT_DOES_NOT_EXIST, Optional.empty(), OptionalLong.empty(), OptionalLong.empty(), Collections.emptyList());
return new DataMatchResult(
DATA,
SNAPSHOT_DOES_NOT_EXIST,
Optional.empty(),
Optional.empty(),
OptionalLong.empty(),
OptionalLong.empty(),
Collections.emptyList());
}
}

Expand All @@ -161,7 +169,7 @@ else if (QUERY_BANK_MODE.equals(runningMode)) {
@Override
protected DeterminismAnalysisDetails analyzeDeterminism(QueryObjectBundle control, DataMatchResult matchResult)
{
return determinismAnalyzer.analyze(control, matchResult.getControlChecksum());
return determinismAnalyzer.analyze(control, isUseTestChecksumInDeterminismAnalyzer ? matchResult.getTestChecksum() : matchResult.getControlChecksum());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ public static DataMatchResult match(
dataType,
SCHEMA_MISMATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.empty(),
OptionalLong.empty(),
ImmutableList.of());
Expand All @@ -107,6 +108,7 @@ public static DataMatchResult match(
dataType,
matchType,
Optional.of(controlChecksum),
Optional.of(testChecksum),
controlRowCount,
testRowCount,
mismatchedColumns);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ private Optional<DataMatchResult> verifyPartition(
PARTITION_DATA,
PARTITION_COUNT_MISMATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.of(controlPartitionChecksum.size()),
OptionalLong.of(testPartitionChecksum.size()),
ImmutableList.of()));
Expand All @@ -183,6 +184,7 @@ private Optional<DataMatchResult> verifyPartition(
PARTITION_DATA,
MATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.of(controlPartitionChecksum.size()),
OptionalLong.of(testPartitionChecksum.size()),
ImmutableList.of()));
Expand Down Expand Up @@ -212,6 +214,7 @@ private Optional<DataMatchResult> verifyBucket(
BUCKET_DATA,
BUCKET_COUNT_MISMATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.of(controlBucketChecksum.size()),
OptionalLong.of(testBucketChecksum.size()),
ImmutableList.of()));
Expand All @@ -232,6 +235,7 @@ private Optional<DataMatchResult> verifyBucket(
BUCKET_DATA,
MATCH,
Optional.empty(),
Optional.empty(),
OptionalLong.of(controlBucketChecksum.size()),
OptionalLong.of(testBucketChecksum.size()),
ImmutableList.of()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public class VerifierConfig
private boolean teardownOnMainClusters = true;
private boolean skipControl;
private boolean skipChecksum;
private boolean useTestChecksumInDeterminismAnalyzer;
private boolean concurrentControlAndTest;

private boolean explain;
Expand Down Expand Up @@ -314,7 +315,7 @@ public boolean isSetupOnMainClusters()
return setupOnMainClusters;
}

@ConfigDescription("If true, run control/test setup queries on control/test clusters. Otherwise, run setup queries on the help cluster.")
@ConfigDescription("If true, run control/test setup queries on control/test clusters. Otherwise, run setup queries on the help cluster.X")
@Config("setup-on-main-clusters")
public VerifierConfig setSetupOnMainClusters(boolean setupOnMainClusters)
{
Expand Down Expand Up @@ -361,6 +362,19 @@ public boolean isSkipChecksum()
return skipChecksum;
}

@ConfigDescription("In Determinism Analyzer use test checksum, not control to determine determinism. Set to true when running helper queries on test cluster.")
@Config("use-test-checksum-in-determinism-analyzer")
public VerifierConfig setUseTestChecksumInDeterminismAnalyzer(boolean useTestChecksumInDeterminismAnalyzer)
{
this.useTestChecksumInDeterminismAnalyzer = useTestChecksumInDeterminismAnalyzer;
return this;
}

public boolean isUseTestChecksumInDeterminismAnalyzer()
{
return useTestChecksumInDeterminismAnalyzer;
}

public boolean isExplain()
{
return explain;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ public void testDefault()
.setTeardownOnMainClusters(true)
.setSkipControl(false)
.setSkipChecksum(false)
.setUseTestChecksumInDeterminismAnalyzer(false)
.setExplain(false)
.setConcurrentControlAndTest(false)
.setRunningMode("control-test")
Expand Down Expand Up @@ -81,6 +82,7 @@ public void testExplicitPropertyMappings()
.put("teardown-on-main-clusters", "false")
.put("skip-control", "true")
.put("skip-checksum", "true")
.put("use-test-checksum-in-determinism-analyzer", "true")
.put("explain", "true")
.put("concurrent-control-and-test", "true")
.put("running-mode", "query-bank")
Expand Down Expand Up @@ -110,6 +112,7 @@ public void testExplicitPropertyMappings()
.setTeardownOnMainClusters(false)
.setSkipControl(true)
.setSkipChecksum(true)
.setUseTestChecksumInDeterminismAnalyzer(true)
.setExplain(true)
.setConcurrentControlAndTest(true)
.setRunningMode("query-bank")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public static <T extends ColumnChecksum> ColumnMatchResult<T> createMismatchedCo

public static DataMatchResult createMatchResult(ColumnMatchResult<?>... mismatchedColumns)
{
return new DataMatchResult(DATA, COLUMN_MISMATCH, Optional.empty(), OptionalLong.of(1L), OptionalLong.of(1L), asList(mismatchedColumns));
return new DataMatchResult(DATA, COLUMN_MISMATCH, Optional.empty(), Optional.empty(), OptionalLong.of(1L), OptionalLong.of(1L), asList(mismatchedColumns));
}

public static SqlVarbinary binary(int data)
Expand Down

0 comments on commit f913c56

Please sign in to comment.