Skip to content

Commit

Permalink
Make determinism analysis run count configurable
Browse files Browse the repository at this point in the history
  • Loading branch information
caithagoras0 authored and mbasmanova committed Dec 4, 2019
1 parent bba5aa2 commit 5de945e
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 3 deletions.
2 changes: 2 additions & 0 deletions presto-docs/src/main/sphinx/installation/verifier.rst
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,6 @@ Name Description
test clusters combined.
``relative-error-margin`` Specified the maximum tolerable relative error between control and test
queries for floating point columns.
``max-determinism-analysis-runs`` Maximum number of reruns of the control queries in case of a result
mismatch to determine whether the query is deterministic.
================================= =======================================================================
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ public class DataVerification
private final ChecksumValidator checksumValidator;
private final LimitQueryDeterminismAnalyzer limitQueryDeterminismAnalyzer;

private final int maxDeterminismAnalysisRuns;

public DataVerification(
VerificationResubmitter verificationResubmitter,
PrestoAction prestoAction,
Expand All @@ -77,6 +79,7 @@ public DataVerification(
this.typeManager = requireNonNull(typeManager, "typeManager is null");
this.checksumValidator = requireNonNull(checksumValidator, "checksumValidator is null");
this.limitQueryDeterminismAnalyzer = requireNonNull(limitQueryDeterminismAnalyzer, "limitQueryDeterminismAnalyzer is null");
this.maxDeterminismAnalysisRuns = verifierConfig.getMaxDeterminismAnalysisRuns();
}

@Override
Expand Down Expand Up @@ -108,7 +111,7 @@ protected DeterminismAnalysis analyzeDeterminism(QueryBundle control, ChecksumRe
List<QueryBundle> queryBundles = new ArrayList<>();

try {
for (int i = 0; i < 2; i++) {
for (int i = 0; i < maxDeterminismAnalysisRuns; i++) {
QueryBundle queryBundle = getQueryRewriter().rewriteQuery(getSourceQuery().getControlQuery(), CONTROL);
queryBundles.add(queryBundle);
DeterminismAnalysisRun.Builder run = getVerificationContext().startDeterminismAnalysisRun().setTableName(queryBundle.getTableName().toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public class VerifierConfig
private double relativeErrorMargin = 1e-4;
private double absoluteErrorMargin = 1e-12;
private boolean runTearDownOnResultMismatch;
private int maxDeterminismAnalysisRuns = 2;
private boolean enableLimitQueryDeterminismAnalyzer = true;
private int verificationResubmissionLimit = 2;

Expand Down Expand Up @@ -232,6 +233,19 @@ public VerifierConfig setRunTearDownOnResultMismatch(boolean runTearDownOnResult
return this;
}

@Min(0)
public int getMaxDeterminismAnalysisRuns()
{
return maxDeterminismAnalysisRuns;
}

@Config("max-determinism-analysis-runs")
public VerifierConfig setMaxDeterminismAnalysisRuns(int maxDeterminismAnalysisRuns)
{
this.maxDeterminismAnalysisRuns = maxDeterminismAnalysisRuns;
return this;
}

public boolean isEnableLimitQueryDeterminismAnalyzer()
{
return enableLimitQueryDeterminismAnalyzer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,15 @@ public void setupClass()
}

private DataVerification createVerification(String controlQuery, String testQuery)
{
return createVerification(controlQuery, testQuery, new VerifierConfig().setTestId(TEST_ID));
}

private DataVerification createVerification(String controlQuery, String testQuery, VerifierConfig verifierConfig)
{
QueryConfiguration configuration = new QueryConfiguration(CATALOG, SCHEMA, Optional.of("user"), Optional.empty(), Optional.empty());
VerificationContext verificationContext = new VerificationContext();
RetryConfig retryConfig = new RetryConfig();
VerifierConfig verifierConfig = new VerifierConfig().setTestId(TEST_ID);
PrestoAction prestoAction = new JdbcPrestoAction(
new PrestoExceptionClassifier(ImmutableSet.of(), ImmutableSet.of()),
configuration,
Expand Down Expand Up @@ -241,7 +245,9 @@ public void testNonDeterministic()
@Test
public void testArrayOfRow()
{
Optional<VerifierQueryEvent> event = createVerification("SELECT ARRAY[ROW(1, 'a'), ROW(2, null)]", "SELECT ARRAY[ROW(1, 'a'), ROW(2, null)]").run();
Optional<VerifierQueryEvent> event = createVerification(
"SELECT ARRAY[ROW(1, 'a'), ROW(2, null)]", "SELECT ARRAY[ROW(1, 'a'), ROW(2, null)]",
new VerifierConfig().setTestId(TEST_ID).setMaxDeterminismAnalysisRuns(3)).run();
assertTrue(event.isPresent());
assertEvent(event.get(), SUCCEEDED, Optional.empty(), Optional.empty(), Optional.empty());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public void testDefault()
.setRelativeErrorMargin(1e-4)
.setAbsoluteErrorMargin(1e-12)
.setRunTearDownOnResultMismatch(false)
.setMaxDeterminismAnalysisRuns(2)
.setEnableLimitQueryDeterminismAnalyzer(true)
.setVerificationResubmissionLimit(2));
}
Expand All @@ -62,6 +63,7 @@ public void testExplicitPropertyMappings()
.put("relative-error-margin", "2e-5")
.put("absolute-error-margin", "1e-14")
.put("run-teardown-on-result-mismatch", "true")
.put("max-determinism-analysis-runs", "3")
.put("enable-limit-query-determinism-analyzer", "false")
.put("verification-resubmission.limit", "1")
.build();
Expand All @@ -79,6 +81,7 @@ public void testExplicitPropertyMappings()
.setRelativeErrorMargin(2e-5)
.setAbsoluteErrorMargin(1e-14)
.setRunTearDownOnResultMismatch(true)
.setMaxDeterminismAnalysisRuns(3)
.setEnableLimitQueryDeterminismAnalyzer(false)
.setVerificationResubmissionLimit(1);

Expand Down

0 comments on commit 5de945e

Please sign in to comment.