----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/32795/ -----------------------------------------------------------
(Updated April 15, 2015, 4:45 p.m.) Review request for drill, abdelhakim deneche, Chris Westin, and Jacques Nadeau. Changes ------- Addressing Chris' comments and rebased on current master. + Changed OptionValidator interface so that validators for short-lived options need to override two methods. Repository: drill-git Description ------- [DRILL-2383](https://issues.apache.org/jira/browse/DRILL-2383): Support to inject exceptions and pauses in various components of Drill + Controls can be introduced in any class that has access to FragmentContext/QueryContext + Controls are fired only if assertions are enabled + Controls can be fired by altering the DRILLBIT_CONTROL_INJECTIONS session option + Renames: SimulatedExceptions => ExecutionControls, ExceptionInjector => ExecutionControlsInjector + Added injection sites in Foreman, DrillSqlWorker, FragmentExecutor + Unit tests in TestDrillbitResilience, TestExceptionInjection and TestPauseInjection Other commits included: + [DRILL-2437](https://issues.apache.org/jira/browse/DRILL-2437): Moved ExecutionControls from DrillbitContext to FragmentContext/QueryContext + [DRILL-2382](https://issues.apache.org/jira/browse/DRILL-2382): Added address and port to Injection to specify drillbit + [DRILL-2384](https://issues.apache.org/jira/browse/DRILL-2384): Added QueryState to SingleRowListener and assert that state is COMPLETED while testing Other edits: + Support for short lived session options in SessionOptionManager (using TTL in OptionValidator) + Introduced query count in UserSession + Added QueryState to queryCompleted() in UserResultsListener to check if COMPLETED/CANCELED + Added JSONStringValidator to TypeValidators + Log query id as string in DrillClient, WorkEventBus, QueryResultHandler + Use try..catch block only around else clause for OptionList in FragmentContext + Fixed drillbitContext spelling error in QueryContext + Do not call setLocalOption twice in FallbackOptionManager + Show explicitly that submitWork() returns queryId in UserServer + Updated protocol/readme.txt to include an alternative way to generate sources ===== USAGE: Current checked exception sites: + Foreman: run-try-beginning (ForemanException), run-try-end (ForemanException), send-fragments (ForemanException) + DrillSqlWorker: sql-parsing (ForemanSetupException) + FragmentExecutor: fragment-execution (IOException) Current pause sites: + Foreman: pause-run-plan To set controls: ``` > ALTER SESSION SET `drill.exec.testing.controls`='{ "injections":[ { "type":"exception", "siteClass": "org.apache.drill.exec.work.fragment.FragmentExecutor", "desc": "fragment-execution", "nSkip": 0, "nFire": 1, "exceptionClass": "java.io.IOException", "address": "10.10.10.10", "port": 31019 }, { "type":"pause", "siteClass": "org.apache.drill.exec.work.foreman.Foreman", "desc": "pause-run-plan", "nSkip": 0, "nFire": 1, "millis": 5000 } ] }'; ``` NOTE: (1) If controls are specified, they are passed to every fragment as part of PlanFragment. Then onwards, ExecutionControls live in FragmentContext. And since FragmentContext is created for every fragment, injections will be fired on ALL fragments. (2) address and port are optional. If they are set, that injection will be fired ONLY on specified drillbit. If they are not set, the injection will be fired on EVERY drillbit. Diffs (updated) ----- exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java 7d89ac9 exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java 6555cad exec/java-exec/src/main/java/org/apache/drill/exec/client/PrintingResultsListener.java a11cec0 exec/java-exec/src/main/java/org/apache/drill/exec/ops/FragmentContext.java 8c402e8 exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java 2fa0b18 exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java 7892999 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/control/WorkEventBus.java a5a5441 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/QueryResultHandler.java a03e2c0 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserResultsListener.java b9f742c exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserServer.java 877bc08 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java 19d77b0 exec/java-exec/src/main/java/org/apache/drill/exec/server/DrillbitContext.java dbf3c74 exec/java-exec/src/main/java/org/apache/drill/exec/server/options/FallbackOptionManager.java 4e90616 exec/java-exec/src/main/java/org/apache/drill/exec/server/options/OptionManager.java 0b8811a exec/java-exec/src/main/java/org/apache/drill/exec/server/options/OptionValidator.java 43071e7 exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SessionOptionManager.java c3de190 exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java 4471d4f exec/java-exec/src/main/java/org/apache/drill/exec/server/options/TypeValidators.java b9721cc exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java 8415440 exec/java-exec/src/main/java/org/apache/drill/exec/testing/ExceptionInjection.java 68cbf08 exec/java-exec/src/main/java/org/apache/drill/exec/testing/ExceptionInjector.java 54bc351 exec/java-exec/src/main/java/org/apache/drill/exec/testing/ExecutionControls.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/ExecutionControlsInjector.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/Injection.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/InjectionConfigurationException.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/InjectionSite.java 9e19fdd exec/java-exec/src/main/java/org/apache/drill/exec/testing/NoOpControlsInjector.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/PauseInjection.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/testing/SimulatedExceptions.java 0292c08 exec/java-exec/src/main/java/org/apache/drill/exec/work/foreman/Foreman.java 0df5145 exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java 58f4256 exec/java-exec/src/main/java/org/apache/drill/exec/work/user/UserWorker.java 854f474 exec/java-exec/src/test/java/org/apache/drill/BaseTestQuery.java 6df5801 exec/java-exec/src/test/java/org/apache/drill/PlanningBase.java 264123f exec/java-exec/src/test/java/org/apache/drill/SingleRowListener.java 715904d exec/java-exec/src/test/java/org/apache/drill/exec/compile/TestClassTransformation.java f5f5b8d exec/java-exec/src/test/java/org/apache/drill/exec/server/TestDrillbitResilience.java 69c274c exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/ParquetResultListener.java 3bcfbdf exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetPhysicalPlan.java cde2e95 exec/java-exec/src/test/java/org/apache/drill/exec/testing/ControlsInjectionUtil.java PRE-CREATION exec/java-exec/src/test/java/org/apache/drill/exec/testing/ExceptionInjectionUtil.java bf93dee exec/java-exec/src/test/java/org/apache/drill/exec/testing/TestExceptionInjection.java d0c0279 exec/java-exec/src/test/java/org/apache/drill/exec/testing/TestPauseInjection.java PRE-CREATION exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java a9753bc protocol/readme.txt bd516d3 Diff: https://reviews.apache.org/r/32795/diff/ Testing ------- Unit tests in TestDrillbitResilience, TestExceptionInjection and TestPauseInjection. Successful Jenkins builds. Thanks, Sudheesh Katkam
