Dear Wiki user, You have subscribed to a wiki page or wiki category on "Pig Wiki" for change notification.
The following page has been changed by SanthoshSrinivasan: http://wiki.apache.org/pig/PigDeveloperCookbook ------------------------------------------------------------------------------ * For `Internal Errors`, throw `RuntimeException` or its derivation. Catch the exception in main, log it, including the stack, to the client side log. Write failure message to stderr pointing to the log file. - * For `Frontend Errors`, throw `FrontendException` or a subclass of `FrontendException`. Catch the exception in main, log it, including the stack, to the client side log. Write failure message to stderr pointing to the log file. The front-end consists of multiple components - parser, type checker, optimizer, translators, etc. All the errors from these components can be categorized as front-end errors. Components that are part of the front end will throw specific exceptions that capture the context. For example, the parser throws a `ParseException`, the type checker will throw a `TypeCheckerException`, etc. A list of the exceptions thrown in the front-end are as follows. + * For `Frontend Errors`, throw `FrontendException` or a subclass of `FrontendException`. Catch the exception in main, log it, including the stack, to the client side log. Write failure message to stderr pointing to the log file. The front-end consists of multiple components - parser, type checker, optimizer, translators, etc. All the errors from these components can be categorized as front-end errors. Components that are part of the front end will throw specific exceptions that capture the context. For example, the parser throws a `ParseException`, the type checker will throw a `TypeCheckerException`, etc. A list of the exceptions thrown in the front-end are as follows. More information is available at [#funcspec error handling functional specification]. 1. `FrontendException` Generic front-end exception (subclass of `PigException`). Also used for indicating semantic errors and to wrap user errors from generated class `ParseException` 1. `JobCreationException` Used for indicating errors during Map Reduce job creation (subclass of `FrontendException`) @@ -36, +36 @@ * For `Backend Errors` there will need to be backend specific way to get the error from the backend to the frontend. Once this is done, log the error into client side log file and throw `ExecuteException`. Catch the exception in main, log it, including the stack, to the client side log. Write failure message to stderr pointing to the log file. + + === Using the exception classes === + + The `PigException` and its subclasses have an extensive suite of constructors. The important constructors are noted below: + + 1. `PigException (String message, int errCode, byte errSrc)` + 1. `PigException (String message, int errCode, byte errSrc, Throwable cause)` + + * The parameter `message` denotes the error message associated with the exception. The error message should be easy to read and minimize the use of technical jargon to the extent possible. + * The parameter `errCode` is the error code unique to the error message. The classification of error codes is documented in [#funcspec error handling functional specification] + * The parameter `errSrc` indicates the source or nature of the error. The input sources are one of: + 1. `PigException.BUG` + 1. `PigException.INPUT` + 1. `PigException.REMOTE_ENVIRONMENT` + 1. `PigException.USER_ENVIRONMENT` + * In cases where exceptions are wrapped or embedded, the fourth parameter `cause` will be a reference to the originating exception. + + A couple of examples will illustrate the point. + + {{{#!java + throw new PigException("Expected bytearray but received int", 1300, PigException.INPUT); + + //alternatively + int errCode = 1300; + String msg = "Expected bytearray but received int"; + throw new PigException(msg, errCode, PigException.INPUT); + + try { + ... + } catch (RemoteException re) { + throw new PigException("Internal error. Caught some other exception", 5500, PigException.REMOTE_ENVIRONMENT, re); + } + + //alternatively + try { + ... + } catch (RemoteException re) { + int errCode = 5500; + String msg = "Internal error. Caught some other exception"; + throw new PigException(msg, errCode, PigException.REMOTE_ENVIRONMENT, re); + } + + }}} + == Pig and Eclipse == To use Pig with the Eclipse IDE, see ["Eclipse Environment"]. + == References == + 1. [[Anchor(funcspec)]] Santhosh Srinivasan, "Pig Error Handling Functional Specification" January 23, 2009, http://wiki.apache.org/pig/PigErrorHandlingFunctionalSpecification +