/*
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
licenses@blazegraph.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Created on Sep 10, 2009
*/
package com.bigdata;
import java.io.IOException;
import java.text.DateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
/**
* A class for those few statics that it makes sense to reference from other
* places.
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
*/
public class BigdataStatics {
/**
* A flag used for a variety of purposes during performance tuning. The use
* of the flag makes it easier to figure out where those {@link System#err}
* messages are coming from. This should always be off in the trunk.
*/
public static final boolean debug = Boolean.getBoolean("com.bigdata.debug");
/**
* The name of an environment variable whose value will be used as the
* canonical host name for the host running this JVM. This information is
* used by the {@link com.bigdata.counters.AbstractStatisticsCollector},
* which is responsible for obtaining and reporting the canonical hostname
* for the {@link com.bigdata.Banner} and other purposes.
*
* @see com.bigdata.counters.AbstractStatisticsCollector
* @see com.bigdata.Banner
* @see com.bigdata.ganglia.GangliaService#HOSTNAME
* @see <a href="http://trac.blazegraph.com/ticket/886" >Provide workaround for
* bad reverse DNS setups</a>
*/
public static final String HOSTNAME = "com.bigdata.hostname";
/**
* The #of lines of output from a child process which will be echoed onto
* {@link System#out} when that child process is executed. This makes it
* easy to track down why a child process dies during service start. If you
* want to see all output from the child process, then you should set the
* log level for the {@link com.bigdata.jini.start.process.ProcessHelper}
* class to INFO.
* <p>
* Note: This needs to be more than the length of the
* {@link com.bigdata.Banner} output in order for anything related to the
* process behavior to be echoed on {@link System#out}.
*
* @see com.bigdata.jini.start.process.ProcessHelper
*/
public static int echoProcessStartupLineCount = 30;//Integer.MAX_VALUE;//100
/**
* Global switch controlling whether true thread local buffers or striped
* locks are used for some things.
*
* @deprecated This is ugly. Remove once the issue has been resolved.
*
* @see https://sourceforge.net/apps/trac/bigdata/ticket/437 (Thread-local
* cache combined with unbounded thread pools causes effective memory
* leak)
*/
public static final boolean threadLocalBuffers = Boolean
.getBoolean("com.bigdata.threadLocalBuffers");
/**
* Used to ignore tests in CI that are known to fail. This helps make CI
* green for people while still leaving us a trail for the tests that exist
* to mark problems that should be fixed at some point.
*/
public static final boolean runKnownBadTests = Boolean
.getBoolean("com.bigdata.runKnownBadTests");
/**
* Return the web application context path for the default deployment of the
* bigdata web application.
*
* @see <a href="https://sourceforge.net/apps/trac/bigdata/ticket/730" >
* Allow configuration of embedded NSS jetty server using jetty-web.xml
* </a>
*/
public static final String getContextPath() {
return "/bigdata";
}
/**
* Write a thread dump onto the caller's object.
* <p>
* Note: This code should not obtain any locks. This is necessary in order
* for the code to run even when the server is in a deadlock.
*
* @see <a href="http://trac.blazegraph.com/ticket/1082" > Add ability to dump
* threads to status page </a>
*/
public static void threadDump(final Appendable w) {
try {
final DateFormat df = DateFormat.getDateTimeInstance();
final Date date = new Date(System.currentTimeMillis());
w.append(Banner.getBanner());
w.append("Thread dump. Date:" + df.format(date));
w.append("\n\n");
// Setup an ordered map.
final Map<Thread, StackTraceElement[]> dump = new TreeMap<Thread, StackTraceElement[]>(
new Comparator<Thread>() {
@Override
public int compare(Thread o1, Thread o2) {
return Long.compare(o1.getId(), o2.getId());
}
});
// Add the stack trace for each thread.
dump.putAll(Thread.getAllStackTraces());
for (Map.Entry<Thread, StackTraceElement[]> threadEntry : dump
.entrySet()) {
final Thread thread = threadEntry.getKey();
w.append("THREAD#" + thread.getId() + ", name="
+ thread.getName() + ", state=" + thread.getState()
+ ", priority=" + thread.getPriority() + ", daemon="
+ thread.isDaemon() + "\n");
for (StackTraceElement elem : threadEntry.getValue()) {
w.append("\t" + elem.toString() + "\n");
}
}
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}
}