Till Westmann has uploaded a new change for review.
https://asterix-gerrit.ics.uci.edu/1833
Change subject: WIP - result distribution
......................................................................
WIP - result distribution
Change-Id: I0260723652b817bfe43f8f1542676ff6b4a758f1
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
M asterixdb/asterix-app/src/main/resources/asterix-build-configuration.xml
M asterixdb/asterix-app/src/test/resources/runtimets/only_sqlpp.xml
M
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-failed/async-failed.2.pollget.uri
M
hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetDirectoryServiceInterfaceRemoteProxy.java
M
hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/BaseCCApplication.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java
A
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/LoggingUtils.java
10 files changed, 223 insertions(+), 22 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/33/1833/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
index ba98f73..937e5f2 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/AsterixHyracksIntegrationUtil.java
@@ -46,6 +46,7 @@
import org.apache.hyracks.control.common.controllers.CCConfig;
import org.apache.hyracks.control.common.controllers.ControllerConfig;
import org.apache.hyracks.control.common.controllers.NCConfig;
+import org.apache.hyracks.control.common.utils.LoggingUtils;
import org.apache.hyracks.control.nc.NodeControllerService;
import org.kohsuke.args4j.CmdLineException;
@@ -91,6 +92,9 @@
} ;
cc.start();
+
+
LoggingUtils.updateHandlerLevels(Logger.getLogger("org.apache.hyracks"));
+
LoggingUtils.updateHandlerLevels(Logger.getLogger("org.apache.asterix"));
// Starts ncs.
nodeNames = ccConfig.getConfigManager().getNodeNames();
@@ -164,7 +168,9 @@
if (nodeStores == null) {
throw new IllegalStateException("Couldn't find stores for NC: " +
ncConfig.getNodeId());
}
- LOGGER.info("Using the path: " + getDefaultStoragePath());
+ String tempDirPath = getDefaultStoragePath();
+ LOGGER.log(Level.INFO, () -> String.format("using the temp path: %s
for iodevices for node %s", tempDirPath,
+ ncConfig.getNodeId()));
for (int i = 0; i < nodeStores.length; i++) {
// create IO devices based on stores
nodeStores[i] = joinPath(getDefaultStoragePath(),
ncConfig.getNodeId(), nodeStores[i]);
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
index 21afdf1..18daefe 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/hyracks/bootstrap/CCApplication.java
@@ -88,6 +88,7 @@
import org.apache.hyracks.control.cc.BaseCCApplication;
import org.apache.hyracks.control.cc.ClusterControllerService;
import org.apache.hyracks.control.common.controllers.CCConfig;
+import org.apache.hyracks.control.common.utils.LoggingUtils;
import org.apache.hyracks.http.api.IServlet;
import org.apache.hyracks.http.server.HttpServer;
import org.apache.hyracks.http.server.WebManager;
@@ -161,7 +162,9 @@
protected void configureLoggingLevel(Level level) {
super.configureLoggingLevel(level);
LOGGER.info("Setting Asterix log level to " + level);
- Logger.getLogger("org.apache.asterix").setLevel(level);
+ final Logger logger = Logger.getLogger("org.apache.asterix");
+ logger.setLevel(level);
+ LoggingUtils.checkHandlerLevels(logger);
}
protected List<AsterixExtension> getExtensions() {
diff --git
a/asterixdb/asterix-app/src/main/resources/asterix-build-configuration.xml
b/asterixdb/asterix-app/src/main/resources/asterix-build-configuration.xml
index ce7eb3d..90f6dc2 100644
--- a/asterixdb/asterix-app/src/main/resources/asterix-build-configuration.xml
+++ b/asterixdb/asterix-app/src/main/resources/asterix-build-configuration.xml
@@ -106,7 +106,7 @@
</property>
<property>
<name>log.level</name>
- <value>INFO</value>
+ <value>FINE</value>
<description>foo</description>
</property>
</asterixConfiguration>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/only_sqlpp.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/only_sqlpp.xml
index 876a10b..b0f7480 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/only_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/only_sqlpp.xml
@@ -17,7 +17,32 @@
! specific language governing permissions and limitations
! under the License.
!-->
+<!DOCTYPE test-suite [
+ <!ENTITY RecordsQueries SYSTEM
"queries_sqlpp/objects/ObjectsQueries.xml">
+ ]>
<test-suite xmlns="urn:xml.testframework.asterix.apache.org"
ResultOffsetPath="results" QueryOffsetPath="queries_sqlpp">
<test-group name="failed">
</test-group>
+ <test-group name="async-deferred">
+ <test-case FilePath="async-deferred">
+ <compilation-unit name="async-failed">
+ <output-dir compare="Text">async-failed</output-dir>
+ <expected-error>Injected failure in
asterix:inject-failure</expected-error>
+ </compilation-unit>
+ </test-case>
+ <test-case FilePath="async-deferred">
+ <compilation-unit name="async-compilation-failed">
+ <output-dir compare="Text">async-compilation-failed</output-dir>
+ <expected-error>Cannot find dataset gargel</expected-error>
+ </compilation-unit>
+ </test-case>
+ </test-group>
+ <test-group name="aggregate">
+ <test-case FilePath="aggregate">
+ <compilation-unit name="avg_mixed">
+ <output-dir compare="Text">avg_mixed</output-dir>
+ <expected-error>Type incompatibility: function agg-avg gets
incompatible input values: string and float</expected-error>
+ </compilation-unit>
+ </test-case>
+ </test-group>
</test-suite>
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-failed/async-failed.2.pollget.uri
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-failed/async-failed.2.pollget.uri
index e20319a..e0989d3 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-failed/async-failed.2.pollget.uri
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-failed/async-failed.2.pollget.uri
@@ -17,7 +17,7 @@
* under the License.
*/
-#polltimeoutsecs=30
+#polltimeoutsecs=300
#handlevariable=result
$status
diff --git
a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetDirectoryServiceInterfaceRemoteProxy.java
b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetDirectoryServiceInterfaceRemoteProxy.java
index 4310cd0..7eeb913 100644
---
a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetDirectoryServiceInterfaceRemoteProxy.java
+++
b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetDirectoryServiceInterfaceRemoteProxy.java
@@ -40,16 +40,16 @@
@Override
public Status getDatasetResultStatus(JobId jobId, ResultSetId rsId) throws
Exception {
- HyracksClientInterfaceFunctions.GetDatasetResultStatusFunction gdrlf =
new HyracksClientInterfaceFunctions.GetDatasetResultStatusFunction(
- jobId, rsId);
+ HyracksClientInterfaceFunctions.GetDatasetResultStatusFunction gdrlf =
+ new
HyracksClientInterfaceFunctions.GetDatasetResultStatusFunction(jobId, rsId);
return (Status) rpci.call(ipcHandle, gdrlf);
}
@Override
public DatasetDirectoryRecord[] getDatasetResultLocations(JobId jobId,
ResultSetId rsId,
DatasetDirectoryRecord[] knownRecords) throws Exception {
- HyracksClientInterfaceFunctions.GetDatasetResultLocationsFunction
gdrlf = new HyracksClientInterfaceFunctions.GetDatasetResultLocationsFunction(
- jobId, rsId, knownRecords);
+ HyracksClientInterfaceFunctions.GetDatasetResultLocationsFunction
gdrlf =
+ new
HyracksClientInterfaceFunctions.GetDatasetResultLocationsFunction(jobId, rsId,
knownRecords);
return (DatasetDirectoryRecord[]) rpci.call(ipcHandle, gdrlf);
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java
b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java
index fdac7f1..529ca59 100644
---
a/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java
+++
b/hyracks-fullstack/hyracks/hyracks-client/src/main/java/org/apache/hyracks/client/dataset/HyracksDatasetReader.java
@@ -23,6 +23,7 @@
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
+import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
@@ -72,6 +73,15 @@
private static int NUM_READ_BUFFERS = 1;
+ static void enter(String method, Object... objs) {
+ LOGGER.log(Level.FINE,
+ () -> String.format("*** ENTRY HyracksDatasetReader.%s %s",
method, Arrays.toString(objs)));
+ }
+
+ static void leave(String method) {
+ LOGGER.log(Level.FINE, () -> String.format("*** EXIT
HyracksDatasetReader.%s", method));
+ }
+
public HyracksDatasetReader(IHyracksDatasetDirectoryServiceConnection
datasetDirectoryServiceConnection,
ClientNetworkManager netManager, IHyracksCommonContext
datasetClientCtx, JobId jobId,
ResultSetId resultSetId)
@@ -91,6 +101,7 @@
@Override
public Status getResultStatus() {
try {
+ enter("getResultStatus", Thread.currentThread().getName());
return
datasetDirectoryServiceConnection.getDatasetResultStatus(jobId, resultSetId);
} catch (HyracksDataException e) {
if (e.getErrorCode() != ErrorCode.NO_RESULTSET) {
@@ -98,16 +109,23 @@
}
} catch (Exception e) {
LOGGER.log(Level.WARNING, "Exception retrieving result set for job
" + jobId, e);
+ } finally {
+ leave("getResultStatus");
}
return null;
}
private DatasetDirectoryRecord getRecord(int partition) throws Exception {
- while (knownRecords == null || knownRecords[partition] == null) {
- knownRecords = datasetDirectoryServiceConnection
- .getDatasetResultLocations(jobId, resultSetId,
knownRecords);
+ enter("getRecord", partition, Thread.currentThread().getName());
+ try {
+ while (knownRecords == null || knownRecords[partition] == null) {
+ knownRecords = datasetDirectoryServiceConnection
+ .getDatasetResultLocations(jobId, resultSetId,
knownRecords);
+ }
+ return knownRecords[partition];
+ } finally {
+ leave("getRecord");
}
- return knownRecords[partition];
}
private boolean nextPartition() throws HyracksDataException {
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/BaseCCApplication.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/BaseCCApplication.java
index b94cf01..06dd220 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/BaseCCApplication.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/BaseCCApplication.java
@@ -31,6 +31,7 @@
import org.apache.hyracks.control.common.controllers.CCConfig;
import org.apache.hyracks.control.common.controllers.ControllerConfig;
import org.apache.hyracks.control.common.controllers.NCConfig;
+import org.apache.hyracks.control.common.utils.LoggingUtils;
public class BaseCCApplication implements ICCApplication {
private static final Logger LOGGER =
Logger.getLogger(BaseCCApplication.class.getName());
@@ -76,7 +77,8 @@
protected void configureLoggingLevel(Level level) {
LOGGER.info("Setting Hyracks log level to " + level);
- Logger.getLogger("org.apache.hyracks").setLevel(level);
+ final Logger logger = Logger.getLogger("org.apache.hyracks");
+ logger.setLevel(level);
+ LoggingUtils.checkHandlerLevels(logger);
}
-
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java
index 3cc41c5..84ea757 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-cc/src/main/java/org/apache/hyracks/control/cc/dataset/DatasetDirectoryService.java
@@ -54,7 +54,18 @@
*/
public class DatasetDirectoryService implements IDatasetDirectoryService {
- private static final Logger LOGGER =
Logger.getLogger(DatasetDirectoryService.class.getName());
+ static void enter(String method, Object... objs) {
+ LOGGER.log(Level.FINE,
+ () -> String.format("*** ENTRY DatasetDirectoryService.%s %s",
method, Arrays.toString(objs)));
+ }
+
+ static void leave(String method) {
+ LOGGER.log(Level.FINE, () -> String.format("*** EXIT
DatasetDirectoryService.%s", method));
+ }
+
+ int bla = 0;
+
+ static final Logger LOGGER =
Logger.getLogger(DatasetDirectoryService.class.getName());
private final long resultTTL;
@@ -70,6 +81,7 @@
this.resultSweepThreshold = resultSweepThreshold;
this.preDistributedJobStore = preDistributedJobStore;
jobResultLocations = new LinkedHashMap<JobId, JobResultInfo>();
+ //LOGGER.setLevel(Level.FINER);
}
@Override
@@ -142,24 +154,42 @@
@Override
public synchronized void reportResultPartitionWriteCompletion(JobId jobId,
ResultSetId rsId, int partition)
throws HyracksDataException {
+ enter("reportResultPartitionWriteCompletion", jobId, rsId, partition);
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ //System.err.println("*** reportResultPartitionWriteCompletion");
DatasetJobRecord djr = getNonNullDatasetJobRecord(jobId);
djr.getDirectoryRecord(rsId, partition).writeEOS();
djr.updateState(rsId);
notifyAll();
+ leave("reportResultPartitionWriteCompletion");
}
@Override
public synchronized void reportResultPartitionFailure(JobId jobId,
ResultSetId rsId, int partition) {
+ enter("reportResultPartitionFailure", jobId, rsId, partition);
+ try {
+ Thread.sleep(1);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ //System.err.println("*** reportResultPartitionFailure");
DatasetJobRecord djr = getDatasetJobRecord(jobId);
if (djr != null) {
djr.fail(rsId, partition);
}
- jobResultLocations.get(jobId).setException(new Exception());
+ jobResultLocations.get(jobId).setException(new Exception()); //
TODO(tillw) remove
notifyAll();
+ leave("reportResultPartitionFailure");
}
@Override
public synchronized void reportJobFailure(JobId jobId, List<Exception>
exceptions) {
+ enter("reportJobFailure", jobId, exceptions);
+ //System.err.println("*** reportJobFailure");
DatasetJobRecord djr = getDatasetJobRecord(jobId);
if (djr != null) {
djr.fail(exceptions);
@@ -169,12 +199,18 @@
jobResultInfo.setException(exceptions.isEmpty() ? null :
exceptions.get(0));
}
notifyAll();
+ leave("reportJobFailure");
}
@Override
public synchronized DatasetJobRecord.Status getResultStatus(JobId jobId,
ResultSetId rsId)
throws HyracksDataException {
- return getNonNullDatasetJobRecord(jobId).getStatus();
+ enter("getResultStatus", jobId, rsId);
+ try {
+ return getNonNullDatasetJobRecord(jobId).getStatus();
+ } finally {
+ leave("getResultStatus");
+ }
}
@Override
@@ -184,15 +220,25 @@
@Override
public IDatasetStateRecord getState(JobId jobId) {
- return getDatasetJobRecord(jobId);
+ enter("getState", jobId);
+ try {
+ return getDatasetJobRecord(jobId);
+ } finally {
+ leave("getState");
+ }
}
@Override
public synchronized long getResultTimestamp(JobId jobId) {
- if (preDistributedJobStore.jobIsPredistributed(jobId)){
- return -1;
+ enter("getResultTimestamp", jobId);
+ try {
+ if (preDistributedJobStore.jobIsPredistributed(jobId)) {
+ return -1;
+ }
+ return getState(jobId).getTimestamp();
+ } finally {
+ leave("getResultTimestamp");
}
- return getState(jobId).getTimestamp();
}
@Override
@@ -204,12 +250,15 @@
public synchronized void getResultPartitionLocations(JobId jobId,
ResultSetId rsId,
DatasetDirectoryRecord[] knownRecords,
IResultCallback<DatasetDirectoryRecord[]> callback)
throws HyracksDataException {
+ enter("getResultPartitionLocations", jobId, rsId, knownRecords,
callback);
+ //System.err.println("*** getResultPartitionLocations");
DatasetDirectoryRecord[] updatedRecords = updatedRecords(jobId, rsId,
knownRecords);
if (updatedRecords == null) {
jobResultLocations.get(jobId).addWaiter(rsId, knownRecords,
callback);
} else {
callback.setValue(updatedRecords);
}
+ leave("getResultPartitionLocations");
}
/**
@@ -231,6 +280,11 @@
*/
private DatasetDirectoryRecord[] updatedRecords(JobId jobId, ResultSetId
rsId,
DatasetDirectoryRecord[] knownRecords) throws HyracksDataException
{
+ // if (bla < 1) {
+ // ++bla;
+ // System.err.println("*** updatedRecords " + bla);
+ // return null;
+ // }
DatasetJobRecord djr = getNonNullDatasetJobRecord(jobId);
if (djr.getStatus().getState() == State.FAILED) {
@@ -282,14 +336,21 @@
void addWaiter(ResultSetId rsId, DatasetDirectoryRecord[] knownRecords,
IResultCallback<DatasetDirectoryRecord[]> callback) {
+ DatasetDirectoryService.enter("addWaiter", rsId, knownRecords,
callback);
if (waiters == null) {
waiters = new Waiters();
}
waiters.put(rsId, new Waiter(knownRecords, callback));
+ DatasetDirectoryService.leave("addWaiter");
}
Waiter removeWaiter(ResultSetId rsId) {
- return waiters.remove(rsId);
+ DatasetDirectoryService.enter("removeWaiter", rsId);
+ try {
+ return waiters.remove(rsId);
+ } finally {
+ DatasetDirectoryService.leave("removeWaiter");
+ }
}
Waiter getWaiter(ResultSetId rsId) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/LoggingUtils.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/LoggingUtils.java
new file mode 100644
index 0000000..0a5749f
--- /dev/null
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/utils/LoggingUtils.java
@@ -0,0 +1,86 @@
+/*
+ * 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.control.common.utils;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class LoggingUtils {
+
+ interface HandlerManipulator {
+ void doIt(Logger logger, Handler handler);
+ }
+
+ public static void checkHandlerLevels(Logger logger) {
+ manipulateHandlers(logger, LoggingUtils::warnAboutLevel);
+ }
+
+ public static void updateHandlerLevels(Logger logger) {
+ manipulateHandlers(logger, LoggingUtils::updateHandlerLevel);
+ }
+
+ private static void manipulateHandlers(Logger logger, HandlerManipulator
manip) {
+ Logger current = logger;
+ manipulateHandlers(logger, current.getHandlers(), manip);
+ while (current != null && current.getUseParentHandlers()) {
+ current = current.getParent();
+ if (current != null) {
+ manipulateHandlers(logger, current.getHandlers(), manip);
+ }
+ }
+ }
+
+ private static void manipulateHandlers(Logger logger, Handler[] handlers,
HandlerManipulator manip) {
+ for (Handler handler : handlers) {
+ manip.doIt(logger, handler);
+ }
+ }
+
+ private static void warnAboutLevel(Logger logger, Handler handler) {
+ final Level handlerLevel = handler.getLevel();
+ final Level loggerLevel = getLevel(logger);
+ if (handlerLevel.intValue() > loggerLevel.intValue()) {
+ logger.log(Level.WARNING,
+ () -> String.format("Log level for handler %s of %s is %s
(> %s)",
+ handler.getClass().getSimpleName(),
logger.getName(), handlerLevel.getName(),
+ loggerLevel.getName()));
+ }
+ }
+
+ private static void updateHandlerLevel(Logger logger, Handler handler) {
+ final Level handlerLevel = handler.getLevel();
+ final Level loggerLevel = getLevel(logger);
+ if (handlerLevel.intValue() > loggerLevel.intValue()) {
+ logger.log(Level.WARNING, () -> String.format("Setting log level
for handler %s of %s to %s",
+ handler.getClass().getSimpleName(), logger.getName(),
loggerLevel.getName()));
+ handler.setLevel(loggerLevel);
+ }
+ }
+
+ private static Level getLevel(Logger logger) {
+ Logger current = logger;
+ Level level = current.getLevel();
+ while (level == null) {
+ current = current.getParent();
+ level = current.getLevel();
+ }
+ return level;
+ }
+ }
\ No newline at end of file
--
To view, visit https://asterix-gerrit.ics.uci.edu/1833
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0260723652b817bfe43f8f1542676ff6b4a758f1
Gerrit-PatchSet: 1
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Till Westmann <[email protected]>