-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/32987/
-----------------------------------------------------------

(Updated April 9, 2015, 5:20 p.m.)


Review request for drill and Jacques Nadeau.


Changes
-------

This is an improved patch. Error propagation has been improved, and it should 
be easier for developer to send meaningful error messages to the client without 
having the message being lost or mangled before reaching the client.

**Changes since the last patch**
- DrillSystemException will display the root error message of the wrapped 
exception
 . from the user perspective, this will keep Drill behaviour the same when 
reporting errors that don't have **yet** a proper user error message
- DrillUserException.getMessage() generates the error message that will be sent 
to the client
 . we don't need ErrorHelper to build the message from protobuf error object
 . logging a DrillUserException will display the proper error message in the 
logs
- added DrillUnsupportedOperationException
- moved some error message generation logic from DrillParseException to 
DrillSqlWorker
- DrillUserException constructor expects an ErrorType. This allows it to build 
the final error message itself
- DrillUserException.addContext(String) can be used to add more context to 
existing user exceptions
 . subclasses of DrillUserException don't need to hold specific context fields
 . it is easier to add context to an existing user exception without knowing 
it's specific type
 . the error message generation can be centralized in 
DrillUserException.getMessage()
- the final error message is generated on the server side and sent to the 
client through a DrillPBError's message field
 . we don't need to update the clients each time we add a new context field to 
user exceptions
- JsonRecordReader first checks if the exception catched is not already a user 
exception, in this case it will just add more context to it and throw it, 
otherwise it will create a DrillDataReadException
- reverted my changes in proto objects DrillPBError and QueryResult, the only 
change left is the ErrorType enum

I still need to do some cleanup and add the remaining user exception types.


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/DrillDataReadException.java
 PRE-CREATION 
  
common/src/main/java/org/apache/drill/common/exceptions/DrillParseException.java
 PRE-CREATION 
  
common/src/main/java/org/apache/drill/common/exceptions/DrillRemoteException.java
 PRE-CREATION 
  
common/src/main/java/org/apache/drill/common/exceptions/DrillSystemException.java
 PRE-CREATION 
  
common/src/main/java/org/apache/drill/common/exceptions/DrillUnsupportedOperationException.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 
  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/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/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 
  protocol/src/main/java/org/apache/drill/exec/proto/SchemaUserBitShared.java 
f72d5e1 
  protocol/src/main/java/org/apache/drill/exec/proto/UserBitShared.java 9a9d196 
  protocol/src/main/java/org/apache/drill/exec/proto/beans/DrillPBError.java 
ac9cef5 
  protocol/src/main/protobuf/UserBitShared.proto 5e44655 

Diff: https://reviews.apache.org/r/32987/diff/


Testing
-------


Thanks,

abdelhakim deneche

Reply via email to