/*
* Copyright 2012 LinkedIn, Inc
*
* Licensed 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 com.linkedin.parseq;
/**
* Global parseq configuration, applies to all Engine and Task instances
*
* @author Oleg Anashkin (oanashkin@linkedin.com)
* @author Jaroslaw Odzga (jodzga@linkedin.com)
*/
public final class ParSeqGlobalConfiguration {
private static volatile boolean _crossThreadStackTracesEnabled = false;
private static volatile boolean _trampolineEnabled = false;
private ParSeqGlobalConfiguration() {
}
/**
* Returns current state of cross-thread (cross-task) stack tracing.
*
* Normally tasks are executed in a different thread from the one creating it and at a different time. This makes it
* hard to debug because if a task throws an exception, its call stack ends in the execution engine that actually
* starts a thread that serves the task. This feature collects stack trace in advance, when task is created, so that
* if a task throws an exception then the parent stack trace is appended to it. This has a small performance
* impact even if the task doesn't throw any exceptions because stack trace is collected in task constructor.
*
* @return true if cross-thread stack tracing is enabled, false otherwise
*/
public static boolean isCrossThreadStackTracesEnabled() {
return _crossThreadStackTracesEnabled;
}
/**
* Modifies the current state of cross-thread (cross-task) stack tracing.
* This is a dynamic runtime configuration that has immediate effect on all tasks in the current process.
*
* Normally tasks are executed in a different thread from the one creating it and at a different time. This makes it
* hard to debug because if a task throws an exception, its call stack ends in the execution engine that actually
* starts a thread that serves the task. This feature collects stack trace in advance, when task is created, so that
* if a task throws an exception then the parent stack trace is appended to it. This has a small performance
* impact even if the task doesn't throw any exceptions because stack trace is collected in task constructor.
*
* @param enabled true if cross-thread stack tracing is enabled, false otherwise
*/
public static void setCrossThreadStackTracesEnabled(boolean enabled) {
_crossThreadStackTracesEnabled = enabled;
}
/**
* Returns true if trampoline is currently enabled.
*
* Trampoline prevents stack overflow in situation of extremely deep large ParSeq plans. Typically this problem
* does not occur and trampoline can be disabled allowing performance optimization.
*
* @return true if trampoline is currently enabled
*/
public static boolean isTrampolineEnabled() {
return _trampolineEnabled;
}
/**
* Enables or disables trampoline.
* This is a dynamic runtime configuration that has immediate effect on all tasks in the current process.
*
* Trampoline prevents stack overflow in situation of extremely deep ParSeq plans. Typically this problem
* does not occur and trampoline can be disabled allowing performance optimization.
*
* @param enabled
*/
public static void setTrampolineEnabled(boolean enabled) {
_trampolineEnabled = enabled;
}
}