diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
index cc91c06..be49396 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
@@ -424,7 +424,7 @@
         try {
             clauses = parser.Clauses();
         } catch (ParseException e) {
-            throw CompilationException.create(ErrorCode.COMPILATION_TRANSLATION_ERROR, e);
+            throw CompilationException.create(ErrorCode.COMPILATION_TRANSLATION_ERROR, String.valueOf(e), e);
         }
 
         // Step 4. The essential substitution with translator.
@@ -432,7 +432,7 @@
         try {
             plan = translator.translate(clauses);
         } catch (CompilationException e) {
-            throw CompilationException.create(ErrorCode.COMPILATION_TRANSLATION_ERROR, e);
+            throw CompilationException.create(ErrorCode.COMPILATION_TRANSLATION_ERROR, String.valueOf(e), e);
         }
         context.setVarCounter(counter.get());
 
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
index 5acdf3b..f705b89 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
@@ -112,8 +112,7 @@
                 ResultUtil.printResults(appCtx, resultReader, sessionOutput, new Stats(), null);
             }
         } catch (HyracksDataException e) {
-            final int errorCode = e.getErrorCode();
-            if (ErrorCode.NO_RESULT_SET == errorCode) {
+            if (e.matches(ErrorCode.NO_RESULT_SET)) {
                 LOGGER.log(Level.INFO, "No results for: \"" + strHandle + "\"");
                 response.setStatus(HttpResponseStatus.NOT_FOUND);
                 return;
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 254bdae..feecbee 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -18,14 +18,12 @@
  */
 package org.apache.asterix.api.http.server;
 
-import static org.apache.asterix.common.exceptions.ErrorCode.ASTERIX;
 import static org.apache.asterix.common.exceptions.ErrorCode.INVALID_REQ_JSON_VAL;
 import static org.apache.asterix.common.exceptions.ErrorCode.INVALID_REQ_PARAM_VAL;
 import static org.apache.asterix.common.exceptions.ErrorCode.NO_STATEMENT_PROVIDED;
 import static org.apache.asterix.common.exceptions.ErrorCode.REJECT_BAD_CLUSTER_STATE;
 import static org.apache.asterix.common.exceptions.ErrorCode.REJECT_NODE_UNREGISTERED;
 import static org.apache.asterix.common.exceptions.ErrorCode.REQUEST_TIMEOUT;
-import static org.apache.hyracks.api.exceptions.ErrorCode.HYRACKS;
 import static org.apache.hyracks.api.exceptions.ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY;
 
 import java.io.IOException;
@@ -436,29 +434,22 @@
             executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.BAD_REQUEST);
         } else if (t instanceof HyracksException) {
             HyracksException he = (HyracksException) t;
-            switch (he.getComponent() + he.getErrorCode()) {
-                case ASTERIX + REQUEST_TIMEOUT:
-                    LOGGER.info(() -> "handleException: request execution timed out: "
-                            + LogRedactionUtil.userData(param.toString()));
-                    executionState.setStatus(ResultStatus.TIMEOUT, HttpResponseStatus.OK);
-                    break;
-                case ASTERIX + REJECT_BAD_CLUSTER_STATE:
-                case ASTERIX + REJECT_NODE_UNREGISTERED:
-                    LOGGER.warn(() -> "handleException: " + he.getMessage() + ": "
-                            + LogRedactionUtil.userData(param.toString()));
-                    executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.SERVICE_UNAVAILABLE);
-                    break;
-                case ASTERIX + INVALID_REQ_PARAM_VAL:
-                case ASTERIX + INVALID_REQ_JSON_VAL:
-                case ASTERIX + NO_STATEMENT_PROVIDED:
-                case HYRACKS + JOB_REQUIREMENTS_EXCEED_CAPACITY:
-                    executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.BAD_REQUEST);
-                    break;
-                default:
-                    LOGGER.warn(() -> "handleException: unexpected exception " + he.getMessage() + ": "
-                            + LogRedactionUtil.userData(param.toString()), he);
-                    executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.INTERNAL_SERVER_ERROR);
-                    break;
+            // TODO(mblow): reconsolidate
+            if (he.matchesAny(INVALID_REQ_PARAM_VAL, INVALID_REQ_JSON_VAL, NO_STATEMENT_PROVIDED,
+                    JOB_REQUIREMENTS_EXCEED_CAPACITY)) {
+                executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.BAD_REQUEST);
+            } else if (he.matches(REQUEST_TIMEOUT)) {
+                LOGGER.info(() -> "handleException: request execution timed out: "
+                        + LogRedactionUtil.userData(param.toString()));
+                executionState.setStatus(ResultStatus.TIMEOUT, HttpResponseStatus.OK);
+            } else if (he.matchesAny(REJECT_BAD_CLUSTER_STATE, REJECT_NODE_UNREGISTERED)) {
+                LOGGER.warn(() -> "handleException: " + he.getMessage() + ": "
+                        + LogRedactionUtil.userData(param.toString()));
+                executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.SERVICE_UNAVAILABLE);
+            } else {
+                LOGGER.warn(() -> "handleException: unexpected exception " + he.getMessage() + ": "
+                        + LogRedactionUtil.userData(param.toString()), he);
+                executionState.setStatus(ResultStatus.FATAL, HttpResponseStatus.INTERNAL_SERVER_ERROR);
             }
         } else {
             LOGGER.warn(() -> "handleException: unexpected exception: " + LogRedactionUtil.userData(param.toString()),
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
index 63da9ce..045d64c 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
@@ -48,6 +48,7 @@
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.prettyprint.AlgebricksAppendable;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.IFormattedException;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -190,12 +191,16 @@
 
     public static Throwable getRootCause(Throwable cause) {
         Throwable currentCause = cause;
+        Throwable rootFormattedEx = cause instanceof IFormattedException ? cause : null;
         Throwable nextCause = cause.getCause();
         while (nextCause != null && nextCause != currentCause) {
             currentCause = nextCause;
+            if (currentCause instanceof IFormattedException) {
+                rootFormattedEx = currentCause;
+            }
             nextCause = nextCause.getCause();
         }
-        return currentCause;
+        return rootFormattedEx != null ? rootFormattedEx : currentCause;
     }
 
     /**
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
index 3fce4d8..1461ef4 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/nc/RecoveryManager.java
@@ -787,7 +787,7 @@
             } catch (HyracksDataException hde) {
                 // Since we're undoing according the write-ahead log, the actual upserting tuple
                 // might not have been written to memory yet.
-                if (hde.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                if (!hde.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                     throw hde;
                 }
             }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
index 64520a4..c43f951 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveEventsListenerTest.java
@@ -14,10 +14,12 @@
  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
- * under the License.
+ * under the License
  */
 package org.apache.asterix.test.active;
 
+import static org.apache.hyracks.api.exceptions.HyracksException.UNKNOWN;
+
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.EnumSet;
@@ -57,6 +59,7 @@
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.control.CcId;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.IError;
 import org.apache.hyracks.api.job.JobIdFactory;
 import org.apache.hyracks.api.job.JobStatus;
 import org.apache.hyracks.control.cc.ClusterControllerService;
@@ -181,7 +184,7 @@
         listener.onStart(Behavior.FAIL_COMPILE);
         Action action = users[0].startActivity(listener);
         action.sync();
-        assertFailure(action, 0);
+        assertUnknownFailure(action);
         Assert.assertEquals(ActivityState.STOPPED, listener.getState());
     }
 
@@ -191,7 +194,7 @@
         listener.onStart(Behavior.FAIL_RUNTIME);
         Action action = users[0].startActivity(listener);
         action.sync();
-        assertFailure(action, 0);
+        assertUnknownFailure(action);
         Assert.assertEquals(ActivityState.STOPPED, listener.getState());
     }
 
@@ -211,7 +214,7 @@
         listener.onStart(Behavior.FAIL_START_TIMEOUT_STUCK);
         Action action = users[0].startActivity(listener);
         action.sync();
-        assertFailure(action, 0);
+        assertUnknownFailure(action);
         Assert.assertEquals(ActivityState.STOPPED, listener.getState());
     }
 
@@ -1554,17 +1557,28 @@
         assertSuccess(addDataset);
     }
 
-    private void assertFailure(Action action, int errorCode) throws Exception {
+    private void assertFailure(Action action, IError errorCode) throws Exception {
         HyracksDataException exception = action.getFailure();
         try {
             Assert.assertTrue(action.hasFailed());
             Assert.assertNotNull(exception);
-            Assert.assertEquals(errorCode, exception.getErrorCode());
+            Assert.assertTrue(exception.matches(errorCode));
         } catch (Exception e) {
             throw new Exception("Expected failure: " + errorCode + ". Found failure: " + exception);
         }
     }
 
+    private void assertUnknownFailure(Action action) throws Exception {
+        HyracksDataException exception = action.getFailure();
+        try {
+            Assert.assertTrue(action.hasFailed());
+            Assert.assertNotNull(exception);
+            Assert.assertEquals(UNKNOWN, exception.getErrorCode());
+        } catch (Exception e) {
+            throw new Exception("Expected failure: " + UNKNOWN + ". Found failure: " + exception);
+        }
+    }
+
     private void assertSuccess(Action action) throws Exception {
         if (action.hasFailed()) {
             System.err.println("Action failed while it was expected to succeed");
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
index ca5e1e6..df4c9e0 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/active/ActiveStatsTest.java
@@ -20,7 +20,6 @@
 package org.apache.asterix.test.active;
 
 import static org.apache.asterix.common.exceptions.ErrorCode.ACTIVE_ENTITY_NOT_RUNNING;
-import static org.apache.asterix.common.exceptions.ErrorCode.ASTERIX;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -63,8 +62,8 @@
 public class ActiveStatsTest {
 
     protected boolean cleanUp = true;
-    private static String EXPECTED_STATS = "\"Mock stats\"";
-    private static String CONF_PATH = "src/main/resources/cc.conf";
+    private static final String EXPECTED_STATS = "\"Mock stats\"";
+    private static final String CONF_PATH = "src/main/resources/cc.conf";
 
     @Before
     public void setUp() throws Exception {
@@ -124,7 +123,7 @@
             Assert.fail("expected exception on refresh stats on not-started job");
         } catch (HyracksDataException e) {
             Assert.assertTrue("incorrect exception thrown (expected: ACTIVE_ENTITY_NOT_RUNNING, was: " + e,
-                    e.matches(ASTERIX, ACTIVE_ENTITY_NOT_RUNNING));
+                    e.matches(ACTIVE_ENTITY_NOT_RUNNING));
         }
         requestedStats = eventsListener.getStats();
         Assert.assertTrue(requestedStats.contains("N/A"));
@@ -140,7 +139,7 @@
             eventsListener.refreshStats(1000);
         } catch (HyracksDataException e) {
             Assert.assertTrue("incorrect exception thrown (expected: ACTIVE_ENTITY_NOT_RUNNING, was: " + e,
-                    e.matches(ASTERIX, ACTIVE_ENTITY_NOT_RUNNING));
+                    e.matches(ACTIVE_ENTITY_NOT_RUNNING));
         }
         Assert.assertTrue(requestedStats.contains("N/A"));
         // Fake partition message and notify eventListener
@@ -172,7 +171,7 @@
             expectedException = e;
         }
         Assert.assertNotNull(expectedException);
-        Assert.assertEquals(ErrorCode.ACTIVE_MANAGER_INVALID_RUNTIME, expectedException.getErrorCode());
+        Assert.assertTrue(expectedException.matches(ErrorCode.ACTIVE_MANAGER_INVALID_RUNTIME));
     }
 
 }
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
index 31a6004..8cce055 100644
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
+++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/storage/IndexDropOperatorNodePushableTest.java
@@ -178,7 +178,7 @@
             dropInUseOp.initialize();
         } catch (HyracksDataException e) {
             e.printStackTrace();
-            Assert.assertEquals(ErrorCode.CANNOT_DROP_IN_USE_INDEX, e.getErrorCode());
+            Assert.assertTrue(e.matches(ErrorCode.CANNOT_DROP_IN_USE_INDEX));
             dropFailed.set(true);
         }
         Assert.assertTrue(dropFailed.get());
@@ -218,7 +218,7 @@
             dropNonExistingOp.initialize();
         } catch (HyracksDataException e) {
             e.printStackTrace();
-            Assert.assertEquals(ErrorCode.INDEX_DOES_NOT_EXIST, e.getErrorCode());
+            Assert.assertTrue(e.matches(ErrorCode.INDEX_DOES_NOT_EXIST));
             dropFailed.set(true);
         }
         Assert.assertTrue(dropFailed.get());
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
index 5e4b5a1..128a8c0 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/LSMInsertDeleteOperatorNodePushable.java
@@ -147,7 +147,7 @@
                 }
             }
         } catch (HyracksDataException e) {
-            if (e.getErrorCode() == ErrorCode.INVALID_OPERATOR_OPERATION) {
+            if (e.matches(ErrorCode.INVALID_OPERATOR_OPERATION)) {
                 throw e;
             } else {
                 throw HyracksDataException.create(ErrorCode.ERROR_PROCESSING_TUPLE, e, sourceLoc, i);
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
index a834a06..92714b3 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/AsterixException.java
@@ -26,54 +26,51 @@
 public class AsterixException extends AlgebricksException {
     private static final long serialVersionUID = 1L;
 
+    public AsterixException(ErrorCode error, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+        super(error, cause, sourceLoc, params);
+    }
+
+    public AsterixException(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        this(error, null, sourceLoc, params);
+    }
+
+    public AsterixException(ErrorCode error, Serializable... params) {
+        super(error, null, null, params);
+    }
+
+    public AsterixException(ErrorCode error, Throwable cause, Serializable... params) {
+        super(error, cause, null, params);
+    }
+
     /**
-     * @deprecated Instead, use a constructor with error code
+     * @deprecated Instead, use a constructor with {@link ErrorCode}
      */
     @Deprecated
     public AsterixException(String message) {
         super(message);
     }
 
-    public AsterixException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
-    }
-
-    public AsterixException(int errorCode, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
-    }
-
     /**
-     * @deprecated When creating a constructor with cause,
-     *             create AlgebricksException using AlgebricksException.create(Throwable th);
+     * @deprecated Instead, use a constructor with {@link ErrorCode}
      */
     @Deprecated
     public AsterixException(Throwable cause) {
         super(cause);
     }
 
-    public AsterixException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
-        addSuppressed(cause);
-    }
-
-    public AsterixException(int errorCode, Throwable cause, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
-        addSuppressed(cause);
-    }
-
     /**
-     * @deprecated Instead, use a constructor with error code
+     * @deprecated Instead, use a constructor with {@link ErrorCode}
      */
     @Deprecated
     public AsterixException(String message, Throwable cause) {
         super(message, cause);
     }
 
-    public static AsterixException create(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        return new AsterixException(errorCode, sourceLoc, params);
+    public static AsterixException create(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        return new AsterixException(error, sourceLoc, params);
     }
 
-    public static AsterixException create(int errorCode, Serializable... params) {
-        return new AsterixException(errorCode, params);
+    public static AsterixException create(ErrorCode error, Serializable... params) {
+        return new AsterixException(error, params);
     }
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
index 0de6b72..75fb18d 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/CompilationException.java
@@ -27,20 +27,28 @@
 public class CompilationException extends AlgebricksException {
     private static final long serialVersionUID = 1L;
 
-    public CompilationException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc, params);
+    public static CompilationException create(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        return new CompilationException(error, sourceLoc, params);
     }
 
-    public CompilationException(int errorCode, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
+    public static CompilationException create(ErrorCode error, Serializable... params) {
+        return create(error, null, params);
     }
 
-    public CompilationException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, sourceLoc, params);
+    public CompilationException(ErrorCode error, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+        super(error, cause, sourceLoc, params);
     }
 
-    public CompilationException(int errorCode, Throwable cause, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, params);
+    public CompilationException(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        this(error, null, sourceLoc, params);
+    }
+
+    public CompilationException(ErrorCode error, Serializable... params) {
+        this(error, null, null, params);
+    }
+
+    public CompilationException(ErrorCode errorCode, Throwable cause, Serializable... params) {
+        this(errorCode, cause, null, params);
     }
 
     /**
@@ -56,7 +64,7 @@
     /**
      * @deprecated (Don't use this and provide an error code. This exists for the current exceptions and
      *             those exceptions need to adopt error code as well.)
-     * @param message
+     * @param cause
      */
     @Deprecated
     public CompilationException(Throwable cause) {
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 21c3416..a29ed3b 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -18,9 +18,7 @@
  */
 package org.apache.asterix.common.exceptions;
 
-import java.io.InputStream;
-import java.util.Map;
-
+import org.apache.hyracks.api.exceptions.IError;
 import org.apache.hyracks.api.util.ErrorMessageUtil;
 
 // Error code:
@@ -29,333 +27,336 @@
 // 2000 ---- 2999: storage errors
 // 3000 ---- 3999: feed errors
 // 4000 ---- 4999: lifecycle management errors
-public class ErrorCode {
-    private static final String RESOURCE_PATH = "asx_errormsg/en.properties";
-    public static final String ASTERIX = "ASX";
-
+public enum ErrorCode implements IError {
     // Runtime errors
-    public static final int CASTING_FIELD = 1;
-    public static final int TYPE_MISMATCH_FUNCTION = 2;
-    public static final int TYPE_INCOMPATIBLE = 3;
-    public static final int TYPE_UNSUPPORTED = 4;
-    public static final int TYPE_ITEM = 5;
-    public static final int INVALID_FORMAT = 6;
-    public static final int OVERFLOW = 7;
-    public static final int UNDERFLOW = 8;
-    public static final int INJECTED_FAILURE = 9;
-    public static final int NEGATIVE_VALUE = 10;
-    public static final int OUT_OF_BOUND = 11;
-    public static final int COERCION = 12;
-    public static final int DUPLICATE_FIELD_NAME = 13;
-    public static final int PROPERTY_NOT_SET = 14;
-    public static final int ROOT_LOCAL_RESOURCE_EXISTS = 15;
-    public static final int ROOT_LOCAL_RESOURCE_COULD_NOT_BE_CREATED = 16;
-    public static final int UNKNOWN_EXTERNAL_FILE_PENDING_OP = 17;
-    public static final int TYPE_CONVERT = 18;
-    public static final int TYPE_CONVERT_INTEGER_SOURCE = 19;
-    public static final int TYPE_CONVERT_INTEGER_TARGET = 20;
-    public static final int TYPE_CONVERT_OUT_OF_BOUND = 21;
-    public static final int FIELD_SHOULD_BE_TYPED = 22;
-    public static final int NC_REQUEST_TIMEOUT = 23;
-    public static final int POLYGON_INVALID_COORDINATE = 24;
-    public static final int POLYGON_3_POINTS = 25;
-    public static final int POLYGON_INVALID = 26;
-    public static final int OPERATION_NOT_SUPPORTED = 27;
-    public static final int INVALID_DURATION = 28;
-    public static final int UNKNOWN_DURATION_UNIT = 29;
-    public static final int REQUEST_TIMEOUT = 30;
-    public static final int INVALID_TYPE_CASTING_MATH_FUNCTION = 31;
-    public static final int REJECT_BAD_CLUSTER_STATE = 32;
-    public static final int REJECT_NODE_UNREGISTERED = 33;
-    public static final int UNSUPPORTED_MULTIPLE_STATEMENTS = 35;
-    public static final int CANNOT_COMPARE_COMPLEX = 36;
-    public static final int TYPE_MISMATCH_GENERIC = 37;
-    public static final int DIFFERENT_LIST_TYPE_ARGS = 38;
-    public static final int INTEGER_VALUE_EXPECTED = 39;
-    public static final int NO_STATEMENT_PROVIDED = 40;
-    public static final int REQUEST_CANCELLED = 41;
-    public static final int TPCDS_INVALID_TABLE_NAME = 42;
-    public static final int VALUE_OUT_OF_RANGE = 43;
-    public static final int PROHIBITED_STATEMENT_CATEGORY = 44;
-    public static final int INTEGER_VALUE_EXPECTED_FUNCTION = 45;
-    public static final int INVALID_LIKE_PATTERN = 46;
-    public static final int INVALID_REQ_PARAM_VAL = 47;
-    public static final int INVALID_REQ_JSON_VAL = 48;
-    public static final int PARAMETERS_REQUIRED = 49;
-    public static final int INVALID_PARAM = 50;
+    CASTING_FIELD(1),
+    TYPE_MISMATCH_FUNCTION(2),
+    TYPE_INCOMPATIBLE(3),
+    TYPE_UNSUPPORTED(4),
+    TYPE_ITEM(5),
+    INVALID_FORMAT(6),
+    OVERFLOW(7),
+    UNDERFLOW(8),
+    INJECTED_FAILURE(9),
+    NEGATIVE_VALUE(10),
+    OUT_OF_BOUND(11),
+    COERCION(12),
+    DUPLICATE_FIELD_NAME(13),
+    PROPERTY_NOT_SET(14),
+    ROOT_LOCAL_RESOURCE_EXISTS(15),
+    ROOT_LOCAL_RESOURCE_COULD_NOT_BE_CREATED(16),
+    UNKNOWN_EXTERNAL_FILE_PENDING_OP(17),
+    TYPE_CONVERT(18),
+    TYPE_CONVERT_INTEGER_SOURCE(19),
+    TYPE_CONVERT_INTEGER_TARGET(20),
+    TYPE_CONVERT_OUT_OF_BOUND(21),
+    FIELD_SHOULD_BE_TYPED(22),
+    NC_REQUEST_TIMEOUT(23),
+    POLYGON_INVALID_COORDINATE(24),
+    POLYGON_3_POINTS(25),
+    POLYGON_INVALID(26),
+    OPERATION_NOT_SUPPORTED(27),
+    INVALID_DURATION(28),
+    UNKNOWN_DURATION_UNIT(29),
+    REQUEST_TIMEOUT(30),
+    INVALID_TYPE_CASTING_MATH_FUNCTION(31),
+    REJECT_BAD_CLUSTER_STATE(32),
+    REJECT_NODE_UNREGISTERED(33),
+    UNSUPPORTED_MULTIPLE_STATEMENTS(35),
+    CANNOT_COMPARE_COMPLEX(36),
+    TYPE_MISMATCH_GENERIC(37),
+    DIFFERENT_LIST_TYPE_ARGS(38),
+    INTEGER_VALUE_EXPECTED(39),
+    NO_STATEMENT_PROVIDED(40),
+    REQUEST_CANCELLED(41),
+    TPCDS_INVALID_TABLE_NAME(42),
+    VALUE_OUT_OF_RANGE(43),
+    PROHIBITED_STATEMENT_CATEGORY(44),
+    INTEGER_VALUE_EXPECTED_FUNCTION(45),
+    INVALID_LIKE_PATTERN(46),
+    INVALID_REQ_PARAM_VAL(47),
+    INVALID_REQ_JSON_VAL(48),
+    PARAMETERS_REQUIRED(49),
+    INVALID_PARAM(50),
 
-    public static final int UNSUPPORTED_JRE = 100;
+    UNSUPPORTED_JRE(100),
 
-    public static final int EXTERNAL_UDF_RESULT_TYPE_ERROR = 200;
+    EXTERNAL_UDF_RESULT_TYPE_ERROR(200),
 
     // Compilation errors
-    public static final int PARSE_ERROR = 1001;
-    public static final int COMPILATION_TYPE_MISMATCH_FUNCTION = 1002;
-    public static final int COMPILATION_TYPE_INCOMPATIBLE = 1003;
-    public static final int COMPILATION_TYPE_UNSUPPORTED = 1004;
-    public static final int COMPILATION_TYPE_ITEM = 1005;
-    public static final int COMPILATION_DUPLICATE_FIELD_NAME = 1006;
-    public static final int COMPILATION_INVALID_EXPRESSION = 1007;
-    public static final int COMPILATION_INVALID_PARAMETER_NUMBER = 1008;
-    public static final int COMPILATION_INVALID_RETURNING_EXPRESSION = 1009;
-    public static final int COMPILATION_FULLTEXT_PHRASE_FOUND = 1010;
-    public static final int COMPILATION_UNKNOWN_DATASET_TYPE = 1011;
-    public static final int COMPILATION_UNKNOWN_INDEX_TYPE = 1012;
-    public static final int COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD = 1013;
-    public static final int COMPILATION_FIELD_NOT_FOUND = 1014;
-    public static final int COMPILATION_ILLEGAL_INDEX_FOR_DATASET_WITH_COMPOSITE_PRIMARY_INDEX = 1015;
-    public static final int COMPILATION_INDEX_TYPE_NOT_SUPPORTED_FOR_DATASET_TYPE = 1016;
-    public static final int COMPILATION_FILTER_CANNOT_BE_NULLABLE = 1017;
-    public static final int COMPILATION_ILLEGAL_FILTER_TYPE = 1018;
-    public static final int COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY = 1019;
-    public static final int COMPILATION_ILLEGAL_AUTOGENERATED_TYPE = 1020;
-    public static final int COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE = 1021;
-    public static final int COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE = 1022;
-    public static final int COMPILATION_CANT_DROP_ACTIVE_DATASET = 1023;
-    public static final int COMPILATION_AQLPLUS_IDENTIFIER_NOT_FOUND = 1024;
-    public static final int COMPILATION_AQLPLUS_NO_SUCH_JOIN_TYPE = 1025;
-    public static final int COMPILATION_FUNC_EXPRESSION_CANNOT_UTILIZE_INDEX = 1026;
-    public static final int COMPILATION_DATASET_TYPE_DOES_NOT_HAVE_PRIMARY_INDEX = 1027;
-    public static final int COMPILATION_UNSUPPORTED_QUERY_PARAMETER = 1028;
-    public static final int NO_METADATA_FOR_DATASET = 1029;
-    public static final int SUBTREE_HAS_NO_DATA_SOURCE = 1030;
-    public static final int SUBTREE_HAS_NO_ADDTIONAL_DATA_SOURCE = 1031;
-    public static final int NO_INDEX_FIELD_NAME_FOR_GIVEN_FUNC_EXPR = 1032;
-    public static final int NO_SUPPORTED_TYPE = 1033;
-    public static final int NO_TOKENIZER_FOR_TYPE = 1034;
-    public static final int INCOMPATIBLE_SEARCH_MODIFIER = 1035;
-    public static final int UNKNOWN_SEARCH_MODIFIER = 1036;
-    public static final int COMPILATION_BAD_QUERY_PARAMETER_VALUE = 1037;
-    public static final int COMPILATION_ILLEGAL_STATE = 1038;
-    public static final int COMPILATION_TWO_PHASE_LOCKING_VIOLATION = 1039;
-    public static final int DATASET_ID_EXHAUSTED = 1040;
-    public static final int INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL = 1041;
-    public static final int INDEX_ILLEGAL_NON_ENFORCED_TYPED = 1042;
-    public static final int INDEX_RTREE_MULTIPLE_FIELDS_NOT_ALLOWED = 1043;
-    public static final int REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE = 1044;
-    public static final int ILLEGAL_LOCK_UPGRADE_OPERATION = 1045;
-    public static final int ILLEGAL_LOCK_DOWNGRADE_OPERATION = 1046;
-    public static final int UPGRADE_FAILED_LOCK_WAS_NOT_ACQUIRED = 1047;
-    public static final int DOWNGRADE_FAILED_LOCK_WAS_NOT_ACQUIRED = 1048;
-    public static final int LOCK_WAS_ACQUIRED_DIFFERENT_OPERATION = 1049;
-    public static final int UNKNOWN_DATASET_IN_DATAVERSE = 1050;
-    public static final int INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD = 1051;
-    public static final int INDEX_ILLEGAL_REPETITIVE_FIELD = 1052;
-    public static final int CANNOT_CREATE_SEC_PRIMARY_IDX_ON_EXT_DATASET = 1053;
-    public static final int COMPILATION_FAILED_DUE_TO_REPLICATE_OP = 1054;
-    public static final int COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE = 1055;
-    public static final int TOO_MANY_OPTIONS_FOR_FUNCTION = 1056;
-    public static final int EXPRESSION_NOT_SUPPORTED_IN_CONSTANT_RECORD = 1057;
-    public static final int LITERAL_TYPE_NOT_SUPPORTED_IN_CONSTANT_RECORD = 1058;
-    public static final int UNSUPPORTED_WITH_FIELD = 1059;
-    public static final int WITH_FIELD_MUST_BE_OF_TYPE = 1060;
-    public static final int WITH_FIELD_MUST_CONTAIN_SUB_FIELD = 1061;
-    public static final int CONFIGURATION_PARAMETER_INVALID_TYPE = 1062;
-    public static final int UNKNOWN_DATAVERSE = 1063;
-    public static final int ERROR_OCCURRED_BETWEEN_TWO_TYPES_CONVERSION = 1064;
-    public static final int CHOSEN_INDEX_COUNT_SHOULD_BE_GREATER_THAN_ONE = 1065;
-    public static final int CANNOT_SERIALIZE_A_VALUE = 1066;
-    public static final int CANNOT_FIND_NON_MISSING_SELECT_OPERATOR = 1067;
-    public static final int CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE = 1068;
-    public static final int CANNOT_DROP_INDEX = 1069;
-    public static final int METADATA_ERROR = 1070;
-    public static final int DATAVERSE_EXISTS = 1071;
-    public static final int DATASET_EXISTS = 1072;
-    public static final int UNDEFINED_IDENTIFIER = 1073;
-    public static final int AMBIGUOUS_IDENTIFIER = 1074;
-    public static final int FORBIDDEN_SCOPE = 1075;
-    public static final int NAME_RESOLVE_UNKNOWN_DATASET = 1076;
-    public static final int NAME_RESOLVE_UNKNOWN_DATASET_IN_DATAVERSE = 1077;
-    public static final int COMPILATION_UNEXPECTED_OPERATOR = 1078;
-    public static final int COMPILATION_ERROR = 1079;
-    public static final int UNKNOWN_NODEGROUP = 1080;
-    public static final int UNKNOWN_FUNCTION = 1081;
-    public static final int UNKNOWN_TYPE = 1082;
-    public static final int UNKNOWN_INDEX = 1083;
-    public static final int INDEX_EXISTS = 1084;
-    public static final int TYPE_EXISTS = 1085;
-    public static final int PARAMETER_NO_VALUE = 1086;
-    public static final int COMPILATION_INVALID_NUM_OF_ARGS = 1087;
-    public static final int FIELD_NOT_FOUND = 1088;
-    public static final int FIELD_NOT_OF_TYPE = 1089;
-    public static final int ARRAY_FIELD_ELEMENTS_MUST_BE_OF_TYPE = 1090;
-    public static final int COMPILATION_TYPE_MISMATCH_GENERIC = 1091;
-    public static final int ILLEGAL_SET_PARAMETER = 1092;
-    public static final int COMPILATION_TRANSLATION_ERROR = 1093;
-    public static final int RANGE_MAP_ERROR = 1094;
-    public static final int COMPILATION_EXPECTED_FUNCTION_CALL = 1095;
-    public static final int UNKNOWN_COMPRESSION_SCHEME = 1096;
-    public static final int UNSUPPORTED_WITH_SUBFIELD = 1097;
-    public static final int COMPILATION_INVALID_WINDOW_FRAME = 1098;
-    public static final int COMPILATION_UNEXPECTED_WINDOW_FRAME = 1099;
-    public static final int COMPILATION_UNEXPECTED_WINDOW_EXPRESSION = 1100;
-    public static final int COMPILATION_UNEXPECTED_WINDOW_ORDERBY = 1101;
-    public static final int COMPILATION_EXPECTED_WINDOW_FUNCTION = 1102;
-    public static final int COMPILATION_ILLEGAL_USE_OF_IDENTIFIER = 1103;
-    public static final int INVALID_FUNCTION_MODIFIER = 1104;
-    public static final int OPERATION_NOT_SUPPORTED_ON_PRIMARY_INDEX = 1105;
-    public static final int EXPECTED_CONSTANT_VALUE = 1106;
-    public static final int UNEXPECTED_HINT = 1107;
-    public static final int EXTERNAL_SOURCE_ERROR = 1108;
-    public static final int EXTERNAL_SOURCE_CONTAINER_NOT_FOUND = 1109;
-    public static final int PARAMETERS_NOT_ALLOWED_AT_SAME_TIME = 1110;
-    public static final int PROPERTY_INVALID_VALUE_TYPE = 1111;
-    public static final int INVALID_PROPERTY_FORMAT = 1112;
-    public static final int INVALID_REGEX_PATTERN = 1113;
-    public static final int EXTERNAL_SOURCE_CONFIGURATION_RETURNED_NO_FILES = 1114;
-    public static final int INVALID_DATABASE_OBJECT_NAME = 1115;
+    PARSE_ERROR(1001),
+    COMPILATION_TYPE_MISMATCH_FUNCTION(1002),
+    COMPILATION_TYPE_INCOMPATIBLE(1003),
+    COMPILATION_TYPE_UNSUPPORTED(1004),
+    COMPILATION_TYPE_ITEM(1005),
+    COMPILATION_DUPLICATE_FIELD_NAME(1006),
+    COMPILATION_INVALID_EXPRESSION(1007),
+    COMPILATION_INVALID_PARAMETER_NUMBER(1008),
+    COMPILATION_INVALID_RETURNING_EXPRESSION(1009),
+    COMPILATION_FULLTEXT_PHRASE_FOUND(1010),
+    COMPILATION_UNKNOWN_DATASET_TYPE(1011),
+    COMPILATION_UNKNOWN_INDEX_TYPE(1012),
+    COMPILATION_ILLEGAL_INDEX_NUM_OF_FIELD(1013),
+    COMPILATION_FIELD_NOT_FOUND(1014),
+    COMPILATION_ILLEGAL_INDEX_FOR_DATASET_WITH_COMPOSITE_PRIMARY_INDEX(1015),
+    COMPILATION_INDEX_TYPE_NOT_SUPPORTED_FOR_DATASET_TYPE(1016),
+    COMPILATION_FILTER_CANNOT_BE_NULLABLE(1017),
+    COMPILATION_ILLEGAL_FILTER_TYPE(1018),
+    COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY(1019),
+    COMPILATION_ILLEGAL_AUTOGENERATED_TYPE(1020),
+    COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE(1021),
+    COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE(1022),
+    COMPILATION_CANT_DROP_ACTIVE_DATASET(1023),
+    COMPILATION_AQLPLUS_IDENTIFIER_NOT_FOUND(1024),
+    COMPILATION_AQLPLUS_NO_SUCH_JOIN_TYPE(1025),
+    COMPILATION_FUNC_EXPRESSION_CANNOT_UTILIZE_INDEX(1026),
+    COMPILATION_DATASET_TYPE_DOES_NOT_HAVE_PRIMARY_INDEX(1027),
+    COMPILATION_UNSUPPORTED_QUERY_PARAMETER(1028),
+    NO_METADATA_FOR_DATASET(1029),
+    SUBTREE_HAS_NO_DATA_SOURCE(1030),
+    SUBTREE_HAS_NO_ADDTIONAL_DATA_SOURCE(1031),
+    NO_INDEX_FIELD_NAME_FOR_GIVEN_FUNC_EXPR(1032),
+    NO_SUPPORTED_TYPE(1033),
+    NO_TOKENIZER_FOR_TYPE(1034),
+    INCOMPATIBLE_SEARCH_MODIFIER(1035),
+    UNKNOWN_SEARCH_MODIFIER(1036),
+    COMPILATION_BAD_QUERY_PARAMETER_VALUE(1037),
+    COMPILATION_ILLEGAL_STATE(1038),
+    COMPILATION_TWO_PHASE_LOCKING_VIOLATION(1039),
+    DATASET_ID_EXHAUSTED(1040),
+    INDEX_ILLEGAL_ENFORCED_NON_OPTIONAL(1041),
+    INDEX_ILLEGAL_NON_ENFORCED_TYPED(1042),
+    INDEX_RTREE_MULTIPLE_FIELDS_NOT_ALLOWED(1043),
+    REMOTE_EXCEPTION_WHEN_CALLING_METADATA_NODE(1044),
+    ILLEGAL_LOCK_UPGRADE_OPERATION(1045),
+    ILLEGAL_LOCK_DOWNGRADE_OPERATION(1046),
+    UPGRADE_FAILED_LOCK_WAS_NOT_ACQUIRED(1047),
+    DOWNGRADE_FAILED_LOCK_WAS_NOT_ACQUIRED(1048),
+    LOCK_WAS_ACQUIRED_DIFFERENT_OPERATION(1049),
+    UNKNOWN_DATASET_IN_DATAVERSE(1050),
+    INDEX_ILLEGAL_ENFORCED_ON_CLOSED_FIELD(1051),
+    INDEX_ILLEGAL_REPETITIVE_FIELD(1052),
+    CANNOT_CREATE_SEC_PRIMARY_IDX_ON_EXT_DATASET(1053),
+    COMPILATION_FAILED_DUE_TO_REPLICATE_OP(1054),
+    COMPILATION_INCOMPATIBLE_FUNCTION_LANGUAGE(1055),
+    TOO_MANY_OPTIONS_FOR_FUNCTION(1056),
+    EXPRESSION_NOT_SUPPORTED_IN_CONSTANT_RECORD(1057),
+    LITERAL_TYPE_NOT_SUPPORTED_IN_CONSTANT_RECORD(1058),
+    UNSUPPORTED_WITH_FIELD(1059),
+    WITH_FIELD_MUST_BE_OF_TYPE(1060),
+    WITH_FIELD_MUST_CONTAIN_SUB_FIELD(1061),
+    CONFIGURATION_PARAMETER_INVALID_TYPE(1062),
+    UNKNOWN_DATAVERSE(1063),
+    ERROR_OCCURRED_BETWEEN_TWO_TYPES_CONVERSION(1064),
+    CHOSEN_INDEX_COUNT_SHOULD_BE_GREATER_THAN_ONE(1065),
+    CANNOT_SERIALIZE_A_VALUE(1066),
+    CANNOT_FIND_NON_MISSING_SELECT_OPERATOR(1067),
+    CANNOT_GET_CONDITIONAL_SPLIT_KEY_VARIABLE(1068),
+    CANNOT_DROP_INDEX(1069),
+    METADATA_ERROR(1070),
+    DATAVERSE_EXISTS(1071),
+    DATASET_EXISTS(1072),
+    UNDEFINED_IDENTIFIER(1073),
+    AMBIGUOUS_IDENTIFIER(1074),
+    FORBIDDEN_SCOPE(1075),
+    NAME_RESOLVE_UNKNOWN_DATASET(1076),
+    NAME_RESOLVE_UNKNOWN_DATASET_IN_DATAVERSE(1077),
+    COMPILATION_UNEXPECTED_OPERATOR(1078),
+    COMPILATION_ERROR(1079),
+    UNKNOWN_NODEGROUP(1080),
+    UNKNOWN_FUNCTION(1081),
+    UNKNOWN_TYPE(1082),
+    UNKNOWN_INDEX(1083),
+    INDEX_EXISTS(1084),
+    TYPE_EXISTS(1085),
+    PARAMETER_NO_VALUE(1086),
+    COMPILATION_INVALID_NUM_OF_ARGS(1087),
+    FIELD_NOT_FOUND(1088),
+    FIELD_NOT_OF_TYPE(1089),
+    ARRAY_FIELD_ELEMENTS_MUST_BE_OF_TYPE(1090),
+    COMPILATION_TYPE_MISMATCH_GENERIC(1091),
+    ILLEGAL_SET_PARAMETER(1092),
+    COMPILATION_TRANSLATION_ERROR(1093),
+    RANGE_MAP_ERROR(1094),
+    COMPILATION_EXPECTED_FUNCTION_CALL(1095),
+    UNKNOWN_COMPRESSION_SCHEME(1096),
+    UNSUPPORTED_WITH_SUBFIELD(1097),
+    COMPILATION_INVALID_WINDOW_FRAME(1098),
+    COMPILATION_UNEXPECTED_WINDOW_FRAME(1099),
+    COMPILATION_UNEXPECTED_WINDOW_EXPRESSION(1100),
+    COMPILATION_UNEXPECTED_WINDOW_ORDERBY(1101),
+    COMPILATION_EXPECTED_WINDOW_FUNCTION(1102),
+    COMPILATION_ILLEGAL_USE_OF_IDENTIFIER(1103),
+    INVALID_FUNCTION_MODIFIER(1104),
+    OPERATION_NOT_SUPPORTED_ON_PRIMARY_INDEX(1105),
+    EXPECTED_CONSTANT_VALUE(1106),
+    UNEXPECTED_HINT(1107),
+    EXTERNAL_SOURCE_ERROR(1108),
+    EXTERNAL_SOURCE_CONTAINER_NOT_FOUND(1109),
+    PARAMETERS_NOT_ALLOWED_AT_SAME_TIME(1110),
+    PROPERTY_INVALID_VALUE_TYPE(1111),
+    INVALID_PROPERTY_FORMAT(1112),
+    INVALID_REGEX_PATTERN(1113),
+    EXTERNAL_SOURCE_CONFIGURATION_RETURNED_NO_FILES(1114),
+    INVALID_DATABASE_OBJECT_NAME(1115),
 
     // Feed errors
-    public static final int DATAFLOW_ILLEGAL_STATE = 3001;
-    public static final int UTIL_DATAFLOW_UTILS_TUPLE_TOO_LARGE = 3002;
-    public static final int UTIL_DATAFLOW_UTILS_UNKNOWN_FORWARD_POLICY = 3003;
-    public static final int OPERATORS_FEED_INTAKE_OPERATOR_DESCRIPTOR_CLASSLOADER_NOT_CONFIGURED = 3004;
-    public static final int PARSER_DELIMITED_NONOPTIONAL_NULL = 3005;
-    public static final int PARSER_DELIMITED_ILLEGAL_FIELD = 3006;
-    public static final int ADAPTER_TWITTER_TWITTER4J_LIB_NOT_FOUND = 3007;
-    public static final int OPERATORS_FEED_INTAKE_OPERATOR_NODE_PUSHABLE_FAIL_AT_INGESTION = 3008;
-    public static final int FEED_CREATE_FEED_DATATYPE_ERROR = 3009;
-    public static final int PARSER_HIVE_NON_PRIMITIVE_LIST_NOT_SUPPORT = 3010;
-    public static final int PARSER_HIVE_FIELD_TYPE = 3011;
-    public static final int PARSER_HIVE_GET_COLUMNS = 3012;
-    public static final int PARSER_HIVE_NO_CLOSED_COLUMNS = 3013;
-    public static final int PARSER_HIVE_NOT_SUPPORT_NON_OP_UNION = 3014;
-    public static final int PARSER_HIVE_MISSING_FIELD_TYPE_INFO = 3015;
-    public static final int PARSER_HIVE_NULL_FIELD = 3016;
-    public static final int PARSER_HIVE_NULL_VALUE_IN_LIST = 3017;
-    public static final int INPUT_RECORD_RECORD_WITH_METADATA_AND_PK_NULL_IN_NON_OPTIONAL = 3018;
-    public static final int INPUT_RECORD_RECORD_WITH_METADATA_AND_PK_CANNT_GET_PKEY = 3019;
-    public static final int FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED = 3020;
-    public static final int RECORD_READER_MALFORMED_INPUT_STREAM = 3021;
-    public static final int PROVIDER_DATAFLOW_CONTROLLER_UNKNOWN_DATA_SOURCE = 3022;
-    public static final int PROVIDER_DATASOURCE_FACTORY_UNKNOWN_INPUT_STREAM_FACTORY = 3023;
-    public static final int UTIL_EXTERNAL_DATA_UTILS_FAIL_CREATE_STREAM_FACTORY = 3024;
-    public static final int UNKNOWN_RECORD_READER_FACTORY = 3025;
-    public static final int PROVIDER_STREAM_RECORD_READER_UNKNOWN_FORMAT = 3026;
-    public static final int UNKNOWN_RECORD_FORMAT_FOR_META_PARSER = 3027;
-    public static final int LIBRARY_JAVA_JOBJECTS_FIELD_ALREADY_DEFINED = 3028;
-    public static final int LIBRARY_JAVA_JOBJECTS_UNKNOWN_FIELD = 3029;
-    public static final int NODE_RESOLVER_NO_NODE_CONTROLLERS = 3031;
-    public static final int NODE_RESOLVER_UNABLE_RESOLVE_HOST = 3032;
-    public static final int INPUT_RECORD_CONVERTER_DCP_MSG_TO_RECORD_CONVERTER_UNKNOWN_DCP_REQUEST = 3033;
-    public static final int FEED_DATAFLOW_FRAME_DISTR_REGISTER_FAILED_DATA_PROVIDER = 3034;
-    public static final int INPUT_RECORD_READER_CHAR_ARRAY_RECORD_TOO_LARGE = 3038;
-    public static final int LIBRARY_JOBJECT_ACCESSOR_CANNOT_PARSE_TYPE = 3039;
-    public static final int LIBRARY_JOBJECT_UTIL_ILLEGAL_ARGU_TYPE = 3040;
-    public static final int LIBRARY_EXTERNAL_FUNCTION_UNABLE_TO_LOAD_CLASS = 3041;
-    public static final int LIBRARY_EXTERNAL_FUNCTION_UNSUPPORTED_KIND = 3042;
-    public static final int LIBRARY_EXTERNAL_FUNCTION_UNKNOWN_KIND = 3043;
-    public static final int LIBRARY_EXTERNAL_LIBRARY_CLASS_REGISTERED = 3044;
-    public static final int LIBRARY_JAVA_FUNCTION_HELPER_CANNOT_HANDLE_ARGU_TYPE = 3045;
-    public static final int LIBRARY_JAVA_FUNCTION_HELPER_OBJ_TYPE_NOT_SUPPORTED = 3046;
-    public static final int LIBRARY_EXTERNAL_FUNCTION_UNSUPPORTED_NAME = 3047;
-    public static final int OPERATORS_FEED_META_OPERATOR_DESCRIPTOR_INVALID_RUNTIME = 3048;
-    public static final int INVALID_DELIMITER = 3049;
-    public static final int INVALID_CHAR_LENGTH = 3050;
-    public static final int QUOTE_DELIMITER_MISMATCH = 3051;
-    public static final int INDEXING_EXTERNAL_FILE_INDEX_ACCESSOR_UNABLE_TO_FIND_FILE_INDEX = 3052;
-    public static final int PARSER_ADM_DATA_PARSER_FIELD_NOT_NULL = 3053;
-    public static final int PARSER_ADM_DATA_PARSER_TYPE_MISMATCH = 3054;
-    public static final int PARSER_ADM_DATA_PARSER_UNEXPECTED_TOKEN_KIND = 3055;
-    public static final int PARSER_ADM_DATA_PARSER_ILLEGAL_ESCAPE = 3056;
-    public static final int PARSER_ADM_DATA_PARSER_RECORD_END_UNEXPECTED = 3057;
-    public static final int PARSER_ADM_DATA_PARSER_EXTRA_FIELD_IN_CLOSED_RECORD = 3058;
-    public static final int PARSER_ADM_DATA_PARSER_UNEXPECTED_TOKEN_WHEN_EXPECT_COMMA = 3059;
-    public static final int PARSER_ADM_DATA_PARSER_FOUND_COMMA_WHEN = 3060;
-    public static final int PARSER_ADM_DATA_PARSER_UNSUPPORTED_INTERVAL_TYPE = 3061;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_NOT_CLOSED = 3062;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_BEGIN_END_POINT_MISMATCH = 3063;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_MISSING_COMMA = 3064;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_INVALID_DATETIME = 3065;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_UNSUPPORTED_TYPE = 3066;
-    public static final int PARSER_ADM_DATA_PARSER_INTERVAL_INTERVAL_ARGUMENT_ERROR = 3067;
-    public static final int PARSER_ADM_DATA_PARSER_LIST_FOUND_END_COLLECTION = 3068;
-    public static final int PARSER_ADM_DATA_PARSER_LIST_FOUND_COMMA_BEFORE_LIST = 3069;
-    public static final int PARSER_ADM_DATA_PARSER_LIST_FOUND_COMMA_EXPECTING_ITEM = 3070;
-    public static final int PARSER_ADM_DATA_PARSER_LIST_FOUND_END_RECOD = 3071;
-    public static final int PARSER_ADM_DATA_PARSER_CAST_ERROR = 3072;
-    public static final int PARSER_ADM_DATA_PARSER_CONSTRUCTOR_MISSING_DESERIALIZER = 3073;
-    public static final int PARSER_ADM_DATA_PARSER_WRONG_INSTANCE = 3074;
-    public static final int PARSER_TWEET_PARSER_CLOSED_FIELD_NULL = 3075;
-    public static final int UTIL_FILE_SYSTEM_WATCHER_NO_FILES_FOUND = 3076;
-    public static final int UTIL_LOCAL_FILE_SYSTEM_UTILS_PATH_NOT_FOUND = 3077;
-    public static final int UTIL_HDFS_UTILS_CANNOT_OBTAIN_HDFS_SCHEDULER = 3078;
-    public static final int ACTIVE_MANAGER_SHUTDOWN = 3079;
-    public static final int FEED_METADATA_UTIL_UNEXPECTED_FEED_DATATYPE = 3080;
-    public static final int FEED_METADATA_SOCKET_ADAPTOR_SOCKET_NOT_PROPERLY_CONFIGURED = 3081;
-    public static final int FEED_METADATA_SOCKET_ADAPTOR_SOCKET_INVALID_HOST_NC = 3082;
-    public static final int PROVIDER_DATASOURCE_FACTORY_DUPLICATE_FORMAT_MAPPING = 3083;
-    public static final int CANNOT_SUBSCRIBE_TO_FAILED_ACTIVE_ENTITY = 3084;
-    public static final int FEED_UNKNOWN_ADAPTER_NAME = 3085;
-    public static final int PROVIDER_STREAM_RECORD_READER_WRONG_CONFIGURATION = 3086;
-    public static final int FEED_CONNECT_FEED_APPLIED_INVALID_FUNCTION = 3087;
-    public static final int ACTIVE_MANAGER_INVALID_RUNTIME = 3088;
-    public static final int ACTIVE_ENTITY_ALREADY_STARTED = 3089;
-    public static final int ACTIVE_ENTITY_CANNOT_BE_STOPPED = 3090;
-    public static final int CANNOT_ADD_DATASET_TO_ACTIVE_ENTITY = 3091;
-    public static final int CANNOT_REMOVE_DATASET_FROM_ACTIVE_ENTITY = 3092;
-    public static final int ACTIVE_ENTITY_IS_ALREADY_REGISTERED = 3093;
-    public static final int CANNOT_ADD_INDEX_TO_DATASET_CONNECTED_TO_ACTIVE_ENTITY = 3094;
-    public static final int CANNOT_REMOVE_INDEX_FROM_DATASET_CONNECTED_TO_ACTIVE_ENTITY = 3095;
-    public static final int ACTIVE_NOTIFICATION_HANDLER_IS_SUSPENDED = 3096;
-    public static final int ACTIVE_ENTITY_LISTENER_IS_NOT_REGISTERED = 3097;
-    public static final int CANNOT_DERIGESTER_ACTIVE_ENTITY_LISTENER = 3098;
-    public static final int DOUBLE_INITIALIZATION_OF_ACTIVE_NOTIFICATION_HANDLER = 3099;
-    public static final int DOUBLE_RECOVERY_ATTEMPTS = 3101;
-    public static final int UNREPORTED_TASK_FAILURE_EXCEPTION = 3102;
-    public static final int ACTIVE_ENTITY_ALREADY_SUSPENDED = 3103;
-    public static final int ACTIVE_ENTITY_CANNOT_RESUME_FROM_STATE = 3104;
-    public static final int ACTIVE_RUNTIME_IS_ALREADY_REGISTERED = 3105;
-    public static final int ACTIVE_RUNTIME_IS_NOT_REGISTERED = 3106;
-    public static final int ACTIVE_EVENT_HANDLER_ALREADY_SUSPENDED = 3107;
-    public static final int METADATA_DROP_FUCTION_IN_USE = 3109;
-    public static final int FEED_FAILED_WHILE_GETTING_A_NEW_RECORD = 3110;
-    public static final int FEED_START_FEED_WITHOUT_CONNECTION = 3111;
-    public static final int PARSER_COLLECTION_ITEM_CANNOT_BE_NULL = 3112;
-    public static final int FAILED_TO_PARSE_RECORD = 3113;
-    public static final int FAILED_TO_PARSE_RECORD_CONTENT = 3114;
-    public static final int FAILED_TO_PARSE_METADATA = 3115;
-    public static final int INPUT_DECODE_FAILURE = 3116;
-    public static final int FAILED_TO_PARSE_MALFORMED_LOG_RECORD = 3117;
-    public static final int ACTIVE_ENTITY_NOT_RUNNING = 3118;
+    DATAFLOW_ILLEGAL_STATE(3001),
+    UTIL_DATAFLOW_UTILS_TUPLE_TOO_LARGE(3002),
+    UTIL_DATAFLOW_UTILS_UNKNOWN_FORWARD_POLICY(3003),
+    OPERATORS_FEED_INTAKE_OPERATOR_DESCRIPTOR_CLASSLOADER_NOT_CONFIGURED(3004),
+    PARSER_DELIMITED_NONOPTIONAL_NULL(3005),
+    PARSER_DELIMITED_ILLEGAL_FIELD(3006),
+    ADAPTER_TWITTER_TWITTER4J_LIB_NOT_FOUND(3007),
+    OPERATORS_FEED_INTAKE_OPERATOR_NODE_PUSHABLE_FAIL_AT_INGESTION(3008),
+    FEED_CREATE_FEED_DATATYPE_ERROR(3009),
+    PARSER_HIVE_NON_PRIMITIVE_LIST_NOT_SUPPORT(3010),
+    PARSER_HIVE_FIELD_TYPE(3011),
+    PARSER_HIVE_GET_COLUMNS(3012),
+    PARSER_HIVE_NO_CLOSED_COLUMNS(3013),
+    PARSER_HIVE_NOT_SUPPORT_NON_OP_UNION(3014),
+    PARSER_HIVE_MISSING_FIELD_TYPE_INFO(3015),
+    PARSER_HIVE_NULL_FIELD(3016),
+    PARSER_HIVE_NULL_VALUE_IN_LIST(3017),
+    INPUT_RECORD_RECORD_WITH_METADATA_AND_PK_NULL_IN_NON_OPTIONAL(3018),
+    INPUT_RECORD_RECORD_WITH_METADATA_AND_PK_CANNT_GET_PKEY(3019),
+    FEED_CHANGE_FEED_CONNECTIVITY_ON_ALIVE_FEED(3020),
+    RECORD_READER_MALFORMED_INPUT_STREAM(3021),
+    PROVIDER_DATAFLOW_CONTROLLER_UNKNOWN_DATA_SOURCE(3022),
+    PROVIDER_DATASOURCE_FACTORY_UNKNOWN_INPUT_STREAM_FACTORY(3023),
+    UTIL_EXTERNAL_DATA_UTILS_FAIL_CREATE_STREAM_FACTORY(3024),
+    UNKNOWN_RECORD_READER_FACTORY(3025),
+    PROVIDER_STREAM_RECORD_READER_UNKNOWN_FORMAT(3026),
+    UNKNOWN_RECORD_FORMAT_FOR_META_PARSER(3027),
+    LIBRARY_JAVA_JOBJECTS_FIELD_ALREADY_DEFINED(3028),
+    LIBRARY_JAVA_JOBJECTS_UNKNOWN_FIELD(3029),
+    NODE_RESOLVER_NO_NODE_CONTROLLERS(3031),
+    NODE_RESOLVER_UNABLE_RESOLVE_HOST(3032),
+    INPUT_RECORD_CONVERTER_DCP_MSG_TO_RECORD_CONVERTER_UNKNOWN_DCP_REQUEST(3033),
+    FEED_DATAFLOW_FRAME_DISTR_REGISTER_FAILED_DATA_PROVIDER(3034),
+    INPUT_RECORD_READER_CHAR_ARRAY_RECORD_TOO_LARGE(3038),
+    LIBRARY_JOBJECT_ACCESSOR_CANNOT_PARSE_TYPE(3039),
+    LIBRARY_JOBJECT_UTIL_ILLEGAL_ARGU_TYPE(3040),
+    LIBRARY_EXTERNAL_FUNCTION_UNABLE_TO_LOAD_CLASS(3041),
+    LIBRARY_EXTERNAL_FUNCTION_UNSUPPORTED_KIND(3042),
+    LIBRARY_EXTERNAL_FUNCTION_UNKNOWN_KIND(3043),
+    LIBRARY_EXTERNAL_LIBRARY_CLASS_REGISTERED(3044),
+    LIBRARY_JAVA_FUNCTION_HELPER_CANNOT_HANDLE_ARGU_TYPE(3045),
+    LIBRARY_JAVA_FUNCTION_HELPER_OBJ_TYPE_NOT_SUPPORTED(3046),
+    LIBRARY_EXTERNAL_FUNCTION_UNSUPPORTED_NAME(3047),
+    OPERATORS_FEED_META_OPERATOR_DESCRIPTOR_INVALID_RUNTIME(3048),
+    INVALID_DELIMITER(3049),
+    INVALID_CHAR_LENGTH(3050),
+    QUOTE_DELIMITER_MISMATCH(3051),
+    INDEXING_EXTERNAL_FILE_INDEX_ACCESSOR_UNABLE_TO_FIND_FILE_INDEX(3052),
+    PARSER_ADM_DATA_PARSER_FIELD_NOT_NULL(3053),
+    PARSER_ADM_DATA_PARSER_TYPE_MISMATCH(3054),
+    PARSER_ADM_DATA_PARSER_UNEXPECTED_TOKEN_KIND(3055),
+    PARSER_ADM_DATA_PARSER_ILLEGAL_ESCAPE(3056),
+    PARSER_ADM_DATA_PARSER_RECORD_END_UNEXPECTED(3057),
+    PARSER_ADM_DATA_PARSER_EXTRA_FIELD_IN_CLOSED_RECORD(3058),
+    PARSER_ADM_DATA_PARSER_UNEXPECTED_TOKEN_WHEN_EXPECT_COMMA(3059),
+    PARSER_ADM_DATA_PARSER_FOUND_COMMA_WHEN(3060),
+    PARSER_ADM_DATA_PARSER_UNSUPPORTED_INTERVAL_TYPE(3061),
+    PARSER_ADM_DATA_PARSER_INTERVAL_NOT_CLOSED(3062),
+    PARSER_ADM_DATA_PARSER_INTERVAL_BEGIN_END_POINT_MISMATCH(3063),
+    PARSER_ADM_DATA_PARSER_INTERVAL_MISSING_COMMA(3064),
+    PARSER_ADM_DATA_PARSER_INTERVAL_INVALID_DATETIME(3065),
+    PARSER_ADM_DATA_PARSER_INTERVAL_UNSUPPORTED_TYPE(3066),
+    PARSER_ADM_DATA_PARSER_INTERVAL_INTERVAL_ARGUMENT_ERROR(3067),
+    PARSER_ADM_DATA_PARSER_LIST_FOUND_END_COLLECTION(3068),
+    PARSER_ADM_DATA_PARSER_LIST_FOUND_COMMA_BEFORE_LIST(3069),
+    PARSER_ADM_DATA_PARSER_LIST_FOUND_COMMA_EXPECTING_ITEM(3070),
+    PARSER_ADM_DATA_PARSER_LIST_FOUND_END_RECOD(3071),
+    PARSER_ADM_DATA_PARSER_CAST_ERROR(3072),
+    PARSER_ADM_DATA_PARSER_CONSTRUCTOR_MISSING_DESERIALIZER(3073),
+    PARSER_ADM_DATA_PARSER_WRONG_INSTANCE(3074),
+    PARSER_TWEET_PARSER_CLOSED_FIELD_NULL(3075),
+    UTIL_FILE_SYSTEM_WATCHER_NO_FILES_FOUND(3076),
+    UTIL_LOCAL_FILE_SYSTEM_UTILS_PATH_NOT_FOUND(3077),
+    UTIL_HDFS_UTILS_CANNOT_OBTAIN_HDFS_SCHEDULER(3078),
+    ACTIVE_MANAGER_SHUTDOWN(3079),
+    FEED_METADATA_UTIL_UNEXPECTED_FEED_DATATYPE(3080),
+    FEED_METADATA_SOCKET_ADAPTOR_SOCKET_NOT_PROPERLY_CONFIGURED(3081),
+    FEED_METADATA_SOCKET_ADAPTOR_SOCKET_INVALID_HOST_NC(3082),
+    PROVIDER_DATASOURCE_FACTORY_DUPLICATE_FORMAT_MAPPING(3083),
+    CANNOT_SUBSCRIBE_TO_FAILED_ACTIVE_ENTITY(3084),
+    FEED_UNKNOWN_ADAPTER_NAME(3085),
+    PROVIDER_STREAM_RECORD_READER_WRONG_CONFIGURATION(3086),
+    FEED_CONNECT_FEED_APPLIED_INVALID_FUNCTION(3087),
+    ACTIVE_MANAGER_INVALID_RUNTIME(3088),
+    ACTIVE_ENTITY_ALREADY_STARTED(3089),
+    ACTIVE_ENTITY_CANNOT_BE_STOPPED(3090),
+    CANNOT_ADD_DATASET_TO_ACTIVE_ENTITY(3091),
+    CANNOT_REMOVE_DATASET_FROM_ACTIVE_ENTITY(3092),
+    ACTIVE_ENTITY_IS_ALREADY_REGISTERED(3093),
+    CANNOT_ADD_INDEX_TO_DATASET_CONNECTED_TO_ACTIVE_ENTITY(3094),
+    CANNOT_REMOVE_INDEX_FROM_DATASET_CONNECTED_TO_ACTIVE_ENTITY(3095),
+    ACTIVE_NOTIFICATION_HANDLER_IS_SUSPENDED(3096),
+    ACTIVE_ENTITY_LISTENER_IS_NOT_REGISTERED(3097),
+    CANNOT_DERIGESTER_ACTIVE_ENTITY_LISTENER(3098),
+    DOUBLE_INITIALIZATION_OF_ACTIVE_NOTIFICATION_HANDLER(3099),
+    DOUBLE_RECOVERY_ATTEMPTS(3101),
+    UNREPORTED_TASK_FAILURE_EXCEPTION(3102),
+    ACTIVE_ENTITY_ALREADY_SUSPENDED(3103),
+    ACTIVE_ENTITY_CANNOT_RESUME_FROM_STATE(3104),
+    ACTIVE_RUNTIME_IS_ALREADY_REGISTERED(3105),
+    ACTIVE_RUNTIME_IS_NOT_REGISTERED(3106),
+    ACTIVE_EVENT_HANDLER_ALREADY_SUSPENDED(3107),
+    METADATA_DROP_FUCTION_IN_USE(3109),
+    FEED_FAILED_WHILE_GETTING_A_NEW_RECORD(3110),
+    FEED_START_FEED_WITHOUT_CONNECTION(3111),
+    PARSER_COLLECTION_ITEM_CANNOT_BE_NULL(3112),
+    FAILED_TO_PARSE_RECORD(3113),
+    FAILED_TO_PARSE_RECORD_CONTENT(3114),
+    FAILED_TO_PARSE_METADATA(3115),
+    INPUT_DECODE_FAILURE(3116),
+    FAILED_TO_PARSE_MALFORMED_LOG_RECORD(3117),
+    ACTIVE_ENTITY_NOT_RUNNING(3118),
 
     // Lifecycle management errors
-    public static final int DUPLICATE_PARTITION_ID = 4000;
+    DUPLICATE_PARTITION_ID(4000),
 
     // Extension errors
-    public static final int EXTENSION_ID_CONFLICT = 4001;
-    public static final int EXTENSION_COMPONENT_CONFLICT = 4002;
-    public static final int UNSUPPORTED_MESSAGE_TYPE = 4003;
-    public static final int INVALID_CONFIGURATION = 4004;
-    public static final int UNSUPPORTED_REPLICATION_STRATEGY = 4005;
+    EXTENSION_ID_CONFLICT(4001),
+    EXTENSION_COMPONENT_CONFLICT(4002),
+    UNSUPPORTED_MESSAGE_TYPE(4003),
+    INVALID_CONFIGURATION(4004),
+    UNSUPPORTED_REPLICATION_STRATEGY(4005),
 
     // Lifecycle management errors pt.2
-    public static final int CLUSTER_STATE_UNUSABLE = 4006;
+    CLUSTER_STATE_UNUSABLE(4006),;
 
-    private ErrorCode() {
+    private static final String RESOURCE_PATH = "asx_errormsg/en.properties";
+    public static final String ASTERIX = "ASX";
+    private final int intValue;
+    private volatile String message;
+
+    ErrorCode(int intValue) {
+        this.intValue = intValue;
     }
 
-    private static class Holder {
-        private static final Map<Integer, String> errorMessageMap;
-
-        static {
-            // Loads the map that maps error codes to error message templates.
-            try (InputStream resourceStream = ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
-                errorMessageMap = ErrorMessageUtil.loadErrorMap(resourceStream);
-            } catch (Exception e) {
-                throw new IllegalStateException(e);
-            }
-        }
-
-        private Holder() {
-        }
+    @Override
+    public String component() {
+        return ASTERIX;
     }
 
-    public static String getErrorMessage(int errorCode) {
-        String msg = Holder.errorMessageMap.get(errorCode);
-        if (msg == null) {
-            throw new IllegalStateException("Undefined error code: " + errorCode);
+    @Override
+    public int intValue() {
+        return intValue;
+    }
+
+    @Override
+    public String errorMessage() {
+        return ErrorMessageMapHolder.get(this);
+    }
+
+    private static class ErrorMessageMapHolder {
+        private static final String[] enumMessages =
+                ErrorMessageUtil.defineMessageEnumOrdinalMap(values(), RESOURCE_PATH);
+
+        private static String get(ErrorCode errorCode) {
+            return enumMessages[errorCode.ordinal()];
         }
-        return msg;
     }
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ExceptionUtils.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ExceptionUtils.java
index 1f42771..f73848f 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ExceptionUtils.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ExceptionUtils.java
@@ -20,7 +20,6 @@
 
 import java.util.function.Predicate;
 
-import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.exceptions.IFormattedException;
 
 public class ExceptionUtils {
@@ -54,22 +53,6 @@
         return current;
     }
 
-    public static Throwable getCause(Throwable e, String component, int code) {
-        Throwable current = e;
-        Throwable expected =
-                (current instanceof HyracksDataException && ((HyracksDataException) current).getErrorCode() == code
-                        && ((HyracksDataException) current).getComponent().equals(component)) ? current : null;
-        Throwable cause = e.getCause();
-        while (cause != null && cause != current) {
-            current = cause;
-            expected =
-                    (current instanceof HyracksDataException && ((HyracksDataException) current).getErrorCode() == code
-                            && ((HyracksDataException) current).getComponent().equals(component)) ? current : expected;
-            cause = current.getCause();
-        }
-        return expected == null ? current : expected;
-    }
-
     /**
      * Determines whether supplied exception contains a matching cause in its hierarchy, or is itself a match
      */
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
index a735c81..13a006d 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/MetadataException.java
@@ -30,51 +30,51 @@
     private static final long serialVersionUID = 1L;
     private static final Logger LOGGER = LogManager.getLogger();
 
-    @Deprecated
     /**
-     * @Deprecated Instead, use a constructor with error code
+     * @deprecated Instead, use a constructor with error code
      * @param message
      */
+    @Deprecated
     public MetadataException(String message) {
         super(message);
     }
 
-    @Deprecated
     /**
-     * @Deprecated When creating a constructor with cause,
+     * @deprecated When creating a constructor with cause,
      *             create AlgebricksException using AlgebricksException.create(Throwable th);
      * @param cause
      */
+    @Deprecated
     public MetadataException(Throwable cause) {
         super(cause);
     }
 
-    @Deprecated
     /**
-     * @Deprecated When creating a constructor with cause,
+     * @deprecated When creating a constructor with cause,
      *             create AlgebricksException using AlgebricksException.create(Throwable th);
      * @param cause
      */
+    @Deprecated
     public MetadataException(String message, Throwable cause) {
         super(message, cause);
     }
 
-    public MetadataException(int errorCode, Serializable... params) {
-        super(errorCode, params);
-    }
-
-    public MetadataException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        super(errorCode, sourceLoc, params);
-    }
-
-    public MetadataException(int errorCode, Throwable cause, Serializable... params) {
-        super(errorCode, cause, params);
-    }
-
-    public MetadataException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+    public MetadataException(ErrorCode errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
         super(errorCode, cause, sourceLoc, params);
     }
 
+    public MetadataException(ErrorCode errorCode, SourceLocation sourceLoc, Serializable... params) {
+        this(errorCode, null, sourceLoc, params);
+    }
+
+    public MetadataException(ErrorCode errorCode, Throwable cause, Serializable... params) {
+        this(errorCode, cause, null, params);
+    }
+
+    public MetadataException(ErrorCode errorCode, Serializable... params) {
+        this(errorCode, null, null, params);
+    }
+
     public static MetadataException create(Throwable cause) {
         if (cause instanceof MetadataException || cause == null) {
             return (MetadataException) cause;
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
index 1c6763f..1a0a61f 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
@@ -27,19 +27,25 @@
 public class RuntimeDataException extends HyracksDataException {
     private static final long serialVersionUID = 1L;
 
-    public RuntimeDataException(int errorCode, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), params);
+    public static RuntimeDataException create(ErrorCode error, Serializable... params) {
+        return new RuntimeDataException(error, params);
     }
 
-    public RuntimeDataException(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), null, sourceLoc, params);
+    public RuntimeDataException(ErrorCode errorCode, Throwable cause, SourceLocation sourceLoc,
+            Serializable... params) {
+        super(errorCode, cause, sourceLoc, params);
     }
 
-    public RuntimeDataException(int errorCode, Throwable cause, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, params);
+    public RuntimeDataException(ErrorCode errorCode, Serializable... params) {
+        this(errorCode, null, null, params);
     }
 
-    public RuntimeDataException(int errorCode, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), cause, sourceLoc, params);
+    public RuntimeDataException(ErrorCode errorCode, SourceLocation sourceLoc, Serializable... params) {
+        this(errorCode, null, sourceLoc, params);
     }
+
+    public RuntimeDataException(ErrorCode errorCode, Throwable cause, Serializable... params) {
+        this(errorCode, cause, null, params);
+    }
+
 }
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
index 6a369ef..4bbb3a7 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/WarningUtil.java
@@ -21,19 +21,22 @@
 import java.io.Serializable;
 import java.util.Collection;
 
+import org.apache.hyracks.api.exceptions.IError;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.hyracks.api.exceptions.Warning;
-import org.apache.hyracks.api.util.ErrorMessageUtil;
 
 public class WarningUtil {
 
     private WarningUtil() {
     }
 
-    public static Warning forAsterix(SourceLocation srcLocation, int code, Serializable... params) {
-        return Warning.of(ErrorCode.ASTERIX, srcLocation, code, ErrorMessageUtil.formatMessage(ErrorCode.ASTERIX, code,
-                ErrorCode.getErrorMessage(code), srcLocation, params));
+    /**
+     * @deprecated call {@link Warning#of(SourceLocation, IError, Serializable...)} directly
+     */
+    @Deprecated
+    public static Warning forAsterix(SourceLocation srcLocation, ErrorCode code, Serializable... params) {
+        return Warning.of(srcLocation, code, params);
     }
 
     /** Merges the warnings from the collection argument into the warning collector argument. */
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
index 7a089b8..947257c 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/dataflow/FeedRecordDataFlowController.java
@@ -93,8 +93,7 @@
             }
         } catch (HyracksDataException e) {
             LOGGER.log(Level.WARN, "Exception during ingestion", e);
-            if (e.getComponent() == ErrorCode.ASTERIX
-                    && (e.getErrorCode() == ErrorCode.FEED_FAILED_WHILE_GETTING_A_NEW_RECORD)) {
+            if (e.matches(ErrorCode.FEED_FAILED_WHILE_GETTING_A_NEW_RECORD)) {
                 // Failure but we know we can for sure push the previously parsed records safely
                 failure = e;
                 try {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedExceptionHandler.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedExceptionHandler.java
index 2fda99f..a836ef9 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedExceptionHandler.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/feed/dataflow/FeedExceptionHandler.java
@@ -46,7 +46,7 @@
     @Override
     public ByteBuffer handle(HyracksDataException th, ByteBuffer frame) {
         try {
-            if (th.getErrorCode() == ErrorCode.ERROR_PROCESSING_TUPLE) {
+            if (th.matches(ErrorCode.ERROR_PROCESSING_TUPLE)) {
                 // TODO(amoudi): add check for cause. cause should be either cast or duplicate key
                 fta.reset(frame);
                 int tupleIndex = (int) (th.getParams()[0]);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/LocalFSInputStream.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/LocalFSInputStream.java
index be6a331..f9eade5 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/LocalFSInputStream.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/stream/LocalFSInputStream.java
@@ -18,10 +18,8 @@
  */
 package org.apache.asterix.external.input.stream;
 
-import static org.apache.asterix.common.exceptions.ErrorCode.ASTERIX;
 import static org.apache.asterix.common.exceptions.ErrorCode.INPUT_RECORD_READER_CHAR_ARRAY_RECORD_TOO_LARGE;
 import static org.apache.asterix.common.exceptions.ErrorCode.RECORD_READER_MALFORMED_INPUT_STREAM;
-import static org.apache.hyracks.api.exceptions.ErrorCode.HYRACKS;
 import static org.apache.hyracks.api.exceptions.ErrorCode.PARSING_ERROR;
 
 import java.io.File;
@@ -134,22 +132,12 @@
         Throwable root = ExceptionUtils.getRootCause(th);
         if (root instanceof HyracksDataException) {
             HyracksDataException r = (HyracksDataException) root;
-            String component = r.getComponent();
             boolean advance = false;
-            int errorCode = r.getErrorCode();
-            if (ASTERIX.equals(component)) {
-                switch (errorCode) {
-                    case RECORD_READER_MALFORMED_INPUT_STREAM:
-                        logCorruptedInput();
-                    case INPUT_RECORD_READER_CHAR_ARRAY_RECORD_TOO_LARGE:
-                        advance = true;
-                        break;
-                    default:
-                        break;
-                }
-            } else if (HYRACKS.equals(component) && errorCode == PARSING_ERROR) {
+            if (r.matchesAny(RECORD_READER_MALFORMED_INPUT_STREAM, PARSING_ERROR)) {
                 logCorruptedInput();
                 advance = true;
+            } else if (r.matches(INPUT_RECORD_READER_CHAR_ARRAY_RECORD_TOO_LARGE)) {
+                advance = true;
             }
             if (advance) {
                 try {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
index ea99993..477f0fe 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/ExternalFilesIndexModificationOperatorDescriptor.java
@@ -23,6 +23,7 @@
 import java.util.Map;
 
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.external.indexing.ExternalFile;
 import org.apache.asterix.external.indexing.FileIndexTupleTranslator;
 import org.apache.hyracks.api.comm.IFrameWriter;
@@ -89,7 +90,7 @@
                             case NO_OP:
                                 break;
                             default:
-                                throw HyracksDataException.create(ErrorCode.UNKNOWN_EXTERNAL_FILE_PENDING_OP, sourceLoc,
+                                throw RuntimeDataException.create(ErrorCode.UNKNOWN_EXTERNAL_FILE_PENDING_OP, sourceLoc,
                                         file.getPendingOp());
                         }
                     }
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedIntakeOperatorNodePushable.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedIntakeOperatorNodePushable.java
index 7002a23..e1ba399 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedIntakeOperatorNodePushable.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/FeedIntakeOperatorNodePushable.java
@@ -135,7 +135,7 @@
                     taskThread.interrupt();
                 }
             } catch (HyracksDataException hde) {
-                if (hde.getComponent() == ErrorCode.HYRACKS && hde.getErrorCode() == ErrorCode.TIMEOUT) {
+                if (hde.matches(ErrorCode.TIMEOUT)) {
                     LOGGER.log(Level.WARN, runtimeId + " stop adapter timed out. interrupting the thread...", hde);
                     taskThread.interrupt();
                 } else {
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
index 8c518c4..b2036c0 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/JSONDataParser.java
@@ -486,7 +486,7 @@
                 msg = ExceptionUtils.getRootCause(e).getMessage();
             }
             if (msg == null) {
-                msg = ErrorCode.getErrorMessage(ErrorCode.RECORD_READER_MALFORMED_INPUT_STREAM);
+                msg = ErrorCode.RECORD_READER_MALFORMED_INPUT_STREAM.errorMessage();
             }
             long lineNum = lineNumber.getAsLong() + jsonParser.getCurrentLocation().getLineNr() - 1;
             JsonStreamContext parsingContext = jsonParser.getParsingContext();
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
index 5ccb7a3..e9f93c9 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ParseException.java
@@ -22,6 +22,7 @@
 
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.IError;
 
 public class ParseException extends HyracksDataException {
     private static final long serialVersionUID = 1L;
@@ -33,23 +34,31 @@
         super(message);
     }
 
-    public ParseException(int errorCode, Serializable... param) {
-        super(ErrorCode.ASTERIX, errorCode, ErrorCode.getErrorMessage(errorCode), param);
+    public ParseException(ErrorCode error, Throwable e, Serializable... param) {
+        super(error, e, null, param);
     }
 
-    public ParseException(int errorCode, Throwable e, Serializable... param) {
-        super(ErrorCode.ASTERIX, errorCode, e, ErrorCode.getErrorMessage(errorCode), param);
-        addSuppressed(e);
+    public ParseException(ErrorCode error, Serializable... param) {
+        this(error, null, param);
     }
 
+    /**
+     * @deprecated use {@link IError} ctors when possible
+     */
     public ParseException(Throwable cause) {
         super(cause);
     }
 
+    /**
+     * @deprecated use {@link IError} ctors when possible
+     */
     public ParseException(String message, Throwable cause) {
         super(message, cause);
     }
 
+    /**
+     * @deprecated use {@link IError} ctors when possible
+     */
     public ParseException(Throwable cause, String filename, int line, int column) {
         super(cause);
         setLocation(filename, line, column);
diff --git a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/RecordWithMetadataParserFactory.java b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/RecordWithMetadataParserFactory.java
index f940f3d..3ae9b82 100644
--- a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/RecordWithMetadataParserFactory.java
+++ b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/factory/RecordWithMetadataParserFactory.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.external.api.IRecordDataParser;
 import org.apache.asterix.external.api.IRecordDataParserFactory;
@@ -54,12 +55,12 @@
         // validate first
         String recordFormat = configuration.get(ExternalDataConstants.KEY_RECORD_FORMAT);
         if (recordFormat == null) {
-            throw AlgebricksException.create(ErrorCode.UNKNOWN_RECORD_FORMAT_FOR_META_PARSER,
+            throw CompilationException.create(ErrorCode.UNKNOWN_RECORD_FORMAT_FOR_META_PARSER,
                     ExternalDataConstants.KEY_RECORD_FORMAT);
         }
         String format = configuration.get(ExternalDataConstants.KEY_FORMAT);
         if (format == null) {
-            throw AlgebricksException.create(ErrorCode.UNKNOWN_RECORD_FORMAT_FOR_META_PARSER,
+            throw CompilationException.create(ErrorCode.UNKNOWN_RECORD_FORMAT_FOR_META_PARSER,
                     ExternalDataConstants.KEY_FORMAT);
         }
         // Create Parser Factory
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
index 6a34f65..28639c1 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/util/LangRecordParseUtil.java
@@ -25,6 +25,7 @@
 
 import org.apache.asterix.common.exceptions.CompilationException;
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.Literal;
 import org.apache.asterix.lang.common.expression.FieldBinding;
@@ -69,8 +70,8 @@
             case LIST_CONSTRUCTOR_EXPRESSION:
                 return parseList((ListConstructor) expr);
             default:
-                throw new HyracksDataException(ErrorCode.ASTERIX, ErrorCode.PARSE_ERROR,
-                        NOT_ALLOWED_EXPRESSIONS_ERROR_MESSAGE, Expression.Kind.LITERAL_EXPRESSION.toString(),
+                throw new RuntimeDataException(ErrorCode.PARSE_ERROR, NOT_ALLOWED_EXPRESSIONS_ERROR_MESSAGE,
+                        Expression.Kind.LITERAL_EXPRESSION.toString(),
                         Expression.Kind.RECORD_CONSTRUCTOR_EXPRESSION.toString(),
                         Expression.Kind.LIST_CONSTRUCTOR_EXPRESSION.toString());
         }
@@ -110,7 +111,7 @@
 
     private static AdmArrayNode parseList(ListConstructor valueExpr) throws CompilationException, HyracksDataException {
         if (valueExpr.getType() != ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR) {
-            throw new HyracksDataException(ErrorCode.ASTERIX, ErrorCode.PARSE_ERROR, "JSON List can't be of type %1$s",
+            throw new RuntimeDataException(ErrorCode.PARSE_ERROR, "JSON List can't be of type %1$s",
                     valueExpr.getType());
         }
         List<Expression> exprs = valueExpr.getExprList();
@@ -140,7 +141,7 @@
             case STRING:
                 return new AdmStringNode((String) value.getValue());
             default:
-                throw new HyracksDataException(ErrorCode.ASTERIX, ErrorCode.PARSE_ERROR, "Unknown Literal Type %1$s",
+                throw new RuntimeDataException(ErrorCode.PARSE_ERROR, "Unknown Literal Type %1$s",
                         value.getLiteralType());
         }
     }
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
index e6a768d..5d4fe1c 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java
@@ -328,7 +328,7 @@
             ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(dataverse);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException(
                         "A dataverse with this name " + dataverse.getDataverseName() + " already exists.", e);
             } else {
@@ -354,7 +354,7 @@
                 addIndex(txnId, primaryIndex);
             }
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A dataset with this name " + dataset.getDatasetName()
                         + " already exists in dataverse '" + dataset.getDataverseName() + "'.", e);
             } else {
@@ -370,7 +370,7 @@
             ITupleReference tuple = tupleWriter.getTupleFromMetadataEntity(index);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("An index with name '" + index.getIndexName() + "' already exists.", e);
             } else {
                 throw new AlgebricksException(e);
@@ -385,7 +385,7 @@
             ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(node);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.NODE_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A node with name '" + node.getNodeName() + "' already exists.", e);
             } else {
                 throw new AlgebricksException(e);
@@ -401,7 +401,7 @@
             ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(nodeGroup);
             modifyMetadataIndex(modificationOp, txnId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException(
                         "A nodegroup with name '" + nodeGroup.getNodeGroupName() + "' already exists.", e);
             } else {
@@ -418,7 +418,7 @@
             ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(datatype);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException(
                         "A datatype with name '" + datatype.getDatatypeName() + "' already exists.", e);
             } else {
@@ -437,7 +437,7 @@
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.FUNCTION_DATASET, functionTuple);
 
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A function with this name " + function.getName() + " and arity "
                         + function.getArity() + " already exists in dataverse '" + function.getDataverseName() + "'.",
                         e);
@@ -583,8 +583,7 @@
             ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.DATAVERSE_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop dataverse '" + dataverseName + "' because it doesn't exist.",
                         e);
             } else {
@@ -642,8 +641,7 @@
             } catch (HyracksDataException hde) {
                 // ignore this exception and continue deleting all relevant
                 // artifacts.
-                if (!hde.getComponent().equals(ErrorCode.HYRACKS)
-                        || hde.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                if (!hde.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                     throw new AlgebricksException(hde);
                 }
             } finally {
@@ -664,8 +662,7 @@
             ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException(
                         "Cannot drop index '" + datasetName + "." + indexName + "' because it doesn't exist.", e);
             } else {
@@ -698,8 +695,7 @@
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
             return true;
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop nodegroup '" + nodeGroupName + "' because it doesn't exist",
                         e);
             } else {
@@ -730,8 +726,7 @@
                 }
             }
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
             } else {
                 throw new AlgebricksException(e);
@@ -748,8 +743,7 @@
             ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
             } else {
                 throw new AlgebricksException(e);
@@ -1191,8 +1185,7 @@
                     getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.FUNCTION_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.FUNCTION_DATASET, functionTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("There is no function with the name " + functionSignature.getName()
                         + " and arity " + functionSignature.getArity(), e);
             } else {
@@ -1433,7 +1426,7 @@
             ITupleReference adapterTuple = tupleReaderWriter.getTupleFromMetadataEntity(adapter);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, adapterTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A adapter with this name " + adapter.getAdapterIdentifier().getName()
                         + " already exists in dataverse '" + adapter.getAdapterIdentifier().getNamespace() + "'.", e);
             } else {
@@ -1458,8 +1451,7 @@
                     getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, datasetTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop adapter '" + adapterName + " since it doesn't exist", e);
             } else {
                 throw new AlgebricksException(e);
@@ -1496,8 +1488,8 @@
             ITupleReference compactionPolicyTuple = tupleReaderWriter.getTupleFromMetadataEntity(compactionPolicy);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.COMPACTION_POLICY_DATASET, compactionPolicyTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
-                throw new AlgebricksException("A compcation policy with this name " + compactionPolicy.getPolicyName()
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
+                throw new AlgebricksException("A compaction policy with this name " + compactionPolicy.getPolicyName()
                         + " already exists in dataverse '" + compactionPolicy.getPolicyName() + "'.", e);
             } else {
                 throw new AlgebricksException(e);
@@ -1549,7 +1541,7 @@
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.LIBRARY_DATASET, libraryTuple);
 
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A library with this name " + library.getDataverseName()
                         + " already exists in dataverse '" + library.getDataverseName() + "'.", e);
             } else {
@@ -1574,8 +1566,7 @@
                     getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.LIBRARY_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.LIBRARY_DATASET, datasetTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop library '" + libraryName, e);
             } else {
                 throw new AlgebricksException(e);
@@ -1614,7 +1605,7 @@
             ITupleReference feedPolicyTuple = tupleReaderWriter.getTupleFromMetadataEntity(feedPolicy);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.FEED_POLICY_DATASET, feedPolicyTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A feed policy with this name " + feedPolicy.getPolicyName()
                         + " already exists in dataverse '" + feedPolicy.getPolicyName() + "'.", e);
             } else {
@@ -1706,7 +1697,7 @@
             ITupleReference feedTuple = tupleReaderWriter.getTupleFromMetadataEntity(feed);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.FEED_DATASET, feedTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("A feed with this name " + feed.getFeedName()
                         + " already exists in dataverse '" + feed.getDataverseName() + "'.", e);
             } else {
@@ -1755,8 +1746,7 @@
             ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.FEED_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.FEED_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Cannot drop feed '" + feedName + "' because it doesn't exist", e);
             } else {
                 throw new AlgebricksException(e);
@@ -1772,8 +1762,7 @@
             ITupleReference tuple = getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.FEED_POLICY_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.FEED_POLICY_DATASET, tuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Unknown feed policy " + policyName, e);
             } else {
                 throw new AlgebricksException(e);
@@ -1805,7 +1794,7 @@
             ITupleReference externalFileTuple = tupleReaderWriter.getTupleFromMetadataEntity(externalFile);
             insertTupleIntoIndex(txnId, MetadataPrimaryIndexes.EXTERNAL_FILE_DATASET, externalFileTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS) && e.getErrorCode() == ErrorCode.DUPLICATE_KEY) {
+            if (e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw new AlgebricksException("An externalFile with this number " + externalFile.getFileNumber()
                         + " already exists in dataset '" + externalFile.getDatasetName() + "' in dataverse '"
                         + externalFile.getDataverseName() + "'.", e);
@@ -1843,8 +1832,7 @@
                     getTupleToBeDeleted(txnId, MetadataPrimaryIndexes.EXTERNAL_FILE_DATASET, searchKey);
             deleteTupleFromIndex(txnId, MetadataPrimaryIndexes.EXTERNAL_FILE_DATASET, datasetTuple);
         } catch (HyracksDataException e) {
-            if (e.getComponent().equals(ErrorCode.HYRACKS)
-                    && e.getErrorCode() == ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+            if (e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                 throw new AlgebricksException("Couldn't drop externalFile.", e);
             } else {
                 throw new AlgebricksException(e);
diff --git a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
index 52dd3fd..8e9118e 100644
--- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
+++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
@@ -395,7 +395,7 @@
                 throw HyracksDataException.create(e);
             } else {
                 HyracksDataException hde = (HyracksDataException) e.getCause();
-                if (!hde.getComponent().equals(ErrorCode.HYRACKS) || hde.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!hde.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw hde;
                 }
             }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
index 83810e3..10b61c0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
@@ -23,6 +23,7 @@
 import java.io.IOException;
 
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.dataflow.data.nontagged.Coordinate;
 import org.apache.asterix.om.base.APoint;
 import org.apache.asterix.om.base.APolygon;
@@ -70,7 +71,7 @@
             case Y:
                 return 11 + (pointId * 16);
             default:
-                throw HyracksDataException.create(ErrorCode.POLYGON_INVALID_COORDINATE);
+                throw new RuntimeDataException(ErrorCode.POLYGON_INVALID_COORDINATE);
         }
     }
 
@@ -78,7 +79,7 @@
         try {
             String[] points = polygon.split(" ");
             if (points.length < 3) {
-                throw HyracksDataException.create(ErrorCode.POLYGON_3_POINTS);
+                throw new RuntimeDataException(ErrorCode.POLYGON_3_POINTS);
             }
             out.writeByte(ATypeTag.POLYGON.serialize());
             out.writeShort(points.length);
@@ -87,7 +88,7 @@
                 APointSerializerDeserializer.serialize(Double.parseDouble(split[0]), Double.parseDouble(split[1]), out);
             }
         } catch (IOException e) {
-            throw HyracksDataException.create(ErrorCode.POLYGON_INVALID, e, polygon);
+            throw new RuntimeDataException(ErrorCode.POLYGON_INVALID, e, polygon);
         }
     }
 }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
index 952ffb4..664eb28 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
@@ -37,6 +37,10 @@
 
 public final class SerializerDeserializerUtil {
 
+    private SerializerDeserializerUtil() {
+        throw new AssertionError("do not instantiate");
+    }
+
     public static void writeIntToByteArray(byte[] array, int value, int offset) {
         array[offset] = (byte) (0xff & (value >> 24));
         array[offset + 1] = (byte) (0xff & (value >> 16));
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/object/base/AdmObjectNode.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/object/base/AdmObjectNode.java
index 26024b4..294f48b 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/object/base/AdmObjectNode.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/object/base/AdmObjectNode.java
@@ -28,6 +28,7 @@
 
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.formats.nontagged.SerializerDeserializerProvider;
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.types.ATypeTag;
@@ -164,9 +165,9 @@
     public static String getString(AdmObjectNode openFields, String field) throws HyracksDataException {
         IAdmNode node = openFields.get(field);
         if (node == null) {
-            throw HyracksDataException.create(ErrorCode.FIELD_NOT_FOUND, field);
+            throw new RuntimeDataException(ErrorCode.FIELD_NOT_FOUND, field);
         } else if (node.getType() != ATypeTag.STRING) {
-            throw HyracksDataException.create(ErrorCode.FIELD_NOT_OF_TYPE, field, ATypeTag.STRING, node.getType());
+            throw new RuntimeDataException(ErrorCode.FIELD_NOT_OF_TYPE, field, ATypeTag.STRING, node.getType());
         }
         return ((AdmStringNode) node).get();
     }
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
index b5d599b..c9686ee 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/ExceptionUtil.java
@@ -136,7 +136,7 @@
     }
 
     private static void warnInvalidValue(IEvaluatorContext ctx, SourceLocation srcLoc, FunctionIdentifier fid,
-            int argIdx, double argValue, int errorCode) {
+            int argIdx, double argValue, ErrorCode errorCode) {
         IWarningCollector warningCollector = ctx.getWarningCollector();
         if (warningCollector.shouldWarn()) {
             warningCollector.warn(WarningUtil.forAsterix(srcLoc, errorCode, fid.getName(), indexToPosition(argIdx),
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
index e155b94..3b8602b 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/exceptions/TypeMismatchException.java
@@ -32,14 +32,13 @@
     private static final long serialVersionUID = -3069967719104299912L;
 
     // Function parameter type mismatch.
-    public TypeMismatchException(FunctionIdentifier fid, Integer i, ATypeTag actualTypeTag,
-            ATypeTag... expectedTypeTags) {
+    public TypeMismatchException(FunctionIdentifier fid, int i, ATypeTag actualTypeTag, ATypeTag... expectedTypeTags) {
         super(ErrorCode.COMPILATION_TYPE_MISMATCH_FUNCTION, fid.getName(), indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags), actualTypeTag);
     }
 
     // Function parameter type mismatch.
-    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, Integer i, ATypeTag actualTypeTag,
+    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, int i, ATypeTag actualTypeTag,
             ATypeTag... expectedTypeTags) {
         super(ErrorCode.COMPILATION_TYPE_MISMATCH_FUNCTION, sourceLoc, fid.getName(), indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags), actualTypeTag);
@@ -47,14 +46,14 @@
 
     // Function parameter type mismatch.
     @Deprecated
-    public TypeMismatchException(String functionName, Integer i, ATypeTag actualTypeTag, ATypeTag... expectedTypeTags) {
+    public TypeMismatchException(String functionName, int i, ATypeTag actualTypeTag, ATypeTag... expectedTypeTags) {
         super(ErrorCode.COMPILATION_TYPE_MISMATCH_FUNCTION, functionName, indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags), actualTypeTag);
     }
 
     // Function parameter type mismatch.
     @Deprecated
-    public TypeMismatchException(SourceLocation sourceLoc, String functionName, Integer i, ATypeTag actualTypeTag,
+    public TypeMismatchException(SourceLocation sourceLoc, String functionName, int i, ATypeTag actualTypeTag,
             ATypeTag... expectedTypeTags) {
         super(ErrorCode.COMPILATION_TYPE_MISMATCH_FUNCTION, sourceLoc, functionName, indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags), actualTypeTag);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
index 7da0263..4a1d371 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/utils/NonTaggedFormatUtil.java
@@ -20,6 +20,7 @@
 
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
 import org.apache.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
@@ -114,7 +115,7 @@
             case ANY:
                 ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serNonTaggedAObject[offset]);
                 if (tag == ATypeTag.ANY) {
-                    throw HyracksDataException.create(ErrorCode.FIELD_SHOULD_BE_TYPED);
+                    throw new RuntimeDataException(ErrorCode.FIELD_SHOULD_BE_TYPED);
                 }
                 return getFieldValueLength(serNonTaggedAObject, offset, tag, true) + 1;
             case MISSING:
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
index bb94ca6..ba713e3 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/InvalidDataFormatException.java
@@ -28,19 +28,17 @@
 public class InvalidDataFormatException extends RuntimeDataException {
     private static final long serialVersionUID = 7927137063741221011L;
 
-    public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, byte expectedTypeTag) {
-        super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(),
+    public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, Throwable cause,
+            byte expectedTypeTag) {
+        super(ErrorCode.INVALID_FORMAT, cause, sourceLoc, fid.getName(),
                 EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(expectedTypeTag));
     }
 
+    public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, byte expectedTypeTag) {
+        this(sourceLoc, fid, null, expectedTypeTag);
+    }
+
     public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, String expectedType) {
         super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(), expectedType);
     }
-
-    public InvalidDataFormatException(SourceLocation sourceLoc, FunctionIdentifier fid, Throwable cause,
-            byte expectedTypeTag) {
-        super(ErrorCode.INVALID_FORMAT, sourceLoc, fid.getName(), cause, expectedTypeTag);
-        addSuppressed(cause);
-    }
-
 }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
index e510fba..f51c305 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/exceptions/TypeMismatchException.java
@@ -32,14 +32,14 @@
     private static final long serialVersionUID = -668005043013338591L;
 
     // Function parameter type mismatch.
-    public TypeMismatchException(FunctionIdentifier fid, Integer i, byte actualTypeTag, byte... expectedTypeTags) {
+    public TypeMismatchException(FunctionIdentifier fid, int i, byte actualTypeTag, byte... expectedTypeTags) {
         super(ErrorCode.TYPE_MISMATCH_FUNCTION, fid.getName(), indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags),
                 EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
     }
 
     // Function parameter type mismatch.
-    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, Integer i, byte actualTypeTag,
+    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, int i, byte actualTypeTag,
             byte... expectedTypeTags) {
         super(ErrorCode.TYPE_MISMATCH_FUNCTION, sourceLoc, fid.getName(), indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags),
@@ -47,7 +47,7 @@
     }
 
     // Function parameter type mismatch.
-    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, Integer i, byte actualTypeTag,
+    public TypeMismatchException(SourceLocation sourceLoc, FunctionIdentifier fid, int i, byte actualTypeTag,
             String expectedType) {
         super(ErrorCode.TYPE_MISMATCH_FUNCTION, sourceLoc, fid.getName(), indexToPosition(i), expectedType,
                 EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
@@ -55,7 +55,7 @@
 
     // Function parameter type mismatch.
     @Deprecated
-    public TypeMismatchException(String functionName, Integer i, byte actualTypeTag, byte... expectedTypeTags) {
+    public TypeMismatchException(String functionName, int i, byte actualTypeTag, byte... expectedTypeTags) {
         super(ErrorCode.TYPE_MISMATCH_FUNCTION, functionName, indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags),
                 EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(actualTypeTag));
@@ -63,7 +63,7 @@
 
     // Function parameter type mismatch.
     @Deprecated
-    public TypeMismatchException(SourceLocation sourceLoc, String functionName, Integer i, byte actualTypeTag,
+    public TypeMismatchException(SourceLocation sourceLoc, String functionName, int i, byte actualTypeTag,
             byte... expectedTypeTags) {
         super(ErrorCode.TYPE_MISMATCH_FUNCTION, sourceLoc, functionName, indexToPosition(i),
                 toExpectedTypeString(expectedTypeTags),
diff --git a/asterixdb/asterix-runtime/src/test/java/org/apache/asterix/runtime/job/resource/JobCapacityControllerTest.java b/asterixdb/asterix-runtime/src/test/java/org/apache/asterix/runtime/job/resource/JobCapacityControllerTest.java
index 4a63885..48c61b4 100644
--- a/asterixdb/asterix-runtime/src/test/java/org/apache/asterix/runtime/job/resource/JobCapacityControllerTest.java
+++ b/asterixdb/asterix-runtime/src/test/java/org/apache/asterix/runtime/job/resource/JobCapacityControllerTest.java
@@ -53,7 +53,7 @@
         try {
             capacityController.allocate(makeJobWithRequiredCapacity(2147483648L, 64));
         } catch (HyracksException e) {
-            exceedCapacity = e.getErrorCode() == ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY;
+            exceedCapacity = e.matches(ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY);
         }
         Assert.assertTrue(exceedCapacity);
         Assert.assertTrue(capacityController.allocate(
@@ -62,7 +62,7 @@
         try {
             capacityController.allocate(makeJobWithRequiredCapacity(4294967297L, 33));
         } catch (HyracksException e) {
-            exceedCapacity = e.getErrorCode() == ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY;
+            exceedCapacity = e.matches(ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY);
         }
         Assert.assertTrue(exceedCapacity);
 
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index 2f367aa..1fa9a0f 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -715,5 +715,13 @@
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>algebricks-core</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.hyracks</groupId>
+      <artifactId>hyracks-api</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/FormattedExceptionInstanceTest.java b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/FormattedExceptionInstanceTest.java
new file mode 100644
index 0000000..f8d7d03
--- /dev/null
+++ b/asterixdb/asterix-server/src/test/java/org/apache/asterix/test/server/FormattedExceptionInstanceTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.test.server;
+
+import java.lang.reflect.Executable;
+
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.api.exceptions.IFormattedException;
+import org.apache.hyracks.test.support.FormattedExceptionTestBase;
+import org.junit.runners.Parameterized;
+
+public class FormattedExceptionInstanceTest extends FormattedExceptionTestBase {
+    private static final ErrorCode ASK_ERROR_CODE = random(ErrorCode.values());
+    private static final FunctionIdentifier FUNCTION_IDENTIFIER = new FunctionIdentifier("fake", "fake");
+    static {
+        classSelector = classname -> classname.matches("^org\\.apache\\.(asterix|hyracks)\\..*");
+    }
+
+    public FormattedExceptionInstanceTest(String desc, Executable action, Class<? extends IFormattedException> root) {
+        super(desc, action, root);
+    }
+
+    @Parameterized.Parameters(name = "{index}: {0}")
+    public static Iterable<Object[]> data() throws ClassNotFoundException {
+        return defineParameters();
+    }
+
+    @Override
+    protected Object defaultValue(Class type) {
+        switch (type.getName()) {
+            case "org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier":
+                return FUNCTION_IDENTIFIER;
+            case "org.apache.asterix.common.exceptions.ErrorCode":
+                return ASK_ERROR_CODE;
+            default:
+                return super.defaultValue(type);
+        }
+    }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
index ac22b60..f00161c 100644
--- a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
+++ b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
@@ -19,8 +19,10 @@
 package org.apache.hyracks.algebricks.common.exceptions;
 
 import java.io.Serializable;
+import java.util.Optional;
 
 import org.apache.hyracks.api.exceptions.ErrorCode;
+import org.apache.hyracks.api.exceptions.IError;
 import org.apache.hyracks.api.exceptions.IFormattedException;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.hyracks.api.util.ErrorMessageUtil;
@@ -34,13 +36,23 @@
     private final Serializable[] params;
     private final String nodeId;
     private final SourceLocation sourceLoc;
+    protected final transient IError error;
 
     @SuppressWarnings("squid:S1165") // exception class not final
-    private transient CachedMessage msgCache;
+    private transient volatile String msgCache;
 
-    public AlgebricksException(String component, int errorCode, String message, Throwable cause,
+    public static AlgebricksException create(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        return new AlgebricksException(error, sourceLoc, params);
+    }
+
+    public static AlgebricksException create(ErrorCode error, Serializable... params) {
+        return create(error, null, params);
+    }
+
+    protected AlgebricksException(IError error, String component, int errorCode, String message, Throwable cause,
             SourceLocation sourceLoc, String nodeId, Serializable... params) {
         super(message, cause);
+        this.error = error;
         this.component = component;
         this.errorCode = errorCode;
         this.sourceLoc = sourceLoc;
@@ -53,7 +65,7 @@
      */
     @Deprecated
     public AlgebricksException(String message) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, message, null, null, (Serializable[]) null);
+        this((IError) null, ErrorMessageUtil.NONE, UNKNOWN, message, null, null, null);
     }
 
     /**
@@ -61,7 +73,7 @@
      */
     @Deprecated
     public AlgebricksException(Throwable cause) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, cause.getMessage(), cause, (Serializable[]) null);
+        this(String.valueOf(cause), cause);
     }
 
     /**
@@ -69,60 +81,23 @@
      */
     @Deprecated
     public AlgebricksException(String message, Throwable cause) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, message, cause, null, (Serializable[]) null);
+        this((IError) null, ErrorMessageUtil.NONE, UNKNOWN, message, cause, null, null);
     }
 
-    public AlgebricksException(String component, int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        this(component, errorCode, null, null, sourceLoc, null, params);
+    public AlgebricksException(Throwable cause, ErrorCode error, Serializable... params) {
+        this(error, error.component(), error.intValue(), error.errorMessage(), cause, null, null, params);
     }
 
-    public AlgebricksException(String component, int errorCode, Serializable... params) {
-        this(component, errorCode, null, null, null, null, params);
+    public AlgebricksException(ErrorCode error, SourceLocation sourceLoc, Serializable... params) {
+        this(error, error.component(), error.intValue(), error.errorMessage(), null, sourceLoc, null, params);
     }
 
-    public AlgebricksException(Throwable cause, int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        this(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, sourceLoc, null, params);
+    public AlgebricksException(ErrorCode error, Serializable... params) {
+        this(error, null, params);
     }
 
-    public AlgebricksException(Throwable cause, int errorCode, Serializable... params) {
-        this(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, null, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, String message, SourceLocation sourceLoc,
-            Serializable... params) {
-        this(component, errorCode, message, null, sourceLoc, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, String message, Serializable... params) {
-        this(component, errorCode, message, null, null, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, Throwable cause, SourceLocation sourceLoc,
-            Serializable... params) {
-        this(component, errorCode, cause.getMessage(), cause, sourceLoc, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, Throwable cause, Serializable... params) {
-        this(component, errorCode, cause.getMessage(), cause, null, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, String message, Throwable cause,
-            SourceLocation sourceLoc, Serializable... params) {
-        this(component, errorCode, message, cause, sourceLoc, null, params);
-    }
-
-    public AlgebricksException(String component, int errorCode, String message, Throwable cause,
-            Serializable... params) {
-        this(component, errorCode, message, cause, null, null, params);
-    }
-
-    public static AlgebricksException create(int errorCode, SourceLocation sourceLoc, Serializable... params) {
-        return new AlgebricksException(ErrorCode.HYRACKS, errorCode, ErrorCode.getErrorMessage(errorCode), sourceLoc,
-                params);
-    }
-
-    public static AlgebricksException create(int errorCode, Serializable... params) {
-        return create(errorCode, null, params);
+    protected AlgebricksException(IError error, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+        this(error, error.component(), error.intValue(), error.errorMessage(), cause, sourceLoc, null, params);
     }
 
     @Override
@@ -148,19 +123,15 @@
     }
 
     @Override
-    public String getMessage() {
-        if (msgCache == null) {
-            msgCache = new CachedMessage(
-                    ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params));
-        }
-        return msgCache.message;
+    public Optional<IError> getError() {
+        return Optional.ofNullable(error);
     }
 
-    private static class CachedMessage {
-        private final String message;
-
-        private CachedMessage(String message) {
-            this.message = message;
+    @Override
+    public String getMessage() {
+        if (msgCache == null) {
+            msgCache = ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params);
         }
+        return msgCache;
     }
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractWindowPOperator.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractWindowPOperator.java
index 0b3a79c..560435e 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractWindowPOperator.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractWindowPOperator.java
@@ -102,8 +102,8 @@
             OrderColumn oc = orderColumns.get(oIdx);
             LogicalVariable ocVar = oc.getColumn();
             if (!pcVars.remove(ocVar) && containsAny(orderColumns, oIdx + 1, pcVars)) {
-                throw new AlgebricksException(ErrorCode.HYRACKS, ErrorCode.UNSUPPORTED_WINDOW_SPEC,
-                        op.getSourceLocation(), String.valueOf(partitionColumns), String.valueOf(orderColumns));
+                throw AlgebricksException.create(ErrorCode.UNSUPPORTED_WINDOW_SPEC, op.getSourceLocation(),
+                        String.valueOf(partitionColumns), String.valueOf(orderColumns));
             }
             lopColumns.add(new OrderColumn(oc.getColumn(), oc.getOrder()));
         }
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
index 21ea331..16a2dee 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitorJson.java
@@ -178,7 +178,7 @@
                 jsonGenerator.writeEndArray();
             }
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -201,7 +201,7 @@
             }
             jsonGenerator.writeEndObject();
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -212,7 +212,7 @@
             writeVariablesAndExpressions(op.getVariables(), op.getExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -223,7 +223,7 @@
             writeVariablesAndExpressions(op.getVariables(), op.getExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -233,7 +233,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "empty-tuple-source");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -255,7 +255,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -269,7 +269,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -280,7 +280,7 @@
             writeStringFieldExpression(CONDITION_FIELD, op.getCondition(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -291,7 +291,7 @@
             writeStringFieldExpression(CONDITION_FIELD, op.getCondition(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -301,7 +301,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "nested-tuple-source");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -316,7 +316,7 @@
             writeArrayFieldOfOrderExprList("order-by-list", op.getOrderExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -327,7 +327,7 @@
             writeVariablesAndExpressions(op.getVariables(), op.getExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -341,7 +341,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -355,7 +355,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -368,7 +368,7 @@
             writeObjectFieldWithExpressions("partitioned-by", op.getKeyExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -379,7 +379,7 @@
             writeStringFieldExpression(CONDITION_FIELD, op.getCondition(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -393,7 +393,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -420,7 +420,7 @@
             jsonGenerator.writeEndArray();
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -438,7 +438,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -461,7 +461,7 @@
             writeSelectLimitInformation(op.getSelectCondition(), op.getOutputLimit(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -490,7 +490,7 @@
             writeSelectLimitInformation(op.getSelectCondition(), op.getOutputLimit(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -505,7 +505,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -515,7 +515,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "exchange");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -533,7 +533,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -543,7 +543,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "replicate");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -554,7 +554,7 @@
             writeStringFieldExpression(EXPRESSION_FIELD, op.getBranchingExpression(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -564,7 +564,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "materialize");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -592,7 +592,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -616,7 +616,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -627,7 +627,7 @@
             writeVariablesAndExpressions(op.getTokenizeVars(), op.getSecondaryKeyExpressions(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -638,7 +638,7 @@
             writeStringFieldExpression(EXPRESSION_FIELD, op.getSideDataExpression(), indent);
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -648,7 +648,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, "sink");
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -658,7 +658,7 @@
             jsonGenerator.writeStringField(OPERATOR_FIELD, op.toString());
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -720,7 +720,7 @@
             }
             return null;
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -735,7 +735,7 @@
             jsonGenerator.writeEndArray();
             idCounter.previousPrefix();
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -753,7 +753,7 @@
             }
             writeArrayFieldOfExpression(EXPRESSIONS_FIELD, op.getExpressionRef(), indent);
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -768,7 +768,7 @@
             writeArrayFieldOfExpression(EXPRESSIONS_FIELD, op.getExpressionRef(), indent);
             writeFilterInformation(op.getMinFilterVars(), op.getMaxFilterVars());
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -786,7 +786,7 @@
                 jsonGenerator.writeEndObject();
             }
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 
@@ -926,7 +926,7 @@
         try {
             jsonGenerator.flush();
         } catch (IOException e) {
-            throw new AlgebricksException(e, ErrorCode.ERROR_PRINTING_PLAN);
+            throw AlgebricksException.create(ErrorCode.ERROR_PRINTING_PLAN, e, String.valueOf(e));
         }
     }
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
index 42f9aba..7243827 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetAlgebricksPhysicalOperatorsRule.java
@@ -223,8 +223,8 @@
                     } else if (gby.getSourceLocation() != null) {
                         IWarningCollector warningCollector = context.getWarningCollector();
                         if (warningCollector.shouldWarn()) {
-                            warningCollector.warn(Warning.forHyracks(gby.getSourceLocation(),
-                                    ErrorCode.INAPPLICABLE_HINT, "Group By", "hash"));
+                            warningCollector.warn(Warning.of(gby.getSourceLocation(), ErrorCode.INAPPLICABLE_HINT,
+                                    "Group By", "hash"));
                         }
                     }
                 }
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
index 6eede7f..257798b 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/util/JoinUtils.java
@@ -224,7 +224,7 @@
         if (OperatorPropertiesUtil.isAlwaysTrueCond(conditionExpr) && sourceLoc != null) {
             IWarningCollector warningCollector = context.getWarningCollector();
             if (warningCollector.shouldWarn()) {
-                warningCollector.warn(Warning.forHyracks(sourceLoc, ErrorCode.CROSS_PRODUCT_JOIN));
+                warningCollector.warn(Warning.of(sourceLoc, ErrorCode.CROSS_PRODUCT_JOIN));
             }
         }
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
index 16ba168..6bbc588 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java
@@ -18,9 +18,6 @@
  */
 package org.apache.hyracks.api.exceptions;
 
-import java.io.InputStream;
-import java.util.Map;
-
 import org.apache.hyracks.api.util.ErrorMessageUtil;
 
 /**
@@ -29,171 +26,174 @@
  * 0 --- 9999: runtime errors
  * 10000 ---- 19999: compilation errors
  */
-public class ErrorCode {
-    private static final String RESOURCE_PATH = "errormsg/en.properties";
-    public static final String HYRACKS = "HYR";
-
+public enum ErrorCode implements IError {
     // Runtime error codes.
-    public static final int INVALID_OPERATOR_OPERATION = 1;
-    public static final int ERROR_PROCESSING_TUPLE = 2;
-    public static final int FAILURE_ON_NODE = 3;
-    public static final int FILE_WITH_ABSOULTE_PATH_NOT_WITHIN_ANY_IO_DEVICE = 4;
-    public static final int FULLTEXT_PHRASE_FOUND = 5;
-    public static final int JOB_QUEUE_FULL = 6;
-    public static final int INVALID_NETWORK_ADDRESS = 7;
-    public static final int INVALID_INPUT_PARAMETER = 8;
-    public static final int JOB_REQUIREMENTS_EXCEED_CAPACITY = 9;
-    public static final int NO_SUCH_NODE = 10;
-    public static final int CLASS_LOADING_ISSUE = 11;
-    public static final int ILLEGAL_WRITE_AFTER_FLUSH_ATTEMPT = 12;
-    public static final int DUPLICATE_IODEVICE = 13;
-    public static final int NESTED_IODEVICES = 14;
-    public static final int MORE_THAN_ONE_RESULT = 15;
-    public static final int RESULT_FAILURE_EXCEPTION = 16;
-    public static final int RESULT_FAILURE_NO_EXCEPTION = 17;
-    public static final int INCONSISTENT_RESULT_METADATA = 18;
-    public static final int CANNOT_DELETE_FILE = 19;
-    public static final int NOT_A_JOBID = 20;
-    public static final int ERROR_FINDING_DEPLOYED_JOB = 21;
-    public static final int DUPLICATE_DEPLOYED_JOB = 22;
-    public static final int DEPLOYED_JOB_FAILURE = 23;
-    public static final int NO_RESULT_SET = 24;
-    public static final int JOB_CANCELED = 25;
-    public static final int NODE_FAILED = 26;
-    public static final int FILE_IS_NOT_DIRECTORY = 27;
-    public static final int CANNOT_READ_FILE = 28;
-    public static final int UNIDENTIFIED_IO_ERROR_READING_FILE = 29;
-    public static final int FILE_DOES_NOT_EXIST = 30;
-    public static final int UNIDENTIFIED_IO_ERROR_DELETING_DIR = 31;
-    public static final int RESULT_NO_RECORD = 32;
-    public static final int DUPLICATE_KEY = 33;
-    public static final int LOAD_NON_EMPTY_INDEX = 34;
-    public static final int MODIFY_NOT_SUPPORTED_IN_EXTERNAL_INDEX = 35;
-    public static final int FLUSH_NOT_SUPPORTED_IN_EXTERNAL_INDEX = 36;
-    public static final int UPDATE_OR_DELETE_NON_EXISTENT_KEY = 37;
-    public static final int INDEX_NOT_UPDATABLE = 38;
-    public static final int OCCURRENCE_THRESHOLD_PANIC_EXCEPTION = 39;
-    public static final int UNKNOWN_INVERTED_INDEX_TYPE = 40;
-    public static final int CANNOT_PROPOSE_LINEARIZER_DIFF_DIMENSIONS = 41;
-    public static final int CANNOT_PROPOSE_LINEARIZER_FOR_TYPE = 42;
-    public static final int RECORD_IS_TOO_LARGE = 43;
-    public static final int FAILED_TO_RE_FIND_PARENT = 44;
-    public static final int FAILED_TO_FIND_TUPLE = 45;
-    public static final int UNSORTED_LOAD_INPUT = 46;
-    public static final int OPERATION_EXCEEDED_MAX_RESTARTS = 47;
-    public static final int DUPLICATE_LOAD_INPUT = 48;
-    public static final int CANNOT_CREATE_ACTIVE_INDEX = 49;
-    public static final int CANNOT_ACTIVATE_ACTIVE_INDEX = 50;
-    public static final int CANNOT_DEACTIVATE_INACTIVE_INDEX = 51;
-    public static final int CANNOT_DESTROY_ACTIVE_INDEX = 52;
-    public static final int CANNOT_CLEAR_INACTIVE_INDEX = 53;
-    public static final int CANNOT_ALLOCATE_MEMORY_FOR_INACTIVE_INDEX = 54;
-    public static final int RESOURCE_DOES_NOT_EXIST = 55;
-    public static final int DISK_COMPONENT_SCAN_NOT_ALLOWED_FOR_SECONDARY_INDEX = 56;
-    public static final int CANNOT_FIND_MATTER_TUPLE_FOR_ANTI_MATTER_TUPLE = 57;
-    public static final int TASK_ABORTED = 58;
-    public static final int OPEN_ON_OPEN_WRITER = 59;
-    public static final int OPEN_ON_FAILED_WRITER = 60;
-    public static final int NEXT_FRAME_ON_FAILED_WRITER = 61;
-    public static final int NEXT_FRAME_ON_CLOSED_WRITER = 62;
-    public static final int FLUSH_ON_FAILED_WRITER = 63;
-    public static final int FLUSH_ON_CLOSED_WRITER = 64;
-    public static final int FAIL_ON_FAILED_WRITER = 65;
-    public static final int MISSED_FAIL_CALL = 66;
-    public static final int CANNOT_CREATE_FILE = 67;
-    public static final int NO_MAPPING_FOR_FILE_ID = 68;
-    public static final int NO_MAPPING_FOR_FILENAME = 69;
-    public static final int CANNOT_GET_NUMBER_OF_ELEMENT_FROM_INACTIVE_FILTER = 70;
-    public static final int CANNOT_CREATE_BLOOM_FILTER_BUILDER_FOR_INACTIVE_FILTER = 71;
-    public static final int CANNOT_CREATE_BLOOM_FILTER_WITH_NUMBER_OF_PAGES = 72;
-    public static final int CANNOT_ADD_TUPLES_TO_DUMMY_BLOOM_FILTER = 73;
-    public static final int CANNOT_CREATE_ACTIVE_BLOOM_FILTER = 74;
-    public static final int CANNOT_DEACTIVATE_INACTIVE_BLOOM_FILTER = 75;
-    public static final int CANNOT_DESTROY_ACTIVE_BLOOM_FILTER = 76;
-    public static final int CANNOT_PURGE_ACTIVE_INDEX = 77;
-    public static final int CANNOT_PURGE_ACTIVE_BLOOM_FILTER = 78;
-    public static final int CANNOT_BULK_LOAD_NON_EMPTY_TREE = 79;
-    public static final int CANNOT_CREATE_EXISTING_INDEX = 80;
-    public static final int FILE_ALREADY_MAPPED = 81;
-    public static final int FILE_ALREADY_EXISTS = 82;
-    public static final int NO_INDEX_FOUND_WITH_RESOURCE_ID = 83;
-    public static final int FOUND_OVERLAPPING_LSM_FILES = 84;
-    public static final int FOUND_MULTIPLE_TRANSACTIONS = 85;
-    public static final int UNRECOGNIZED_INDEX_COMPONENT_FILE = 86;
-    public static final int UNEQUAL_NUM_FILTERS_TREES = 87;
-    public static final int INDEX_NOT_MODIFIABLE = 88;
-    public static final int GROUP_BY_MEMORY_BUDGET_EXCEEDS = 89;
-    public static final int ILLEGAL_MEMORY_BUDGET = 90;
-    public static final int TIMEOUT = 91;
-    public static final int JOB_HAS_BEEN_CLEARED_FROM_HISTORY = 92;
-    public static final int FAILED_TO_READ_RESULT = 93;
-    public static final int CANNOT_READ_CLOSED_FILE = 94;
-    public static final int TUPLE_CANNOT_FIT_INTO_EMPTY_FRAME = 95;
-    public static final int ILLEGAL_ATTEMPT_TO_ENTER_EMPTY_COMPONENT = 96;
-    public static final int ILLEGAL_ATTEMPT_TO_EXIT_EMPTY_COMPONENT = 97;
-    public static final int A_FLUSH_OPERATION_HAS_FAILED = 98;
-    public static final int A_MERGE_OPERATION_HAS_FAILED = 99;
-    public static final int FAILED_TO_SHUTDOWN_EVENT_PROCESSOR = 100;
-    public static final int PAGE_DOES_NOT_EXIST_IN_FILE = 101;
-    public static final int VBC_ALREADY_OPEN = 102;
-    public static final int VBC_ALREADY_CLOSED = 103;
-    public static final int INDEX_DOES_NOT_EXIST = 104;
-    public static final int CANNOT_DROP_IN_USE_INDEX = 105;
-    public static final int CANNOT_DEACTIVATE_PINNED_BLOOM_FILTER = 106;
-    public static final int PREDICATE_CANNOT_BE_NULL = 107;
-    public static final int FULLTEXT_ONLY_EXECUTABLE_FOR_STRING_OR_LIST = 108;
-    public static final int NOT_ENOUGH_BUDGET_FOR_TEXTSEARCH = 109;
-    public static final int CANNOT_CONTINUE_TEXT_SEARCH_HYRACKS_TASK_IS_NULL = 110;
-    public static final int CANNOT_CONTINUE_TEXT_SEARCH_BUFFER_MANAGER_IS_NULL = 111;
-    public static final int CANNOT_ADD_ELEMENT_TO_INVERTED_INDEX_SEARCH_RESULT = 112;
-    public static final int UNDEFINED_INVERTED_LIST_MERGE_TYPE = 113;
-    public static final int NODE_IS_NOT_ACTIVE = 114;
-    public static final int LOCAL_NETWORK_ERROR = 115;
-    public static final int ONE_TUPLE_RANGEMAP_EXPECTED = 116;
-    public static final int NO_RANGEMAP_PRODUCED = 117;
-    public static final int RANGEMAP_NOT_FOUND = 118;
-    public static final int UNSUPPORTED_WINDOW_SPEC = 119;
-    public static final int EOF = 120;
-    public static final int NUMERIC_PROMOTION_ERROR = 121;
-    public static final int ERROR_PRINTING_PLAN = 122;
-    public static final int INSUFFICIENT_MEMORY = 123;
-    public static final int PARSING_ERROR = 124;
+    INVALID_OPERATOR_OPERATION(1),
+    ERROR_PROCESSING_TUPLE(2),
+    FAILURE_ON_NODE(3),
+    FILE_WITH_ABSOULTE_PATH_NOT_WITHIN_ANY_IO_DEVICE(4),
+    FULLTEXT_PHRASE_FOUND(5),
+    JOB_QUEUE_FULL(6),
+    INVALID_NETWORK_ADDRESS(7),
+    INVALID_INPUT_PARAMETER(8),
+    JOB_REQUIREMENTS_EXCEED_CAPACITY(9),
+    NO_SUCH_NODE(10),
+    CLASS_LOADING_ISSUE(11),
+    ILLEGAL_WRITE_AFTER_FLUSH_ATTEMPT(12),
+    DUPLICATE_IODEVICE(13),
+    NESTED_IODEVICES(14),
+    MORE_THAN_ONE_RESULT(15),
+    RESULT_FAILURE_EXCEPTION(16),
+    RESULT_FAILURE_NO_EXCEPTION(17),
+    INCONSISTENT_RESULT_METADATA(18),
+    CANNOT_DELETE_FILE(19),
+    NOT_A_JOBID(20),
+    ERROR_FINDING_DEPLOYED_JOB(21),
+    DUPLICATE_DEPLOYED_JOB(22),
+    DEPLOYED_JOB_FAILURE(23),
+    NO_RESULT_SET(24),
+    JOB_CANCELED(25),
+    NODE_FAILED(26),
+    FILE_IS_NOT_DIRECTORY(27),
+    CANNOT_READ_FILE(28),
+    UNIDENTIFIED_IO_ERROR_READING_FILE(29),
+    FILE_DOES_NOT_EXIST(30),
+    UNIDENTIFIED_IO_ERROR_DELETING_DIR(31),
+    RESULT_NO_RECORD(32),
+    DUPLICATE_KEY(33),
+    LOAD_NON_EMPTY_INDEX(34),
+    MODIFY_NOT_SUPPORTED_IN_EXTERNAL_INDEX(35),
+    FLUSH_NOT_SUPPORTED_IN_EXTERNAL_INDEX(36),
+    UPDATE_OR_DELETE_NON_EXISTENT_KEY(37),
+    INDEX_NOT_UPDATABLE(38),
+    OCCURRENCE_THRESHOLD_PANIC_EXCEPTION(39),
+    UNKNOWN_INVERTED_INDEX_TYPE(40),
+    CANNOT_PROPOSE_LINEARIZER_DIFF_DIMENSIONS(41),
+    CANNOT_PROPOSE_LINEARIZER_FOR_TYPE(42),
+    RECORD_IS_TOO_LARGE(43),
+    FAILED_TO_RE_FIND_PARENT(44),
+    FAILED_TO_FIND_TUPLE(45),
+    UNSORTED_LOAD_INPUT(46),
+    OPERATION_EXCEEDED_MAX_RESTARTS(47),
+    DUPLICATE_LOAD_INPUT(48),
+    CANNOT_CREATE_ACTIVE_INDEX(49),
+    CANNOT_ACTIVATE_ACTIVE_INDEX(50),
+    CANNOT_DEACTIVATE_INACTIVE_INDEX(51),
+    CANNOT_DESTROY_ACTIVE_INDEX(52),
+    CANNOT_CLEAR_INACTIVE_INDEX(53),
+    CANNOT_ALLOCATE_MEMORY_FOR_INACTIVE_INDEX(54),
+    RESOURCE_DOES_NOT_EXIST(55),
+    DISK_COMPONENT_SCAN_NOT_ALLOWED_FOR_SECONDARY_INDEX(56),
+    CANNOT_FIND_MATTER_TUPLE_FOR_ANTI_MATTER_TUPLE(57),
+    TASK_ABORTED(58),
+    OPEN_ON_OPEN_WRITER(59),
+    OPEN_ON_FAILED_WRITER(60),
+    NEXT_FRAME_ON_FAILED_WRITER(61),
+    NEXT_FRAME_ON_CLOSED_WRITER(62),
+    FLUSH_ON_FAILED_WRITER(63),
+    FLUSH_ON_CLOSED_WRITER(64),
+    FAIL_ON_FAILED_WRITER(65),
+    MISSED_FAIL_CALL(66),
+    CANNOT_CREATE_FILE(67),
+    NO_MAPPING_FOR_FILE_ID(68),
+    NO_MAPPING_FOR_FILENAME(69),
+    CANNOT_GET_NUMBER_OF_ELEMENT_FROM_INACTIVE_FILTER(70),
+    CANNOT_CREATE_BLOOM_FILTER_BUILDER_FOR_INACTIVE_FILTER(71),
+    CANNOT_CREATE_BLOOM_FILTER_WITH_NUMBER_OF_PAGES(72),
+    CANNOT_ADD_TUPLES_TO_DUMMY_BLOOM_FILTER(73),
+    CANNOT_CREATE_ACTIVE_BLOOM_FILTER(74),
+    CANNOT_DEACTIVATE_INACTIVE_BLOOM_FILTER(75),
+    CANNOT_DESTROY_ACTIVE_BLOOM_FILTER(76),
+    CANNOT_PURGE_ACTIVE_INDEX(77),
+    CANNOT_PURGE_ACTIVE_BLOOM_FILTER(78),
+    CANNOT_BULK_LOAD_NON_EMPTY_TREE(79),
+    CANNOT_CREATE_EXISTING_INDEX(80),
+    FILE_ALREADY_MAPPED(81),
+    FILE_ALREADY_EXISTS(82),
+    NO_INDEX_FOUND_WITH_RESOURCE_ID(83),
+    FOUND_OVERLAPPING_LSM_FILES(84),
+    FOUND_MULTIPLE_TRANSACTIONS(85),
+    UNRECOGNIZED_INDEX_COMPONENT_FILE(86),
+    UNEQUAL_NUM_FILTERS_TREES(87),
+    INDEX_NOT_MODIFIABLE(88),
+    GROUP_BY_MEMORY_BUDGET_EXCEEDS(89),
+    ILLEGAL_MEMORY_BUDGET(90),
+    TIMEOUT(91),
+    JOB_HAS_BEEN_CLEARED_FROM_HISTORY(92),
+    FAILED_TO_READ_RESULT(93),
+    CANNOT_READ_CLOSED_FILE(94),
+    TUPLE_CANNOT_FIT_INTO_EMPTY_FRAME(95),
+    ILLEGAL_ATTEMPT_TO_ENTER_EMPTY_COMPONENT(96),
+    ILLEGAL_ATTEMPT_TO_EXIT_EMPTY_COMPONENT(97),
+    A_FLUSH_OPERATION_HAS_FAILED(98),
+    A_MERGE_OPERATION_HAS_FAILED(99),
+    FAILED_TO_SHUTDOWN_EVENT_PROCESSOR(100),
+    PAGE_DOES_NOT_EXIST_IN_FILE(101),
+    VBC_ALREADY_OPEN(102),
+    VBC_ALREADY_CLOSED(103),
+    INDEX_DOES_NOT_EXIST(104),
+    CANNOT_DROP_IN_USE_INDEX(105),
+    CANNOT_DEACTIVATE_PINNED_BLOOM_FILTER(106),
+    PREDICATE_CANNOT_BE_NULL(107),
+    FULLTEXT_ONLY_EXECUTABLE_FOR_STRING_OR_LIST(108),
+    NOT_ENOUGH_BUDGET_FOR_TEXTSEARCH(109),
+    CANNOT_CONTINUE_TEXT_SEARCH_HYRACKS_TASK_IS_NULL(110),
+    CANNOT_CONTINUE_TEXT_SEARCH_BUFFER_MANAGER_IS_NULL(111),
+    CANNOT_ADD_ELEMENT_TO_INVERTED_INDEX_SEARCH_RESULT(112),
+    UNDEFINED_INVERTED_LIST_MERGE_TYPE(113),
+    NODE_IS_NOT_ACTIVE(114),
+    LOCAL_NETWORK_ERROR(115),
+    ONE_TUPLE_RANGEMAP_EXPECTED(116),
+    NO_RANGEMAP_PRODUCED(117),
+    RANGEMAP_NOT_FOUND(118),
+    UNSUPPORTED_WINDOW_SPEC(119),
+    EOF(120),
+    NUMERIC_PROMOTION_ERROR(121),
+    ERROR_PRINTING_PLAN(122),
+    INSUFFICIENT_MEMORY(123),
+    PARSING_ERROR(124),
 
     // Compilation error codes.
-    public static final int RULECOLLECTION_NOT_INSTANCE_OF_LIST = 10000;
-    public static final int CANNOT_COMPOSE_PART_CONSTRAINTS = 10001;
-    public static final int PHYS_OPERATOR_NOT_SET = 10002;
-    public static final int DESCRIPTOR_GENERATION_ERROR = 10003;
-    public static final int EXPR_NOT_NORMALIZED = 10004;
-    public static final int OPERATOR_NOT_IMPLEMENTED = 10005;
-    public static final int INAPPLICABLE_HINT = 10006;
-    public static final int CROSS_PRODUCT_JOIN = 10007;
-    public static final int GROUP_ALL_DECOR = 10008;
+    RULECOLLECTION_NOT_INSTANCE_OF_LIST(10000),
+    CANNOT_COMPOSE_PART_CONSTRAINTS(10001),
+    PHYS_OPERATOR_NOT_SET(10002),
+    DESCRIPTOR_GENERATION_ERROR(10003),
+    EXPR_NOT_NORMALIZED(10004),
+    OPERATOR_NOT_IMPLEMENTED(10005),
+    INAPPLICABLE_HINT(10006),
+    CROSS_PRODUCT_JOIN(10007),
+    GROUP_ALL_DECOR(10008);
 
-    private static class Holder {
-        private static final Map<Integer, String> errorMessageMap;
+    private static final String RESOURCE_PATH = "errormsg/en.properties";
+    public static final String HYRACKS = "HYR";
+    private final int intValue;
+    private volatile String message;
 
-        static {
-            // Loads the map that maps error codes to error message templates.
-            try (InputStream resourceStream = ErrorCode.class.getClassLoader().getResourceAsStream(RESOURCE_PATH)) {
-                errorMessageMap = ErrorMessageUtil.loadErrorMap(resourceStream);
-            } catch (Exception e) {
-                throw new IllegalStateException(e);
-            }
-        }
-
-        private Holder() {
-        }
+    private ErrorCode(int intValue) {
+        this.intValue = intValue;
     }
 
-    private ErrorCode() {
+    @Override
+    public String component() {
+        return HYRACKS;
     }
 
-    public static String getErrorMessage(int errorCode) {
-        String msg = Holder.errorMessageMap.get(errorCode);
-        if (msg == null) {
-            throw new IllegalStateException("Undefined error code: " + errorCode);
+    @Override
+    public int intValue() {
+        return intValue;
+    }
+
+    @Override
+    public String errorMessage() {
+        return ErrorMessageMapHolder.get(this);
+    }
+
+    private static class ErrorMessageMapHolder {
+        private static final String[] enumMessages =
+                ErrorMessageUtil.defineMessageEnumOrdinalMap(values(), RESOURCE_PATH);
+
+        private static String get(ErrorCode errorCode) {
+            return enumMessages[errorCode.ordinal()];
         }
-        return msg;
     }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
index 54e4eaf..6deff8d 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
@@ -21,8 +21,6 @@
 
 import java.io.Serializable;
 
-import org.apache.hyracks.api.util.ErrorMessageUtil;
-
 /**
  * The main execution time exception type for runtime errors in a hyracks environment
  */
@@ -51,34 +49,25 @@
         return new HyracksDataException(cause);
     }
 
-    public static HyracksDataException create(int code, SourceLocation sourceLoc, Serializable... params) {
-        return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), null, sourceLoc,
-                params);
+    public static HyracksDataException create(ErrorCode code, SourceLocation sourceLoc, Serializable... params) {
+        return new HyracksDataException(code, sourceLoc, params);
     }
 
-    public static HyracksDataException create(int code, Serializable... params) {
-        return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), params);
+    public static HyracksDataException create(ErrorCode code, Serializable... params) {
+        return new HyracksDataException(code, params);
     }
 
-    public static HyracksDataException create(int code, Throwable cause, SourceLocation sourceLoc,
+    public static HyracksDataException create(ErrorCode code, Throwable cause, SourceLocation sourceLoc,
             Serializable... params) {
-        return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, sourceLoc,
-                params);
+        return new HyracksDataException(code, cause, sourceLoc, params);
     }
 
-    public static HyracksDataException create(int code, Throwable cause, Serializable... params) {
-        return new HyracksDataException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, params);
+    public static HyracksDataException create(ErrorCode code, Throwable cause, Serializable... params) {
+        return new HyracksDataException(code, cause, null, params);
     }
 
-    public HyracksDataException(String component, int errorCode, String message, Throwable cause, String nodeId,
-            Serializable... params) {
-        super(component, errorCode, message, cause, nodeId, params);
-    }
-
-    public HyracksDataException(String component, int errorCode, String message, Throwable cause, String nodeId,
-            StackTraceElement[] stackTrace, Serializable... params) {
-        super(component, errorCode, message, cause, nodeId, params);
-        setStackTrace(stackTrace);
+    public static HyracksDataException create(HyracksDataException e, String nodeId) {
+        return new HyracksDataException(e, nodeId);
     }
 
     /**
@@ -101,34 +90,24 @@
         super(message, cause);
     }
 
-    public HyracksDataException(String component, int errorCode, Serializable... params) {
-        super(component, errorCode, null, null, null, params);
+    public HyracksDataException(ErrorCode code, Serializable... params) {
+        this(code, null, params);
     }
 
-    public HyracksDataException(Throwable cause, int errorCode, Serializable... params) {
-        super(ErrorMessageUtil.NONE, errorCode, cause.getMessage(), cause, null, params);
+    public HyracksDataException(ErrorCode code, SourceLocation sourceLoc, Serializable... params) {
+        this(code, null, sourceLoc, params);
     }
 
-    public HyracksDataException(String component, int errorCode, String message, Serializable... params) {
-        super(component, errorCode, message, null, null, params);
+    public HyracksDataException(ErrorCode code, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+        super(code, code.component(), code.intValue(), code.errorMessage(), cause, sourceLoc, null, params);
     }
 
-    public HyracksDataException(String component, int errorCode, Throwable cause, Serializable... params) {
-        super(component, errorCode, cause, params);
+    private HyracksDataException(HyracksDataException hde, String nodeId) {
+        super(hde.getError().orElse(null), hde.getComponent(), hde.getErrorCode(), hde.getMessage(), hde.getCause(),
+                hde.getSourceLocation(), nodeId, hde.getStackTrace(), hde.getParams());
     }
 
-    public HyracksDataException(String component, int errorCode, String message, Throwable cause,
-            Serializable... params) {
-        super(component, errorCode, message, cause, null, params);
-    }
-
-    public HyracksDataException(String component, int errorCode, String message, Throwable cause,
-            SourceLocation sourceLoc, Serializable... params) {
-        super(component, errorCode, message, cause, sourceLoc, null, params);
-    }
-
-    public static HyracksDataException create(HyracksDataException e, String nodeId) {
-        return new HyracksDataException(e.getComponent(), e.getErrorCode(), e.getMessage(), e.getCause(), nodeId,
-                e.getStackTrace(), e.getParams());
+    protected HyracksDataException(IError error, Throwable cause, SourceLocation sourceLoc, Serializable... params) {
+        super(error, error.component(), error.intValue(), error.errorMessage(), cause, sourceLoc, null, params);
     }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
index 46a9b66..160be7b 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
@@ -20,7 +20,7 @@
 
 import java.io.IOException;
 import java.io.Serializable;
-import java.util.Objects;
+import java.util.Optional;
 
 import org.apache.hyracks.api.util.ErrorMessageUtil;
 
@@ -28,10 +28,12 @@
     private static final long serialVersionUID = 1L;
 
     public static final int UNKNOWN = 0;
+    private static final boolean PARAM_SANITY = true;
     private final String component;
     private final int errorCode;
     private final Serializable[] params;
     private final String nodeId;
+    protected transient final IError error;
     private SourceLocation sourceLoc;
     private transient volatile String msgCache;
 
@@ -53,22 +55,12 @@
         return new HyracksException(cause);
     }
 
-    public static HyracksException create(int code, Serializable... params) {
-        return new HyracksException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), params);
+    public static HyracksException create(ErrorCode code, Serializable... params) {
+        return new HyracksException(code, params);
     }
 
-    public static HyracksException create(int code, Throwable cause, Serializable... params) {
-        return new HyracksException(ErrorCode.HYRACKS, code, ErrorCode.getErrorMessage(code), cause, params);
-    }
-
-    public HyracksException(String component, int errorCode, String message, Throwable cause, SourceLocation sourceLoc,
-            String nodeId, Serializable... params) {
-        super(message, cause);
-        this.sourceLoc = sourceLoc;
-        this.component = component;
-        this.errorCode = errorCode;
-        this.nodeId = nodeId;
-        this.params = params;
+    public static HyracksException create(ErrorCode code, Throwable cause, Serializable... params) {
+        return new HyracksException(code, cause, params);
     }
 
     /**
@@ -76,7 +68,24 @@
      */
     @Deprecated
     public HyracksException(String message) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, message, null, null, (Serializable[]) null);
+        this(message, null);
+    }
+
+    protected HyracksException(IError error, String component, int intCode, String message, Throwable cause,
+            SourceLocation sourceLoc, String nodeId, Serializable... params) {
+        super(message, cause);
+        this.error = error;
+        this.sourceLoc = sourceLoc;
+        this.component = component;
+        this.errorCode = intCode;
+        this.nodeId = nodeId;
+        this.params = params;
+    }
+
+    protected HyracksException(IError errorCode, Throwable cause, SourceLocation sourceLoc, String nodeId,
+            Serializable... params) {
+        this(errorCode, errorCode.component(), errorCode.intValue(), errorCode.errorMessage(), cause, sourceLoc, nodeId,
+                params);
     }
 
     /**
@@ -84,7 +93,7 @@
      */
     @Deprecated
     protected HyracksException(Throwable cause) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, ErrorMessageUtil.getCauseMessage(cause), cause, (Serializable[]) null);
+        this(String.valueOf(cause), cause);
     }
 
     /**
@@ -92,32 +101,24 @@
      */
     @Deprecated
     protected HyracksException(String message, Throwable cause) {
-        this(ErrorMessageUtil.NONE, UNKNOWN, message, cause, (String) null);
+        this(ErrorMessageUtil.NONE, UNKNOWN, message, cause);
     }
 
-    public HyracksException(String component, int errorCode, Serializable... params) {
-        this(component, errorCode, null, null, null, params);
+    public HyracksException(ErrorCode errorCode, Throwable cause, Serializable... params) {
+        this(errorCode.component(), errorCode.intValue(), errorCode.errorMessage(), cause, null, params);
     }
 
-    public HyracksException(Throwable cause, int errorCode, Serializable... params) {
-        this(ErrorMessageUtil.NONE, errorCode, ErrorMessageUtil.getCauseMessage(cause), cause, null, params);
+    public HyracksException(ErrorCode errorCode, Serializable... params) {
+        this(errorCode.component(), errorCode.intValue(), errorCode.errorMessage(), null, null, params);
     }
 
-    public HyracksException(String component, int errorCode, String message, Serializable... params) {
-        this(component, errorCode, message, null, null, params);
-    }
-
-    public HyracksException(String component, int errorCode, Throwable cause, Serializable... params) {
-        this(component, errorCode, ErrorMessageUtil.getCauseMessage(cause), cause, null, params);
-    }
-
-    public HyracksException(String component, int errorCode, String message, Throwable cause, Serializable... params) {
+    private HyracksException(String component, int errorCode, String message, Throwable cause, Serializable... params) {
         this(component, errorCode, message, cause, null, params);
     }
 
-    public HyracksException(String component, int errorCode, String message, Throwable cause, String nodeId,
+    private HyracksException(String component, int errorCode, String message, Throwable cause, String nodeId,
             Serializable... params) {
-        this(component, errorCode, message, cause, null, nodeId, params);
+        this(null, component, errorCode, message, cause, null, nodeId, params);
     }
 
     @Override
@@ -148,19 +149,25 @@
 
     @Override
     public String getMessage() {
-        if (msgCache == null) {
-            msgCache = ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params);
+        String message = msgCache;
+        if (message == null) {
+            msgCache = message =
+                    ErrorMessageUtil.formatMessage(component, errorCode, super.getMessage(), sourceLoc, params);
         }
-        return msgCache;
-    }
-
-    public boolean matches(String component, int errorCode) {
-        Objects.requireNonNull(component, "component");
-        return component.equals(this.component) && errorCode == this.errorCode;
+        return message;
     }
 
     @Override
     public String toString() {
         return getLocalizedMessage();
     }
+
+    @Override
+    public Optional<IError> getError() {
+        return Optional.ofNullable(error);
+    }
+
+    public boolean matches(ErrorCode errorCode) {
+        return component.equals(errorCode.component()) && getErrorCode() == errorCode.intValue();
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IError.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IError.java
new file mode 100644
index 0000000..b51bf35
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IError.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.api.exceptions;
+
+/**
+ * A type-safe error, consisting of a string-based component, integer value, and error message
+ * @since 0.3.5.1
+ */
+public interface IError {
+    String component();
+
+    int intValue();
+
+    String errorMessage();
+}
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
index 0f873e1..fd40e3f 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/IFormattedException.java
@@ -18,6 +18,10 @@
  */
 package org.apache.hyracks.api.exceptions;
 
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Stream;
+
 public interface IFormattedException {
 
     /**
@@ -40,4 +44,26 @@
      * @return the exception message
      */
     String getMessage();
+
+    /**
+     * If available, returns the {@link IError} associated with this exception
+     * @return the error instance, othewise {@link Optional#empty()}
+     * @since 0.3.5.1
+     */
+    Optional<IError> getError();
+
+    /**
+     * Indicates whether this exception matches the supplied error code
+     */
+    default boolean matches(IError candidate) {
+        Objects.requireNonNull(candidate, "candidate");
+        return getComponent().equals(candidate.component()) && getErrorCode() == candidate.intValue();
+    }
+
+    /**
+     * Indicates whether this exception matches any of the supplied error codes
+     */
+    default boolean matchesAny(IError candidate, IError... otherCandidates) {
+        return matches(candidate) || Stream.of(otherCandidates).anyMatch(this::matches);
+    }
 }
\ No newline at end of file
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
index 3face66..d82f17d 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/Warning.java
@@ -41,13 +41,25 @@
         this.message = message;
     }
 
+    /**
+     * @deprecated use {@link Warning#of(SourceLocation, IError, Serializable...)}
+     */
+    @Deprecated
     public static Warning of(String component, SourceLocation srcLocation, int code, String message) {
         return new Warning(component, srcLocation, code, message);
     }
 
-    public static Warning forHyracks(SourceLocation srcLocation, int code, Serializable... params) {
-        return Warning.of(ErrorCode.HYRACKS, srcLocation, code, ErrorMessageUtil.formatMessage(ErrorCode.HYRACKS, code,
-                ErrorCode.getErrorMessage(code), srcLocation, params));
+    /**
+     * @deprecated call {@link Warning#of(SourceLocation, IError, Serializable...)} directly
+     */
+    @Deprecated
+    public static Warning forHyracks(SourceLocation srcLocation, ErrorCode code, Serializable... params) {
+        return of(srcLocation, code, params);
+    }
+
+    public static Warning of(SourceLocation srcLocation, IError code, Serializable... params) {
+        return new Warning(code.component(), srcLocation, code.intValue(), ErrorMessageUtil
+                .formatMessage(code.component(), code.intValue(), code.errorMessage(), srcLocation, params));
     }
 
     public String getComponent() {
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
index 8758ef7..a7372ae 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ErrorMessageUtil.java
@@ -22,11 +22,13 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Formatter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 
+import org.apache.hyracks.api.exceptions.IError;
 import org.apache.hyracks.api.exceptions.IFormattedException;
 import org.apache.hyracks.api.exceptions.SourceLocation;
 import org.apache.logging.log4j.Level;
@@ -110,8 +112,10 @@
             return fmt.out().toString();
         } catch (Exception e) {
             // Do not throw further exceptions during exception processing.
-            LOGGER.log(Level.WARN, e.getLocalizedMessage(), e);
-            return e.getMessage();
+            final String paramsString = Arrays.toString(params);
+            LOGGER.log(Level.WARN, "error formatting {}{}: message {} params {}", component, errorCode, message,
+                    paramsString, e);
+            return message + "; " + paramsString;
         }
     }
 
@@ -121,4 +125,19 @@
         }
         return String.valueOf(t);
     }
+
+    public static String[] defineMessageEnumOrdinalMap(IError[] values, String resourcePath) {
+        String[] enumMessages = new String[values.length];
+        try (InputStream resourceStream = values[0].getClass().getClassLoader().getResourceAsStream(resourcePath)) {
+            Map<Integer, String> errorMessageMap = loadErrorMap(resourceStream);
+            for (IError error : values) {
+                enumMessages[((Enum) error).ordinal()] = errorMessageMap.computeIfAbsent(error.intValue(), intValue -> {
+                    throw new IllegalStateException("error message missing for " + error + " (" + intValue + ")");
+                });
+            }
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+        return enumMessages;
+    }
 }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
index 21f393c..9067dce 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
@@ -65,7 +65,7 @@
                     newExceptions.add(e);
                 }
             } else {
-                newExceptions.add(new HyracksDataException(ErrorCode.HYRACKS, ErrorCode.FAILURE_ON_NODE, e, nodeId));
+                newExceptions.add(HyracksDataException.create(ErrorCode.FAILURE_ON_NODE, e, nodeId));
             }
         }
         exceptions.clear();
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
index 7423419..5774f64 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties
@@ -139,7 +139,7 @@
 119 = Unsupported window specification: PARTITION BY %1$s, ORDER BY %2$s
 120 = End of file
 121 = A numeric type promotion error has occurred: %1$s
-122 = Encountered an error while printing the plan
+122 = Encountered an error while printing the plan: %1$s
 123 = Insufficient memory is provided for the join operators, please increase the join memory budget.
 124 = Parsing error at %1$s line %2$s field %3$s: %4$s
 
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/job/resource/ClusterCapacityTest.java b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/job/resource/ClusterCapacityTest.java
index 277e8e2..e8bc546 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/job/resource/ClusterCapacityTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/job/resource/ClusterCapacityTest.java
@@ -47,14 +47,14 @@
         try {
             capacity.getMemoryByteSize(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
         nodeNotExist = false;
         try {
             capacity.getCores(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
 
@@ -70,14 +70,14 @@
         try {
             capacity.getMemoryByteSize(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
         nodeNotExist = false;
         try {
             capacity.getCores(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
index c8c1790..e4a49f0 100644
--- a/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-api/src/test/java/org/apache/hyracks/api/test/HyracksDataExceptionTest.java
@@ -20,7 +20,6 @@
 
 import org.apache.hyracks.api.exceptions.ErrorCode;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
-import org.apache.hyracks.api.util.ErrorMessageUtil;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -32,12 +31,4 @@
         HyracksDataException causeWithNodeId = HyracksDataException.create(cause, "nc1");
         Assert.assertEquals(cause.getMessage(), causeWithNodeId.getMessage());
     }
-
-    @Test
-    public void returnedMessageWithNoComponentTest() {
-        HyracksDataException cause = new HyracksDataException(ErrorMessageUtil.NONE, ErrorCode.ERROR_PROCESSING_TUPLE,
-                ErrorCode.getErrorMessage(ErrorCode.ERROR_PROCESSING_TUPLE), 2);
-        HyracksDataException causeWithNodeId = HyracksDataException.create(cause, "nc1");
-        Assert.assertEquals(cause.getMessage(), causeWithNodeId.getMessage());
-    }
 }
\ No newline at end of file
diff --git a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/result/ResultSetReader.java b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/result/ResultSetReader.java
index 3c5a3d1..b29e2ea2 100644
--- a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/result/ResultSetReader.java
+++ b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/result/ResultSetReader.java
@@ -77,7 +77,7 @@
         try {
             return resultDirectory.getResultStatus(jobId, resultSetId);
         } catch (HyracksDataException e) {
-            if (e.getErrorCode() != ErrorCode.NO_RESULT_SET) {
+            if (!e.matches(ErrorCode.NO_RESULT_SET)) {
                 LOGGER.log(Level.WARN, "Exception retrieving result set for job " + jobId, e);
             }
         } catch (Exception e) {
@@ -135,7 +135,7 @@
         try {
             return resultDirectory.getResultMetadata(jobId, resultSetId);
         } catch (HyracksDataException e) {
-            if (e.getErrorCode() != ErrorCode.NO_RESULT_SET) {
+            if (!e.matches(ErrorCode.NO_RESULT_SET)) {
                 LOGGER.log(Level.WARN, "Exception retrieving result set for job " + jobId, e);
             }
         } catch (Exception e) {
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/cluster/NodeManagerTest.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/cluster/NodeManagerTest.java
index d92727c..65459c6 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/cluster/NodeManagerTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/cluster/NodeManagerTest.java
@@ -122,7 +122,7 @@
         try {
             nodeManager.addNode(NODE1, ncState1);
         } catch (HyracksException e) {
-            invalidNetworkAddress = e.getErrorCode() == ErrorCode.INVALID_NETWORK_ADDRESS;
+            invalidNetworkAddress = e.matches(ErrorCode.INVALID_NETWORK_ADDRESS);
         }
         Assert.assertTrue(invalidNetworkAddress);
 
@@ -150,7 +150,7 @@
         try {
             nodeManager.addNode(null, null);
         } catch (HyracksException e) {
-            invalidParameter = e.getErrorCode() == ErrorCode.INVALID_INPUT_PARAMETER;
+            invalidParameter = e.matches(ErrorCode.INVALID_INPUT_PARAMETER);
         }
         Assert.assertTrue(invalidParameter);
 
@@ -205,14 +205,14 @@
         try {
             capacity.getMemoryByteSize(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
         nodeNotExist = false;
         try {
             capacity.getCores(nodeId);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
     }
@@ -230,7 +230,7 @@
         try {
             nodeManager.addNode(NODE2, ncState2);
         } catch (HyracksException e) {
-            nodeNotExist = e.getErrorCode() == ErrorCode.NO_SUCH_NODE;
+            nodeNotExist = e.matches(ErrorCode.NO_SUCH_NODE);
         }
         Assert.assertTrue(nodeNotExist);
         Assert.assertTrue(nodeManager.getIpAddressNodeNameMap().size() == 1);
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/job/JobManagerTest.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/job/JobManagerTest.java
index 251aed8..19340d0 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/job/JobManagerTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/test/java/org/apache/hyracks/control/cc/job/JobManagerTest.java
@@ -114,7 +114,7 @@
             jobManager.add(run);
         } catch (HyracksException e) {
             // Verifies the error code.
-            jobQueueFull = e.getErrorCode() == ErrorCode.JOB_QUEUE_FULL;
+            jobQueueFull = e.matches(ErrorCode.JOB_QUEUE_FULL);
         }
         Assert.assertTrue(jobQueueFull);
 
@@ -154,7 +154,7 @@
             jobManager.add(run);
         } catch (HyracksException e) {
             // Verifies the error code.
-            rejected = e.getErrorCode() == ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY;
+            rejected = e.matches(ErrorCode.JOB_REQUIREMENTS_EXCEED_CAPACITY);
         }
         Assert.assertTrue(rejected);
         Assert.assertTrue(jobManager.getRunningJobs().isEmpty());
@@ -200,7 +200,7 @@
         try {
             jobManager.add(null);
         } catch (HyracksException e) {
-            invalidParameter = e.getErrorCode() == ErrorCode.INVALID_INPUT_PARAMETER;
+            invalidParameter = e.matches(ErrorCode.INVALID_INPUT_PARAMETER);
         }
         Assert.assertTrue(invalidParameter);
         Assert.assertTrue(jobManager.getRunningJobs().isEmpty());
diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/heartbeat/HeartbeatManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/heartbeat/HeartbeatManager.java
index 08b8c11..20c1576 100644
--- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/heartbeat/HeartbeatManager.java
+++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/heartbeat/HeartbeatManager.java
@@ -64,12 +64,12 @@
 
     public void notifyAck(HyracksDataException exception) {
         LOGGER.debug("ack rec'd from {} w/ exception: {}", ccId::toString, () -> String.valueOf(exception));
-        if (exception != null && exception.matches(ErrorCode.HYRACKS, ErrorCode.NO_SUCH_NODE)) {
+        if (exception != null && exception.matches(ErrorCode.NO_SUCH_NODE)) {
             LOGGER.info("{} indicates it does not recognize us; force a reconnect", ccId);
             try {
                 ccc.forceReregister(ncs);
             } catch (Exception e) {
-                LOGGER.warn("ignoring exception attempting to reregister with {}", ccId, e);
+                LOGGER.warn("ignoring exception attempting to re-register with {}", ccId, e);
             }
         }
     }
diff --git a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CancelJobTest.java b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CancelJobTest.java
index c4f2ac6..dc5d017 100644
--- a/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CancelJobTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-examples/hyracks-integration-tests/src/test/java/org/apache/hyracks/tests/integration/CancelJobTest.java
@@ -155,7 +155,7 @@
             exceptionMatched = true;
             Assert.assertTrue(e instanceof HyracksException);
             HyracksException hyracksException = (HyracksException) e;
-            Assert.assertTrue(hyracksException.getErrorCode() == ErrorCode.JOB_CANCELED);
+            Assert.assertTrue(hyracksException.matches(ErrorCode.JOB_CANCELED));
         } finally {
             Assert.assertTrue(exceptionMatched);
         }
@@ -170,7 +170,7 @@
             waitForCompletion(jobId);
         } catch (HyracksException e) {
             exceptionMatched = true;
-            Assert.assertTrue(e.getErrorCode() == ErrorCode.JOB_CANCELED);
+            Assert.assertTrue(e.matches(ErrorCode.JOB_CANCELED));
         } finally {
             Assert.assertTrue(exceptionMatched);
         }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
index 8490c6a..e48db2b 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexDropOperatorNodePushable.java
@@ -96,11 +96,11 @@
     }
 
     private boolean isIgnorable(HyracksDataException e) {
-        return e.getErrorCode() == INDEX_DOES_NOT_EXIST && options.contains(IF_EXISTS);
+        return e.matches(INDEX_DOES_NOT_EXIST) && options.contains(IF_EXISTS);
     }
 
     private boolean canRetry(HyracksDataException e) throws HyracksDataException {
-        if (e.getErrorCode() == CANNOT_DROP_IN_USE_INDEX && options.contains(WAIT_ON_IN_USE)) {
+        if (e.matches(CANNOT_DROP_IN_USE_INDEX) && options.contains(WAIT_ON_IN_USE)) {
             if (maxWaitTimeMillis <= 0) {
                 return false;
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
index cf57d0e..9ff9249 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexInsertUpdateDeleteOperatorNodePushable.java
@@ -114,7 +114,7 @@
                             indexAccessor.insert(tuple);
                         } catch (HyracksDataException e) {
                             // ignore that exception to allow inserting existing keys which becomes an NoOp
-                            if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                            if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                                 throw e;
                             }
                         }
@@ -132,8 +132,8 @@
                         try {
                             indexAccessor.delete(tuple);
                         } catch (HyracksDataException e) {
-                            // ingnore that exception to allow deletions of non-existing keys
-                            if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                            // ignore that exception to allow deletions of non-existing keys
+                            if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                                 throw e;
                             }
                         }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/IndexWithBuddyBulkLoader.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/IndexWithBuddyBulkLoader.java
index 17dfb1d..494dd52 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/IndexWithBuddyBulkLoader.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/IndexWithBuddyBulkLoader.java
@@ -40,7 +40,7 @@
             buddyBTreeBulkLoader.add(tuple);
         } catch (HyracksDataException e) {
             //deleting a key multiple times is OK
-            if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+            if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                 cleanupArtifacts();
                 throw e;
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
index 068df9a..f8ad664 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/impls/LSMInvertedIndex.java
@@ -175,7 +175,7 @@
                 try {
                     ctx.getCurrentDeletedKeysBTreeAccessors().insert(ctx.getKeysOnlyTuple());
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         // Key has already been deleted.
                         LOGGER.log(Level.WARN, "Failure during index delete operation", e);
                         throw e;
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedIndex.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedIndex.java
index a7ce35c..9c166b0 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedIndex.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/inmemory/InMemoryInvertedIndex.java
@@ -119,7 +119,7 @@
             try {
                 btreeAccessor.insert(insertTuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     // This exception may be caused by duplicate tokens in the same insert "document".
                     // We ignore such duplicate tokens in all inverted-index implementations, hence
                     // we can safely ignore this exception.
@@ -139,7 +139,7 @@
             try {
                 btreeAccessor.delete(deleteTuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                     // Ignore this exception, since a document may have duplicate tokens.
                     throw e;
                 }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
index b04570e..1b847a0 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/AbstractLSMRTree.java
@@ -220,7 +220,7 @@
             try {
                 ctx.getCurrentMutableBTreeAccessor().insert(indexTuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     // Do nothing, because one delete tuple is enough to indicate
                     // that all the corresponding insert tuples are deleted
                     throw e;
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
index 92449e4..7afecd8e 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-rtree/src/main/java/org/apache/hyracks/storage/am/lsm/rtree/impls/LSMRTree.java
@@ -417,7 +417,7 @@
             } catch (HyracksDataException e) {
                 // Do nothing, because one delete tuple is enough to indicate
                 // that all the corresponding insert tuples are deleted
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index 5afddef..f1fe86f 100644
--- a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++ b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -527,8 +527,8 @@
                 read(cPage);
                 return;
             } catch (HyracksDataException readException) {
-                if (readException.getErrorCode() == ErrorCode.CANNOT_READ_CLOSED_FILE && i <= MAX_PAGE_READ_ATTEMPTS) {
-                    /**
+                if (readException.matches(ErrorCode.CANNOT_READ_CLOSED_FILE) && i != MAX_PAGE_READ_ATTEMPTS) {
+                    /*
                      * if the read failure was due to another thread closing the file channel because
                      * it was interrupted, we will try to read again since the interrupted thread
                      * will re-open the file.
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml b/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
index 7d2d2ae..ee9e009 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/pom.xml
@@ -116,5 +116,9 @@
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+    </dependency>
   </dependencies>
 </project>
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
index c37d781..3560230 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexExamplesTest.java
@@ -118,7 +118,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -285,7 +285,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -373,7 +373,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -470,7 +470,7 @@
                     indexAccessor.insert(tuple);
                     insDone++;
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         throw e;
                     }
                 }
@@ -492,7 +492,7 @@
                     indexAccessor.delete(tuple);
                     delDone++;
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                    if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                         throw e;
                     }
                 }
@@ -574,7 +574,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -742,8 +742,8 @@
                 try {
                     bulkLoader.add(tuple);
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() == ErrorCode.UNSORTED_LOAD_INPUT || e.getErrorCode() == ErrorCode.DUPLICATE_KEY
-                            || e.getErrorCode() == ErrorCode.DUPLICATE_LOAD_INPUT) {
+                    if (e.matchesAny(ErrorCode.UNSORTED_LOAD_INPUT, ErrorCode.DUPLICATE_KEY,
+                            ErrorCode.DUPLICATE_LOAD_INPUT)) {
                         if (j != i) {
                             fail("Unexpected exception: " + e.getMessage());
                         }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexTestUtils.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexTestUtils.java
index d3dac3e..c974987 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexTestUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/btree/OrderedIndexTestUtils.java
@@ -309,7 +309,7 @@
                 }
             } catch (HyracksDataException e) {
                 // Ignore duplicate key insertions.
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TreeIndexTestUtils.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TreeIndexTestUtils.java
index 0c7b5f9..a298fe5 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TreeIndexTestUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/common/TreeIndexTestUtils.java
@@ -237,7 +237,7 @@
             } catch (HyracksDataException e) {
                 // We set expected values only after insertion succeeds because
                 // we ignore duplicate keys.
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -291,7 +291,7 @@
             } catch (HyracksDataException e) {
                 // We set expected values only after insertion succeeds because
                 // we ignore duplicate keys.
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
index 48ae036..1fb5905 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/AbstractRTreeExamplesTest.java
@@ -169,7 +169,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -574,7 +574,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
@@ -698,7 +698,7 @@
                 try {
                     indexAccessor.insert(tuple);
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         throw e;
                     }
                 }
@@ -715,7 +715,7 @@
                     indexAccessor.delete(tuple);
                     delDone++;
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                    if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                         throw e;
                     }
                 }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/RTreeTestUtils.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/RTreeTestUtils.java
index 92f5055..55dcb5b 100644
--- a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/RTreeTestUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/storage/am/rtree/RTreeTestUtils.java
@@ -124,7 +124,7 @@
             } catch (HyracksDataException e) {
                 // We set expected values only after insertion succeeds because
                 // we ignore duplicate keys.
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/FormattedExceptionTestBase.java b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/FormattedExceptionTestBase.java
new file mode 100644
index 0000000..c912097
--- /dev/null
+++ b/hyracks-fullstack/hyracks/hyracks-test-support/src/main/java/org/apache/hyracks/test/support/FormattedExceptionTestBase.java
@@ -0,0 +1,299 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.test.support;
+
+import java.io.File;
+import java.io.Serializable;
+import java.lang.reflect.Array;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Executable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.RandomUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.exceptions.IError;
+import org.apache.hyracks.api.exceptions.IFormattedException;
+import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.mockito.Mockito;
+
+@RunWith(Parameterized.class)
+public class FormattedExceptionTestBase {
+    private static final Logger LOGGER = LogManager.getLogger();
+    private static final Serializable[] FAKE_ARGS = new Serializable[] { "one", 2, 3.0f, 4.0d, (byte) 0x05 };
+    private static final Serializable[] EMPTY_ARGS = new Serializable[0];
+    private static final Class SERIALIZABLE_ARR_CLASS = EMPTY_ARGS.getClass();
+    private static final org.apache.hyracks.api.exceptions.ErrorCode HYR_ERROR_CODE =
+            random(org.apache.hyracks.api.exceptions.ErrorCode.values());
+    private static final StackTraceElement[] STACK_TRACE = new Throwable().getStackTrace();
+    private static final SourceLocation SOURCE_LOCATION = new SourceLocation(99, 9);
+    private static final ClassLoader CLASSLOADER = FormattedExceptionTestBase.class.getClassLoader();
+    private static final Field THROWABLE_DETAIL_MESSAGE = getDeclaredAccessibleField(Throwable.class, "detailMessage");
+    private static final Field THROWABLE_CAUSE = getDeclaredAccessibleField(Throwable.class, "cause");
+    private static final UnsupportedOperationException FAKE_THROWABLE = new UnsupportedOperationException();
+    private static final int PUBLIC_STATIC = (Modifier.PUBLIC | Modifier.STATIC);
+    private static Collection<Class<? extends IFormattedException>> exceptionClasses;
+    protected static Set<Class<? extends IFormattedException>> roots;
+    private static Set<Executable> publicContractOverrides = new HashSet<>();
+    protected final Executable action;
+    protected final Class<? extends IFormattedException> root;
+    private static final Map<Pair<Class<? extends IFormattedException>, Object>, Field> rootFields = new HashMap<>();
+    private static final Set<Class> visited = new HashSet<>();
+    protected static Predicate<String> classSelector = className -> true;
+
+    protected static Iterable<Object[]> defineParameters() throws ClassNotFoundException {
+        initClasses();
+        List<Object[]> tests = new ArrayList<>();
+        for (Class<? extends IFormattedException> clazz : exceptionClasses) {
+            Class<? extends IFormattedException> root = roots.stream().filter(c -> c.isAssignableFrom(clazz)).findAny()
+                    .orElseThrow(IllegalStateException::new);
+            final Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
+            for (Constructor<?> ctor : declaredConstructors) {
+                tests.add(new Object[] { clazz.getSimpleName() + ".<init>"
+                        + Stream.of(ctor.getParameterTypes()).map(Class::getSimpleName).collect(Collectors.toList()),
+                        ctor, root });
+            }
+            int methods = 0;
+            for (Method m : clazz.getDeclaredMethods()) {
+                if ((m.getModifiers() & PUBLIC_STATIC) == PUBLIC_STATIC) {
+                    methods++;
+                    tests.add(new Object[] { clazz.getSimpleName() + "." + m.getName()
+                            + Stream.of(m.getParameterTypes()).map(Class::getSimpleName).collect(Collectors.toList()),
+                            m, root });
+                }
+            }
+            LOGGER.info("discovered {} ctors, {} methods for class {}", declaredConstructors.length, methods, clazz);
+        }
+        return tests;
+    }
+
+    protected static void addPublicContractOverride(Executable override) {
+        publicContractOverrides.add(override);
+    }
+
+    public FormattedExceptionTestBase(String desc, Executable action, Class<? extends IFormattedException> root) {
+        this.action = action;
+        this.root = root;
+    }
+
+    @Test
+    public void test() throws Exception {
+        if (Modifier.isPublic(action.getModifiers())) {
+            try {
+                checkPublicContract();
+            } catch (AssertionError e) {
+                if (publicContractOverrides.contains(action)) {
+                    LOGGER.info("ignoring public contract vioilation for override executable: " + action);
+                } else {
+                    throw e;
+                }
+            }
+        }
+        if (action.getName().equals("create") || action instanceof Constructor) {
+            checkParameterPropagation(action);
+        }
+    }
+
+    protected void checkPublicContract() {
+        for (Class type : action.getParameterTypes()) {
+            Assert.assertNotEquals("generic IError forbidden on public ctor or static method", type, IError.class);
+        }
+    }
+
+    private void checkParameterPropagation(Executable factory) throws Exception {
+        Object[] args = Stream.of(factory.getParameterTypes()).map(this::defaultValue).toArray(Object[]::new);
+        factory.setAccessible(true);
+        Field paramsField = rootParamsField();
+        Object instance = factory instanceof Constructor ? ((Constructor) factory).newInstance(args)
+                : ((Method) factory).invoke(null, args);
+        Serializable[] params = (Serializable[]) paramsField.get(instance);
+        IError error = null;
+        for (Class type : factory.getParameterTypes()) {
+            if (type.equals(paramsField.getType())) {
+                Assert.assertArrayEquals(FAKE_ARGS, params);
+            } else if (SourceLocation.class.isAssignableFrom(type)) {
+                final Object value = rootSrcLocField().get(instance);
+                Assert.assertEquals("source location is wrong, was: " + value, SOURCE_LOCATION, value);
+            } else if (IError.class.isAssignableFrom(type)) {
+                error = (IError) rootErrorField().get(instance);
+                Assert.assertNotNull("error object", error);
+            } else if (type.equals(Throwable.class)) {
+                Assert.assertEquals(FAKE_THROWABLE, THROWABLE_CAUSE.get(instance));
+            }
+        }
+        if (error != null) {
+            Assert.assertEquals(error.component(), getRootField("component").get(instance));
+            Assert.assertEquals(error.intValue(), getRootField("errorCode").get(instance));
+            Assert.assertEquals(error.errorMessage(), THROWABLE_DETAIL_MESSAGE.get(instance));
+        }
+    }
+
+    protected Field rootParamsField() {
+        return getRootField(SERIALIZABLE_ARR_CLASS);
+    }
+
+    protected Field rootErrorField() {
+        return getRootField(IError.class);
+    }
+
+    protected Field rootSrcLocField() {
+        return getRootField(SourceLocation.class);
+    }
+
+    protected Field getRootField(Class<?> type) {
+        return rootFields.computeIfAbsent(Pair.of(root, type),
+                key -> Stream.of(root.getDeclaredFields()).filter(f -> f.getType().equals(type))
+                        .peek(f -> f.setAccessible(true)).findAny().orElseThrow(IllegalStateException::new));
+    }
+
+    protected Field getRootField(String name) {
+        return rootFields.computeIfAbsent(Pair.of(root, name), key -> getDeclaredAccessibleField(root, name));
+    }
+
+    protected static Field getDeclaredAccessibleField(Class clazz, String name) {
+        try {
+            Field field = clazz.getDeclaredField(name);
+            field.setAccessible(true);
+            return field;
+        } catch (NoSuchFieldException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    protected Object defaultValue(Class type) {
+        switch (type.getName()) {
+            case "int":
+                return 0;
+            case "float":
+                return 0.0f;
+            case "double":
+                return 0.0d;
+            case "long":
+                return 0L;
+            case "boolean":
+                return false;
+            case "short":
+                return (short) 0;
+            case "byte":
+                return (byte) 0;
+            case "[Ljava.io.Serializable;":
+                return FAKE_ARGS;
+            case "java.lang.Throwable":
+                return FAKE_THROWABLE;
+            case "org.apache.hyracks.api.exceptions.IError":
+            case "org.apache.hyracks.api.exceptions.ErrorCode":
+                return HYR_ERROR_CODE;
+            case "[Ljava.lang.StackTraceElement;":
+                return STACK_TRACE;
+            case "org.apache.hyracks.api.exceptions.SourceLocation":
+                return SOURCE_LOCATION;
+            case "org.apache.hyracks.api.exceptions.HyracksDataException":
+                HyracksDataException hde = Mockito.mock(HyracksDataException.class);
+                Mockito.when(hde.getError()).thenReturn(Optional.empty());
+                return hde;
+            default:
+                if (type.isArray()) {
+                    return Array.newInstance(type.getComponentType(), 0);
+                } else if (type.isEnum()) {
+                    return random(type.getEnumConstants());
+                } else if (type.isAnonymousClass() || Modifier.isFinal(type.getModifiers())) {
+                    if (visited.add(type)) {
+                        LOGGER.info("defaulting to null for un-mockable class {}", type.getName());
+                    }
+                    return null;
+                }
+                if (visited.add(type)) {
+                    LOGGER.info("defaulting to mock for unmapped class {}", type.getName());
+                }
+                return Mockito.mock(type);
+        }
+    }
+
+    protected static <T> T random(T[] values) {
+        return values[RandomUtils.nextInt(0, values.length)];
+    }
+
+    @SuppressWarnings("unchecked")
+    private static void initClasses() throws ClassNotFoundException {
+        LOGGER.info("discovering instances of IFormattedException");
+        //noinspection unchecked
+        final Class<IFormattedException> clazz =
+                (Class) Class.forName(IFormattedException.class.getName(), false, CLASSLOADER);
+        exceptionClasses =
+                getInstanceClasses(clazz).sorted(Comparator.comparing(Class::getName)).collect(Collectors.toList());
+        exceptionClasses.remove(clazz);
+        LOGGER.info("found {} instances of IFormattedException: {}", exceptionClasses.size(), exceptionClasses);
+
+        roots = exceptionClasses.stream().map(ex -> {
+            while (IFormattedException.class.isAssignableFrom(ex.getSuperclass())) {
+                ex = (Class<? extends IFormattedException>) ex.getSuperclass();
+            }
+            return ex;
+        }).collect(Collectors.toSet());
+        LOGGER.info("found {} roots: {}", roots.size(), roots);
+        exceptionClasses.removeAll(roots);
+    }
+
+    @SuppressWarnings("unchecked")
+    private static <T> Stream<Class<? extends T>> getInstanceClasses(Class<T> clazz) {
+        return (Stream) getProductClasses().filter(name -> name.matches(".*(Exception|Error|Warning).*")).map(name -> {
+            try {
+                return Class.forName(name, false, CLASSLOADER);
+            } catch (Throwable e) {
+                LOGGER.warn("unable to open {} due to: {}", name, String.valueOf(e));
+                return null;
+            }
+        }).filter(Objects::nonNull).filter(clazz::isAssignableFrom);
+    }
+
+    private static Stream<String> getProductClasses() {
+        String[] cp = System.getProperty("java.class.path").split(File.pathSeparator);
+        return Stream.of(cp).map(File::new).filter(File::isDirectory)
+                .flatMap(FormattedExceptionTestBase::extractClassFiles).map(name -> name.replace("/", "."))
+                .filter(classSelector).map(name -> name.replaceAll("\\.class$", "")).sorted();
+    }
+
+    private static Stream<? extends String> extractClassFiles(File dir) {
+        final int beginIndex = dir.toString().length() + 1;
+        return FileUtils.listFiles(dir, new String[] { "class" }, true).stream()
+                .map(file -> file.getAbsolutePath().substring(beginIndex));
+    }
+}
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
index dfaa7f9..7a24727 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeStatsTest.java
@@ -136,7 +136,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     e.printStackTrace();
                     throw e;
                 }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
index 8e5c77d..5b86b4f 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/BTreeUpdateSearchTest.java
@@ -117,7 +117,7 @@
                 try {
                     indexAccessor.insert(insertTuple);
                 } catch (HyracksDataException hde) {
-                    if (hde.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!hde.matches(ErrorCode.DUPLICATE_KEY)) {
                         hde.printStackTrace();
                         throw hde;
                     }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeTestWorker.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeTestWorker.java
index a67450b..5d74fc9 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeTestWorker.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-btree-test/src/test/java/org/apache/hyracks/storage/am/btree/multithread/BTreeTestWorker.java
@@ -62,7 +62,7 @@
                     try {
                         accessor.insert(tuple);
                     } catch (HyracksDataException e) {
-                        if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                        if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                             // Ignore duplicate keys, since we get random tuples.
                             throw e;
                         }
@@ -79,7 +79,7 @@
                     try {
                         accessor.delete(deleteTuple);
                     } catch (HyracksDataException e) {
-                        if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                        if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                             // Ignore non-existant keys, since we get random tuples.
                             throw e;
                         }
@@ -91,8 +91,8 @@
                         accessor.update(tuple);
                     } catch (HyracksDataException e) {
                         // Ignore non-existant keys, since we get random tuples.
-                        if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY
-                                && e.getErrorCode() != ErrorCode.INDEX_NOT_UPDATABLE) {
+                        if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)
+                                && !e.matches(ErrorCode.INDEX_NOT_UPDATABLE)) {
                             // Ignore non-existant keys, since we get random tuples.
                             // Ignore not updateable exception due to numKeys == numFields.
                             throw e;
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java
index b47f5dd..c9c87bd 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeScanDiskComponentsTest.java
@@ -205,7 +205,7 @@
         try {
             ctx.getIndexAccessor().upsert(tuple);
         } catch (HyracksDataException e) {
-            if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+            if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw e;
             }
         }
@@ -222,7 +222,7 @@
         try {
             ctx.getIndexAccessor().delete(deleteTuple);
         } catch (HyracksDataException e) {
-            if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+            if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                 throw e;
             }
         }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java
index bbe0966..8d82405 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/LSMBTreeUpdateInPlaceScanDiskComponentsTest.java
@@ -140,7 +140,7 @@
                 } catch (HyracksDataException e) {
                     // We set expected values only after insertion succeeds because
                     // we ignore duplicate keys.
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         throw e;
                     }
                 }
@@ -162,7 +162,7 @@
                 } catch (HyracksDataException e) {
                     // We set expected values only after insertion succeeds because
                     // we ignore duplicate keys.
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         throw e;
                     }
                 }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
index 3c4ae51..5e5410c 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/cursor/LSMBTreePointSearchCursorTest.java
@@ -145,7 +145,7 @@
                 try {
                     indexAccessor.insert(tuple);
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         e.printStackTrace();
                         throw e;
                     }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
index 583fd5a..60a3fa7 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/multithread/LSMBTreeTestWorker.java
@@ -63,7 +63,7 @@
                 try {
                     accessor.insert(tuple);
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                    if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                         // Ignore duplicate keys, since we get random tuples.
                         throw e;
                     }
@@ -81,7 +81,7 @@
                     accessor.delete(deleteTuple);
                 } catch (HyracksDataException e) {
                     // Ignore non-existant keys, since we get random tuples.
-                    if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY) {
+                    if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)) {
                         throw e;
                     }
                 }
@@ -91,8 +91,8 @@
                 try {
                     accessor.update(tuple);
                 } catch (HyracksDataException e) {
-                    if (e.getErrorCode() != ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY
-                            && e.getErrorCode() != ErrorCode.INDEX_NOT_UPDATABLE) {
+                    if (!e.matches(ErrorCode.UPDATE_OR_DELETE_NON_EXISTENT_KEY)
+                            && !e.matches(ErrorCode.INDEX_NOT_UPDATABLE)) {
                         // Ignore non-existant keys, since we get random tuples.
                         // Ignore not updateable exception due to numKeys == numFields.
                         throw e;
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
index 2fcd96f..355b45c 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/multithread/LSMInvertedIndexTestWorker.java
@@ -123,7 +123,7 @@
                     consumeCursorTuples(searchCursor);
                 } catch (HyracksDataException e) {
                     // Ignore.
-                    if (e.getErrorCode() != ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION) {
+                    if (!e.matches(ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION)) {
                         throw e;
                     }
                 }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/LSMInvertedIndexTestUtils.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/LSMInvertedIndexTestUtils.java
index 8dc9b07..d9177b1 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/LSMInvertedIndexTestUtils.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-invertedindex-test/src/test/java/org/apache/hyracks/storage/am/lsm/invertedindex/util/LSMInvertedIndexTestUtils.java
@@ -591,7 +591,7 @@
                     accessor.search(resultCursor, searchPred);
                 } catch (HyracksDataException e) {
                     // ignore panic queries.
-                    if (e.getErrorCode() == ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION) {
+                    if (e.matches(ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION)) {
                         panic = true;
                     } else {
                         throw e;
@@ -610,7 +610,7 @@
                                 actualResults.add(Integer.valueOf(actual));
                             }
                         } catch (HyracksDataException e) {
-                            if (e.getErrorCode() == ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION) {
+                            if (e.matches(ErrorCode.OCCURRENCE_THRESHOLD_PANIC_EXCEPTION)) {
                                 // Ignore panic queries.
                                 continue;
                             } else {
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
index 39fb98f..9698578 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-rtree-test/src/test/java/org/apache/hyracks/storage/am/lsm/rtree/AbstractLSMRTreeExamplesTest.java
@@ -134,7 +134,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
diff --git a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
index faf0693..bef7ac7 100644
--- a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
+++ b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-rtree-test/src/test/java/org/apache/hyracks/storage/am/rtree/RTreeSearchCursorTest.java
@@ -168,7 +168,7 @@
             try {
                 indexAccessor.insert(tuple);
             } catch (HyracksDataException e) {
-                if (e.getErrorCode() != ErrorCode.DUPLICATE_KEY) {
+                if (!e.matches(ErrorCode.DUPLICATE_KEY)) {
                     throw e;
                 }
             }
