----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/32987/ -----------------------------------------------------------
(Updated April 11, 2015, 5:07 a.m.) Review request for drill, Jacques Nadeau, Jason Altekruse, and Parth Chandra. Changes ------- - UserResultListener.submissionFailed(DrillUserException) instead of RpcException - fix unit tests that were expecting RpcException and improve the ones that were extracting the exception className and message from the RpcException message - DrillUserException.Builder is the only way one can create user exceptions JsonRecordReader.handleAndRaise() gives a good example of how to use DrillUserException.Builder - ErrorHelper.wrap(Throwable e) wraps exception inside a system exception if it's not already a DrillUserException I still need to improve the exception context to accept DrillbitEndpoint and FragmentContext... Bugs: DRILL-2675 https://issues.apache.org/jira/browse/DRILL-2675 Repository: drill-git Description ------- **INITIAL PATCH** with a working solution. This patch cleans the path for errors, especially user errors with meaningful messages, to be propagated properly to the client. The patch includes changes to 2 existing use cases where the error message was successfully improved. The general idea is: if a code wants to throw an exception that contains a meaningful error message, it throws a DrillUserException. The propagation code will make sure this exception is propagated to the client. The user exception object doesn't contain the final error message, but enough information about the error, the client will use this information to display a better error message. Any exception that is not a DrillUserException (or one of it's subclasses) will be considered as a system exception. For those exceptions the client will only display the error id and drillbit identity in case the user wants to check the logs for more informations about the error. Error objects sent to the client will still contain a stack trace that can be used to display more information if the client has enabled the error verbose mode. Diffs (updated) ----- common/src/main/java/org/apache/drill/common/exceptions/DrillRemoteException.java PRE-CREATION common/src/main/java/org/apache/drill/common/exceptions/DrillUserException.java PRE-CREATION common/src/main/java/org/apache/drill/common/exceptions/ErrorHelper.java PRE-CREATION common/src/main/java/org/apache/drill/common/exceptions/UserExceptionContext.java PRE-CREATION exec/java-exec/src/main/java/org/apache/drill/exec/client/DrillClient.java 9a948fb exec/java-exec/src/main/java/org/apache/drill/exec/client/PrintingResultsListener.java 98948af exec/java-exec/src/main/java/org/apache/drill/exec/ops/FragmentContext.java 18b93e9 exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScreenCreator.java 8038527 exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/broadcastsender/BroadcastSenderRootExec.java d17fdd4 exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/partitionsender/StatusHandler.java 5e21878 exec/java-exec/src/main/java/org/apache/drill/exec/planner/sql/DrillSqlWorker.java b98778d exec/java-exec/src/main/java/org/apache/drill/exec/rpc/CoordinationQueue.java 0016d6a exec/java-exec/src/main/java/org/apache/drill/exec/rpc/RemoteRpcException.java 14ea873 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/RpcBus.java b974963 exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/QueryResultHandler.java a1be83b exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserResultsListener.java 934a094 exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java fbbf0b8 exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java cc7cb83 exec/java-exec/src/main/java/org/apache/drill/exec/work/ErrorHelper.java 0773d6c exec/java-exec/src/main/java/org/apache/drill/exec/work/foreman/Foreman.java 23ef0d3 exec/java-exec/src/main/java/org/apache/drill/exec/work/foreman/QueryManager.java 8626d5b exec/java-exec/src/main/java/org/apache/drill/exec/work/foreman/SqlUnsupportedException.java 2299afa exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/AbstractStatusReporter.java 1b0885d exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/FragmentExecutor.java a7e6c46 exec/java-exec/src/main/java/org/apache/drill/exec/work/fragment/StatusReporter.java 26b5d68 exec/java-exec/src/test/java/org/apache/drill/BaseTestQuery.java 0c2f0e5 exec/java-exec/src/test/java/org/apache/drill/SingleRowListener.java 5703bf9 exec/java-exec/src/test/java/org/apache/drill/TestBugFixes.java 875fb25 exec/java-exec/src/test/java/org/apache/drill/TestDisabledFunctionality.java f62f060 exec/java-exec/src/test/java/org/apache/drill/TestStarQueries.java effef9b exec/java-exec/src/test/java/org/apache/drill/TestUnionAll.java 11d83f9 exec/java-exec/src/test/java/org/apache/drill/exec/server/TestDrillbitResilience.java e03098a exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/ParquetResultListener.java 55f0d75 exec/java-exec/src/test/java/org/apache/drill/exec/store/parquet/TestParquetPhysicalPlan.java 882cdbd exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillCursor.java 3b38a09 exec/jdbc/src/main/java/org/apache/drill/jdbc/DrillResultSet.java 74900bc protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java f72d5e1 protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java ac1bcbb protocol/src/main/java/org/apache/drill/exec/proto/beans/DrillPBError.java ac9cef5 protocol/src/main/protobuf/UserBitShared.proto 2938114 Diff: https://reviews.apache.org/r/32987/diff/ Testing (updated) ------- Unit tests are passing Thanks, abdelhakim deneche