Author: burton
Date: Fri Mar 18 15:07:31 2005
New Revision: 158157
URL: http://svn.apache.org/viewcvs?view=rev&rev=158157
Log:
Fixed a bug due to a threading issue corrupting a HashSet.. we now use a
mutex...
Modified:
jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/rrd/GraphTask.java
Modified:
jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/rrd/GraphTask.java
URL:
http://svn.apache.org/viewcvs/jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/rrd/GraphTask.java?view=diff&r1=158156&r2=158157
==============================================================================
---
jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/rrd/GraphTask.java
(original)
+++
jakarta/commons/sandbox/benchmark/trunk/src/java/org/apache/commons/benchmark/rrd/GraphTask.java
Fri Mar 18 15:07:31 2005
@@ -37,6 +37,13 @@
public class GraphTask extends Thread {
/**
+ * RRD 1.4 has a bug where they use a HashSet internall to keep track of
+ * open writers which causes threads to screw up so we need to synchronize
a
+ * mutex. Since this is just disk IO it should be OK.
+ */
+ public static final Object RRD_MUTEX = new Object();
+
+ /**
* True when we should generate tasks within the current process.
*/
public static boolean ENABLE_GENERATE_GRAPHS=true;
@@ -208,7 +215,8 @@
graph.saveAsPNG( path );
System.out.println( "Generating graph: " + path + " ...done" );
-
+ //graph.close();
+
}
/**
@@ -219,56 +227,60 @@
*/
private void doCreateRRD() throws Exception {
- new File( ROOT ).mkdirs();
+ synchronized( RRD_MUTEX ) {
- System.out.println( "Creating rrd file: " + rrd_path );
+ new File( ROOT ).mkdirs();
- RrdDef rrdDef = new RrdDef( rrd_path );
- rrdDef.setStartTime( begin );
+ System.out.println( "Creating rrd file: " + rrd_path );
+
+ RrdDef rrdDef = new RrdDef( rrd_path );
+ rrdDef.setStartTime( begin );
- rrdDef.addDatasource( "speed",
- "GAUGE",
- GraphTaskRunner.COUNTER_INTERVAL_SECONDS,
- Double.NaN,
- Double.NaN );
+ rrdDef.addDatasource( "speed",
+ "GAUGE",
+ GraphTaskRunner.COUNTER_INTERVAL_SECONDS,
+ Double.NaN,
+ Double.NaN );
- //set the step to 1 minute (the default is 5 minutes).
- rrdDef.setStep( GraphTaskRunner.COUNTER_INTERVAL_SECONDS );
+ //set the step to 1 minute (the default is 5 minutes).
+ rrdDef.setStep( GraphTaskRunner.COUNTER_INTERVAL_SECONDS );
- //keep one measurement for every single poll.
+ //keep one measurement for every single poll.
- //rrdDef.addArchive( "AVERAGE", 0.5, 1, 3600 );
+ //rrdDef.addArchive( "AVERAGE", 0.5, 1, 3600 );
- //rrdDef.addArchive( "AVERAGE", 0.5, 1, 60 );
+ //rrdDef.addArchive( "AVERAGE", 0.5, 1, 60 );
- //FIXME: increase this to about 400... because this would yield a much
- //higher density image.
+ //FIXME: increase this to about 400... because this would yield a
much
+ //higher density image.
- //6 hours (6 minute intervals... with 60 measurements which yields 360
- //minutes which is 6 hours).
+ //6 hours (6 minute intervals... with 60 measurements which yields
360
+ //minutes which is 6 hours).
- rrdDef.addArchive( "AVERAGE", 0.5, 1, 360 );
+ rrdDef.addArchive( "AVERAGE", 0.5, 1, 360 );
- //12 hours
- rrdDef.addArchive( "AVERAGE", 0.5, 2, 360 );
+ //12 hours
+ rrdDef.addArchive( "AVERAGE", 0.5, 2, 360 );
- //24 hours
- rrdDef.addArchive( "AVERAGE", 0.5, 4, 360 );
+ //24 hours
+ rrdDef.addArchive( "AVERAGE", 0.5, 4, 360 );
- //1 week
- rrdDef.addArchive( "AVERAGE", 0.5, 28, 360 );
+ //1 week
+ rrdDef.addArchive( "AVERAGE", 0.5, 28, 360 );
- //1 month
- rrdDef.addArchive( "AVERAGE", 0.5, 120, 360 );
+ //1 month
+ rrdDef.addArchive( "AVERAGE", 0.5, 120, 360 );
- //1 year
- rrdDef.addArchive( "AVERAGE", 0.5, 1460, 360 );
+ //1 year
+ rrdDef.addArchive( "AVERAGE", 0.5, 1460, 360 );
- //FIXME: don't we need additional archives here?
+ //FIXME: don't we need additional archives here?
- RrdDb rrdDb = new RrdDb( rrdDef );
- rrdDb.close();
+ RrdDb rrdDb = new RrdDb( rrdDef );
+ rrdDb.close();
+ }
+
}
/**
@@ -281,33 +293,38 @@
if ( file.exists() == false ) {
doCreateRRD();
}
+
+ synchronized( RRD_MUTEX ) {
- RrdDb rrdDb = new RrdDb( rrd_path );
- Sample sample = rrdDb.createSample();
+ RrdDb rrdDb = new RrdDb( rrd_path );
+ Sample sample = rrdDb.createSample();
- try {
+ try {
- long v = source.getValue();
+ long v = source.getValue();
- //NOTE: this is the correct mechanism but it might be off by a bit
due
- //to skew with running getValue() from diff impls...
- //lastUpdatedSeconds = currentTimeSeconds();
+ //NOTE: this is the correct mechanism but it might be off by a
bit due
+ //to skew with running getValue() from diff impls...
+ //lastUpdatedSeconds = currentTimeSeconds();
- lastUpdatedSeconds += GraphTaskRunner.COUNTER_INTERVAL_SECONDS;
+ lastUpdatedSeconds += GraphTaskRunner.COUNTER_INTERVAL_SECONDS;
- String time = formatTime( lastUpdatedSeconds );
+ String time = formatTime( lastUpdatedSeconds );
- System.out.println( "time: " + time + " , " + unit_name + " value:
" + v );
- System.out.println( "lastUpdated: " + lastUpdatedSeconds );
+ System.out.println( "time: " + time + " , " + unit_name + "
value: " + v );
+ System.out.println( "lastUpdated: " + lastUpdatedSeconds );
- sample.setAndUpdate( lastUpdatedSeconds + ":" + v );
+ sample.setAndUpdate( lastUpdatedSeconds + ":" + v );
+ //sample.close();
+
+ } finally {
- } finally {
+ rrdDb.sync();
+ rrdDb.close();
+ }
- rrdDb.sync();
- rrdDb.close();
}
-
+
}
/**
@@ -336,5 +353,4 @@
}
}
}
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]