Skip to content

Commit 0700ff2

Browse files
committed
[verifier] Adding ability to run checksum queries on test cluster.
1 parent ae68ae4 commit 0700ff2

File tree

7 files changed

+75
-5
lines changed

7 files changed

+75
-5
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/*
2+
* Licensed under the Apache License, Version 2.0 (the "License");
3+
* you may not use this file except in compliance with the License.
4+
* You may obtain a copy of the License at
5+
*
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
*
8+
* Unless required by applicable law or agreed to in writing, software
9+
* distributed under the License is distributed on an "AS IS" BASIS,
10+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11+
* See the License for the specific language governing permissions and
12+
* limitations under the License.
13+
*/
14+
package com.facebook.presto.verifier.annotation;
15+
16+
import javax.inject.Qualifier;
17+
18+
import java.lang.annotation.Retention;
19+
import java.lang.annotation.Target;
20+
21+
import static java.lang.annotation.ElementType.FIELD;
22+
import static java.lang.annotation.ElementType.METHOD;
23+
import static java.lang.annotation.ElementType.PARAMETER;
24+
import static java.lang.annotation.RetentionPolicy.RUNTIME;
25+
26+
@Retention(RUNTIME)
27+
@Target({FIELD, PARAMETER, METHOD})
28+
@Qualifier
29+
public @interface ForChecksum
30+
{
31+
}

presto-verifier/src/main/java/com/facebook/presto/verifier/framework/AbstractVerification.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,11 @@ protected PrestoAction getHelperAction()
166166
return queryActions.getHelperAction();
167167
}
168168

169+
protected PrestoAction getChecksumAction()
170+
{
171+
return queryActions.getChecksumAction();
172+
}
173+
169174
protected boolean isControlEnabled()
170175
{
171176
return !skipControl || saveSnapshot;

presto-verifier/src/main/java/com/facebook/presto/verifier/framework/DataVerification.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,20 +107,20 @@ public DataMatchResult verify(
107107
ChecksumQueryContext controlChecksumQueryContext,
108108
ChecksumQueryContext testChecksumQueryContext)
109109
{
110-
List<Column> testColumns = getColumns(getHelperAction(), typeManager, test.getObjectName());
110+
List<Column> testColumns = getColumns(getChecksumAction(), typeManager, test.getObjectName());
111111
Query testChecksumQuery = checksumValidator.generateChecksumQuery(test.getObjectName(), testColumns, test.getPartitionsPredicate());
112112
testChecksumQueryContext.setChecksumQuery(formatSql(testChecksumQuery));
113113

114114
List<Column> controlColumns = null;
115115
ChecksumResult controlChecksumResult = null;
116116

117117
if (isControlEnabled()) {
118-
controlColumns = getColumns(getHelperAction(), typeManager, control.getObjectName());
118+
controlColumns = getColumns(getChecksumAction(), typeManager, control.getObjectName());
119119
Query controlChecksumQuery = checksumValidator.generateChecksumQuery(control.getObjectName(), controlColumns, control.getPartitionsPredicate());
120120
controlChecksumQueryContext.setChecksumQuery(formatSql(controlChecksumQuery));
121121

122122
QueryResult<ChecksumResult> controlChecksum = callAndConsume(
123-
() -> getHelperAction().execute(controlChecksumQuery, CONTROL_CHECKSUM, ChecksumResult::fromResultSet),
123+
() -> getChecksumAction().execute(controlChecksumQuery, CONTROL_CHECKSUM, ChecksumResult::fromResultSet),
124124
stats -> stats.getQueryStats().map(QueryStats::getQueryId).ifPresent(controlChecksumQueryContext::setChecksumQueryId));
125125
controlChecksumResult = getOnlyElement(controlChecksum.getResults());
126126

@@ -151,7 +151,7 @@ else if (QUERY_BANK_MODE.equals(runningMode)) {
151151
}
152152

153153
QueryResult<ChecksumResult> testChecksum = callAndConsume(
154-
() -> getHelperAction().execute(testChecksumQuery, TEST_CHECKSUM, ChecksumResult::fromResultSet),
154+
() -> getChecksumAction().execute(testChecksumQuery, TEST_CHECKSUM, ChecksumResult::fromResultSet),
155155
stats -> stats.getQueryStats().map(QueryStats::getQueryId).ifPresent(testChecksumQueryContext::setChecksumQueryId));
156156
ChecksumResult testChecksumResult = getOnlyElement(testChecksum.getResults());
157157

presto-verifier/src/main/java/com/facebook/presto/verifier/prestoaction/QueryActions.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
public class QueryActions
2424
{
2525
private final PrestoAction helperAction;
26+
private final PrestoAction checksumAction;
2627
private final QueryAction controlAction;
2728
private final QueryAction testAction;
2829

29-
public QueryActions(PrestoAction helperAction, QueryAction controlAction, QueryAction testAction)
30+
public QueryActions(PrestoAction helperAction, PrestoAction checksumAction, QueryAction controlAction, QueryAction testAction)
3031
{
3132
this.helperAction = requireNonNull(helperAction, "helperAction is null");
33+
this.checksumAction = requireNonNull(helperAction, "checksumAction is null");
3234
this.controlAction = requireNonNull(controlAction, "controlAction is null");
3335
this.testAction = requireNonNull(testAction, "testAction is null");
3436
}
@@ -38,6 +40,11 @@ public PrestoAction getHelperAction()
3840
return helperAction;
3941
}
4042

43+
public PrestoAction getChecksumAction()
44+
{
45+
return checksumAction;
46+
}
47+
4148
public QueryAction getControlAction()
4249
{
4350
return controlAction;

presto-verifier/src/main/java/com/facebook/presto/verifier/prestoaction/QueryActionsConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public class QueryActionsConfig
2626
private String controlQueryActionType = JdbcPrestoAction.QUERY_ACTION_TYPE;
2727
private String testQueryActionType = JdbcPrestoAction.QUERY_ACTION_TYPE;
2828
private boolean runHelperQueriesOnControl = true;
29+
private boolean runChecksumQueriesOnControl;
2930

3031
private Duration metadataTimeout = new Duration(3, MINUTES);
3132
private Duration checksumTimeout = new Duration(30, MINUTES);
@@ -68,6 +69,18 @@ public QueryActionsConfig setRunHelperQueriesOnControl(boolean runHelperQueriesO
6869
return this;
6970
}
7071

72+
public boolean isRunChecksumQueriesOnControl()
73+
{
74+
return runChecksumQueriesOnControl;
75+
}
76+
77+
@Config("run-checksum-queries-on-control")
78+
public QueryActionsConfig setRunChecksumQueriesOnControl(boolean runChecksumQueriesOnControl)
79+
{
80+
this.runChecksumQueriesOnControl = runChecksumQueriesOnControl;
81+
return this;
82+
}
83+
7184
@MinDuration("1s")
7285
public Duration getMetadataTimeout()
7386
{

presto-verifier/src/main/java/com/facebook/presto/verifier/prestoaction/QueryActionsModule.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
package com.facebook.presto.verifier.prestoaction;
1515

1616
import com.facebook.airlift.configuration.AbstractConfigurationAwareModule;
17+
import com.facebook.presto.verifier.annotation.ForChecksum;
1718
import com.facebook.presto.verifier.annotation.ForControl;
1819
import com.facebook.presto.verifier.annotation.ForHelper;
1920
import com.facebook.presto.verifier.annotation.ForTest;
@@ -84,6 +85,14 @@ protected void setup(Binder binder)
8485
configBinder(binder).bindConfig(PrestoActionConfig.class, ForHelper.class, "helper");
8586
binder.bind(PrestoActionFactory.class).annotatedWith(ForHelper.class).toProvider(new JdbcPrestoActionFactoryProvider(ForHelper.class)).in(SINGLETON);
8687
}
88+
if (config.isRunChecksumQueriesOnControl()) {
89+
checkArgument(controlQueryActionType.equals(JdbcPrestoAction.QUERY_ACTION_TYPE), "Cannot run checksum queries on control cluster because it is not a presto-jdbc action");
90+
binder.bind(PrestoActionFactory.class).annotatedWith(ForChecksum.class).toProvider(new JdbcPrestoActionFactoryProvider(ForControl.class)).in(SINGLETON);
91+
}
92+
else {
93+
checkArgument(testQueryActionType.equals(JdbcPrestoAction.QUERY_ACTION_TYPE), "Cannot run checksum queries on test cluster because it is not a presto-jdbc action");
94+
binder.bind(PrestoActionFactory.class).annotatedWith(ForChecksum.class).toProvider(new JdbcPrestoActionFactoryProvider(ForTest.class)).in(SINGLETON);
95+
}
8796
}
8897

8998
public static class JdbcPrestoActionFactoryProvider

presto-verifier/src/main/java/com/facebook/presto/verifier/prestoaction/QueryActionsProvider.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
*/
1414
package com.facebook.presto.verifier.prestoaction;
1515

16+
import com.facebook.presto.verifier.annotation.ForChecksum;
1617
import com.facebook.presto.verifier.annotation.ForControl;
1718
import com.facebook.presto.verifier.annotation.ForHelper;
1819
import com.facebook.presto.verifier.annotation.ForTest;
@@ -26,16 +27,19 @@ public class QueryActionsProvider
2627
implements QueryActionsFactory
2728
{
2829
private final PrestoActionFactory helpActionFactory;
30+
private final PrestoActionFactory checksumActionFactory;
2931
private final QueryActionFactory controlActionFactory;
3032
private final QueryActionFactory testActionFactory;
3133

3234
@Inject
3335
public QueryActionsProvider(
3436
@ForHelper PrestoActionFactory helpActionFactory,
37+
@ForChecksum PrestoActionFactory checksumActionFactory,
3538
@ForControl QueryActionFactory controlActionFactory,
3639
@ForTest QueryActionFactory testActionFactory)
3740
{
3841
this.helpActionFactory = requireNonNull(helpActionFactory, "helpActionFactory is null");
42+
this.checksumActionFactory = requireNonNull(checksumActionFactory, "checksumActionFactory is null");
3943
this.controlActionFactory = requireNonNull(controlActionFactory, "controlActionFactory is null");
4044
this.testActionFactory = requireNonNull(testActionFactory, "testActionFactory is null");
4145
}
@@ -44,6 +48,7 @@ public QueryActions create(SourceQuery sourceQuery, VerificationContext verifica
4448
{
4549
return new QueryActions(
4650
helpActionFactory.create(sourceQuery.getControlConfiguration(), verificationContext),
51+
checksumActionFactory.create(sourceQuery.getTestConfiguration(), verificationContext),
4752
controlActionFactory.create(sourceQuery.getControlConfiguration(), verificationContext),
4853
testActionFactory.create(sourceQuery.getTestConfiguration(), verificationContext));
4954
}

0 commit comments

Comments
 (0)