> On April 14, 2015, 3:31 p.m., Jacques Nadeau wrote:
> > General comment on improving pattern.  I propose the calling pattern to be 
> > as follows:
> > 
> > (1) 
> > throw UserException.wrap(e)
> >       .type(ErrorType.DATA_READ)
> >       .message(%s - %s, suffix)
> >       .addContext("File Name", "/myfile")
> >       .addContext("Line Number", 4)
> >       .build();
> > 
> > or
> > 
> > (2)
> > throw UserException.create()
> >       .type(ErrorType.DATA_READ)
> >       .message(%s - %s, suffix)
> >       .addContext("File Name", "/myfile")
> >       .addContext("Line Number", 4)
> >       .build();
> > 
> > 
> > For (1), this will generate a new message if the exception tree doesn't 
> > have a UserException.  If it does have a UserException, the type and 
> > message will be dropped but the context will be added.  For (2), we're 
> > creating a new exception explicitly because we don't have a causing 
> > exception to pass in.
> > 
> > Do you think this will cover the key cases?
> > 
> > I think we don't need "Drill" as part of UserException.  I also think that 
> > all constructors for UserException and its children should be hidden and 
> > all entry should be through create() or wrap().
> 
> abdelhakim deneche wrote:
>     How about the following:
>     (1) 
>     ```
>     throw UserException.wrapAsDataRead(e)
>           .message(%s - %s, suffix)
>           .addContext("File Name", "/myfile")
>           .addContext("Line Number", 4)
>           .build();
>     ```
>     or
>     
>     (2)
>     ```
>     throw UserException.createDataRead()
>           .message(%s - %s, suffix)
>           .addContext("File Name", "/myfile")
>           .addContext("Line Number", 4)
>           .build();
>     ```
>     
>     This way we don't have to import the ErrorType, which most of the time 
> displays as UserBitShared.DrillPBError.ErrorType by default (at least in 
> IntelliJ). This way I can also make impossible for the developer to create or 
> wrap inside a SystemError.
> 
> Jacques Nadeau wrote:
>     That is fine, although then I would be inclined to get rid of wrap versus 
> create.  For example
>     
>     throw UserException.dataRead(e)
>           .message(%s - %s, suffix)
>           .addContext("File Name", "/myfile")
>           .addContext("Line Number", 4)
>           .build();
> 
> abdelhakim deneche wrote:
>     I made the change, and the builder become so easy to use. Some of the 
> calls can be somewhat ambiguous:
>     ```
>     UserException.connection()...
>     UserException.function()...
>     UserException.parse()...
>     ```
>     Is it okay, or should we change them to something like this:
>     ```
>     UserException.dataReadError()...
>     UserException.connectionError()...
>     UserException.functionError()...
>     UserException.parseError()...
>     ...
>     ```
>     
>     ?

I agree.  I think xxxError() is clearer and everybody has autocompletion, right?


- Jacques


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


On April 13, 2015, 5:55 p.m., abdelhakim deneche wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/32987/
> -----------------------------------------------------------
> 
> (Updated April 13, 2015, 5:55 p.m.)
> 
> 
> Review request for drill, Jacques Nadeau, Jason Altekruse, and Parth Chandra.
> 
> 
> 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
> -----
> 
>   
> 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 
>   
> common/src/test/java/org/apache/drill/common/exceptions/TestDrillUserException.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 
> da2229c 
>   
> exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/ScreenCreator.java
>  6b3caf4 
>   
> 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
> -------
> 
> Unit tests are passing. Regression, customer and tpch100 are successful
> 
> 
> Thanks,
> 
> abdelhakim deneche
> 
>

Reply via email to