This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 080a53e6b6f6f6ddcbf649d1b84453de2fad12f1 Author: Michael Blow <[email protected]> AuthorDate: Fri May 21 08:34:55 2021 -0400 [NO ISSUE][MISC] Fix unwrap(), consolidate exception utils - ExceptionUtils.unwrap() is supposed to return only instances of IFormattedException, but due to a bug was returning the first non-IFormattedException nested exception Change-Id: Ib26371609d9e1fcd1ff434b8ece04b6d96e4e2f4 Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/11563 Integration-Tests: Jenkins <[email protected]> Tested-by: Jenkins <[email protected]> Reviewed-by: Michael Blow <[email protected]> Reviewed-by: Till Westmann <[email protected]> --- .../api/http/server/NCQueryServiceServlet.java | 2 +- .../asterix/app/translator/QueryTranslator.java | 3 +- .../org/apache/asterix/utils/RebalanceUtil.java | 3 +- .../test/common/CancellationTestExecutor.java | 2 +- .../common/RebalanceCancellationTestExecutor.java | 2 +- .../SqlppExecutionWithCancellationTest.java | 2 +- .../apache/asterix/test/txn/LogManagerTest.java | 3 +- .../asterix/common/exceptions/ExceptionUtils.java | 86 ---------------------- .../external/input/stream/LocalFSInputStream.java | 3 +- .../apache/hyracks/api/util/ExceptionUtils.java | 39 ++++++++++ 10 files changed, 47 insertions(+), 98 deletions(-) diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java index 0b0f262..d6ebdad 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java @@ -36,7 +36,6 @@ import org.apache.asterix.common.api.IApplicationContext; import org.apache.asterix.common.api.IRequestReference; import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.common.exceptions.ErrorCode; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.exceptions.RuntimeDataException; import org.apache.asterix.common.messaging.api.INCMessageBroker; import org.apache.asterix.common.messaging.api.MessageFuture; @@ -46,6 +45,7 @@ import org.apache.asterix.translator.ResultProperties; import org.apache.asterix.translator.SessionOutput; import org.apache.hyracks.api.application.INCServiceContext; import org.apache.hyracks.api.exceptions.Warning; +import org.apache.hyracks.api.util.ExceptionUtils; import org.apache.hyracks.http.api.IChannelClosedHandler; import org.apache.hyracks.http.api.IServletRequest; import org.apache.hyracks.http.server.HttpServer; diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java index 754e2b6..7396dcb 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java @@ -76,7 +76,6 @@ import org.apache.asterix.common.exceptions.ACIDException; import org.apache.asterix.common.exceptions.AsterixException; import org.apache.asterix.common.exceptions.CompilationException; import org.apache.asterix.common.exceptions.ErrorCode; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.exceptions.MetadataException; import org.apache.asterix.common.exceptions.RuntimeDataException; import org.apache.asterix.common.exceptions.WarningCollector; @@ -3576,7 +3575,7 @@ public class QueryTranslator extends AbstractLangTranslator implements IStatemen printer.print(jobId); } } catch (Exception e) { - if (ExceptionUtils.getRootCause(e) instanceof InterruptedException) { + if (org.apache.hyracks.api.util.ExceptionUtils.getRootCause(e) instanceof InterruptedException) { Thread.currentThread().interrupt(); throw new RuntimeDataException(ErrorCode.REQUEST_CANCELLED, clientRequest.getId()); } diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java index 429cda9..ccb73b6 100644 --- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java +++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/RebalanceUtil.java @@ -34,7 +34,6 @@ import org.apache.asterix.active.IActiveEntityEventsListener; import org.apache.asterix.app.active.ActiveNotificationHandler; import org.apache.asterix.common.api.IMetadataLockManager; import org.apache.asterix.common.dataflow.ICcApplicationContext; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.metadata.DataverseName; import org.apache.asterix.common.transactions.TxnId; import org.apache.asterix.common.utils.JobUtils; @@ -182,7 +181,7 @@ public class RebalanceUtil { work.run(); done = true; } catch (Exception e) { - Throwable rootCause = ExceptionUtils.getRootCause(e); + Throwable rootCause = org.apache.hyracks.api.util.ExceptionUtils.getRootCause(e); if (rootCause instanceof java.lang.InterruptedException) { interruptedException = (InterruptedException) rootCause; // clear the interrupted state from the thread diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java index d4f92fb..db7ca7d 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/CancellationTestExecutor.java @@ -33,7 +33,6 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.function.Predicate; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.utils.Servlets; import org.apache.asterix.test.runtime.SqlppExecutionWithCancellationTest; import org.apache.asterix.testframework.context.TestCaseContext; @@ -43,6 +42,7 @@ import org.apache.commons.lang3.mutable.MutableInt; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; +import org.apache.hyracks.api.util.ExceptionUtils; import org.junit.Assert; public class CancellationTestExecutor extends TestExecutor { diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/RebalanceCancellationTestExecutor.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/RebalanceCancellationTestExecutor.java index 3318459..d35bfb7 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/RebalanceCancellationTestExecutor.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/common/RebalanceCancellationTestExecutor.java @@ -29,7 +29,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.utils.Servlets; import org.apache.asterix.testframework.context.TestCaseContext; import org.apache.asterix.testframework.xml.ComparisonEnum; @@ -38,6 +37,7 @@ import org.apache.commons.lang3.mutable.MutableInt; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.client.methods.RequestBuilder; +import org.apache.hyracks.api.util.ExceptionUtils; import org.apache.logging.log4j.Level; import org.junit.Assert; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionWithCancellationTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionWithCancellationTest.java index c5ca66a..eae9d09 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionWithCancellationTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/runtime/SqlppExecutionWithCancellationTest.java @@ -20,9 +20,9 @@ package org.apache.asterix.test.runtime; import java.util.Collection; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.test.common.CancellationTestExecutor; import org.apache.asterix.testframework.context.TestCaseContext; +import org.apache.hyracks.api.util.ExceptionUtils; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/txn/LogManagerTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/txn/LogManagerTest.java index 685d983..fb08fe3 100644 --- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/txn/LogManagerTest.java +++ b/asterixdb/asterix-app/src/test/java/org/apache/asterix/test/txn/LogManagerTest.java @@ -31,7 +31,6 @@ import org.apache.asterix.common.config.GlobalConfig; import org.apache.asterix.common.config.TransactionProperties; import org.apache.asterix.common.dataflow.DatasetLocalResource; import org.apache.asterix.common.exceptions.ACIDException; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.common.transactions.DatasetId; import org.apache.asterix.common.transactions.ILockManager; import org.apache.asterix.common.transactions.ILogManager; @@ -113,7 +112,7 @@ public class LogManagerTest { logManager.log(logRecord); } } catch (ACIDException e) { - Throwable rootCause = ExceptionUtils.getRootCause(e); + Throwable rootCause = org.apache.hyracks.api.util.ExceptionUtils.getRootCause(e); if (rootCause instanceof java.lang.InterruptedException) { interrupted.set(true); } 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 deleted file mode 100644 index f73848f..0000000 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ExceptionUtils.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * 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.common.exceptions; - -import java.util.function.Predicate; - -import org.apache.hyracks.api.exceptions.IFormattedException; - -public class ExceptionUtils { - public static final String INCORRECT_PARAMETER = "Incorrect parameter.\n"; - public static final String PARAMETER_NAME = "Parameter name: "; - public static final String EXPECTED_VALUE = "Expected value: "; - public static final String PASSED_VALUE = "Passed value: "; - - private ExceptionUtils() { - } - - public static String incorrectParameterMessage(String parameterName, String expectedValue, String passedValue) { - return INCORRECT_PARAMETER + PARAMETER_NAME + parameterName + System.lineSeparator() + EXPECTED_VALUE - + expectedValue + System.lineSeparator() + PASSED_VALUE + passedValue; - } - - // Gets the error message for the root cause of a given Throwable instance. - public static String getErrorMessage(Throwable th) { - Throwable cause = getRootCause(th); - return cause.getMessage(); - } - - // Finds the root cause of a given Throwable instance. - public static Throwable getRootCause(Throwable e) { - Throwable current = e; - Throwable cause = e.getCause(); - while (cause != null && cause != current) { - current = cause; - cause = current.getCause(); - } - return current; - } - - /** - * Determines whether supplied exception contains a matching cause in its hierarchy, or is itself a match - */ - public static boolean matchingCause(Throwable e, Predicate<Throwable> test) { - Throwable current = e; - Throwable cause = e.getCause(); - while (cause != null && cause != current) { - if (test.test(cause)) { - return true; - } - Throwable nextCause = current.getCause(); - current = cause; - cause = nextCause; - } - return test.test(e); - } - - /** - * Unwraps enclosed exceptions until a non-product exception is found, otherwise returns the root production - * exception - */ - public static Throwable unwrap(Throwable e) { - Throwable current = e; - Throwable cause = e.getCause(); - while (cause != null && cause != current && current instanceof IFormattedException) { - current = cause; - cause = current.getCause(); - } - return current; - } -} 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 f9eade5..ad762bf 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 @@ -26,7 +26,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import org.apache.asterix.common.exceptions.ExceptionUtils; import org.apache.asterix.external.dataflow.AbstractFeedDataFlowController; import org.apache.asterix.external.util.FeedLogManager; import org.apache.asterix.external.util.FileSystemWatcher; @@ -129,7 +128,7 @@ public class LocalFSInputStream extends AbstractMultipleInputStream { if (in == null) { return false; } - Throwable root = ExceptionUtils.getRootCause(th); + Throwable root = org.apache.hyracks.api.util.ExceptionUtils.getRootCause(th); if (root instanceof HyracksDataException) { HyracksDataException r = (HyracksDataException) root; boolean advance = false; 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 d748ed8..7c304b9 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 @@ -23,9 +23,11 @@ import java.util.Collection; import java.util.List; import java.util.Map; import java.util.function.Function; +import java.util.function.Predicate; import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.api.exceptions.IFormattedException; import org.apache.hyracks.util.ThrowingFunction; import com.google.common.util.concurrent.UncheckedExecutionException; @@ -158,4 +160,41 @@ public class ExceptionUtils { throw HyracksDataException.create(e.getCause()); } } + + // Gets the error message for the root cause of a given Throwable instance. + public static String getErrorMessage(Throwable th) { + Throwable cause = getRootCause(th); + return cause.getMessage(); + } + + /** + * Determines whether supplied exception contains a matching cause in its hierarchy, or is itself a match + */ + public static boolean matchingCause(Throwable e, Predicate<Throwable> test) { + Throwable current = e; + Throwable cause = e.getCause(); + while (cause != null && cause != current) { + if (test.test(cause)) { + return true; + } + Throwable nextCause = current.getCause(); + current = cause; + cause = nextCause; + } + return test.test(e); + } + + /** + * Unwraps enclosed exceptions until a non-product exception is found, otherwise returns the root production + * exception + */ + public static Throwable unwrap(Throwable e) { + Throwable current = e; + Throwable cause = e.getCause(); + while (cause != current && cause instanceof IFormattedException) { + current = cause; + cause = current.getCause(); + } + return current; + } }
