[ https://issues.apache.org/jira/browse/PIG-1611?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12974755#action_12974755 ]
Thejas M Nair commented on PIG-1611: ------------------------------------ In my comments that follow, by 'error code' i mean a combination of error number, error message , error type (INPUT/BUG/USER_ENV..) and suggested action message. bq. One concern I have is that this approach of separate enums for each exception type will lead to a lot of duplicated code. .... They could be mitigated by carefully sectioning the file by error types, so conflicts would only happen when developers added error messages of the same type at the same time. Sectioning the enum file by error type would not work if it relies on enum ordinal position to generate the error number. So that the error number of existing errors don't change, new ones will always have to be added at the end. But if we require the error number to be specified for each ErrorCode as it is done in howl ErrorType that Ashutosh pointed to, we can have a single sectioned file that would lead to fewer merge conflicts. The downside of having to specify an error number is only a minor inconvenience. Moreover, if we are specifying the error number for each error code, we don't have to use something as restrictive as enums, the error codes can be 'static final' instances of the class specified in a single file. bq. Another comment is I think we should add a fourth field to the enums, suggestedAction. +1 bq. Why not change existing code? Is the change disruptive? It would be just minor change in lots of places (few hundred exceptions). Let me see if I can use some regex to do it fast. I agree that having the two forms would be confusing to developers. bq. Instead of creating new Exceptions (like UnionOnSchemaSetException) for all possible exception types, will it make sense just to have one Exception type (PigException) or may be few of top level one like (FrontEndException, BackEndException etc) and containing an enum ErrorType within it. ErrorType will contain the message and code for error. This patch/proposal does not affect the exception hierarchy, no new Exception classes are introduced . I created separate enum for each exception class just to avoid conflicts between merge. But now I think we can have it in one place and reduce chances of merge conflicts by not relying on enum-ordinal value to generate error code. bq. How does this approach account for the need to throw meaningful exceptions inside UDFs? It would be unfortunate if UDF authors needed to modify Pig core to add custom errors. I forgot to consider the UDF use case, thanks for bringing this up! It will not be possible to ensure that UDFs have distinct error code for all error messages they produce. The use of error code is not compulsory, so UDFs can create exceptions with just the error message. I think it would be good to have a few high level error codes that UDFs can use , for example error codes like - 'LoadFunc error: invalid input' or 'LoadFunc error: unknown error' . The UDF code will be able to add additional error message for the particular instance of the error. > use enums for error code > ------------------------ > > Key: PIG-1611 > URL: https://issues.apache.org/jira/browse/PIG-1611 > Project: Pig > Issue Type: Sub-task > Reporter: Thejas M Nair > Fix For: 0.9.0 > > Attachments: PIG-1611.1.patch > > > Pig code is using integer constants for error code, and the value of the > error code is reserved using > http://wiki.apache.org/pig/PigErrorHandlingFunctionalSpecification . > This process is cumbersome and error prone. > It will be better to use enum values instead. The enum value can contain the > error message and encapsulate the error code. > For example - > {code} > Replace > throw new SchemaMergeException("Error in merging schema", 2124, > PigException.BUG); > with > throw new SchemaMergeException(SCHEMA_MERGE_EX, PigException.BUG); > {code} > Where SCHEMA_MERGE_EX belongs to a error codes enum. We can use the ordinal > value of the enum and an offset to determine the error code. > The error code will be passed through the constructor of the enum. > {code} > SCHEMA_MERGE_EX("Error in merging schema"); > {code} > For documentation, the error code and error messages can be dumped using code > that uses the enum error code class. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.