You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@synapse.apache.org by in...@apache.org on 2010/03/16 16:58:05 UTC
svn commit: r923824 - in
/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse: ./
aspects/statistics/ core/axis2/ mediators/base/
Author: indika
Date: Tue Mar 16 15:58:05 2010
New Revision: 923824
URL: http://svn.apache.org/viewvc?rev=923824&view=rev
Log:
fix some of concurrency issues with stats collection... still need to fix a one which needs either sync list or bocking queue
Modified:
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/SynapseConstants.java Tue Mar 16 15:58:05 2010
@@ -330,6 +330,9 @@ public final class SynapseConstants {
public static final String DOING_FAIL_OVER = "synapse.doing.failover";
+ // to be a help for stat collection
+ public static final String SENDING_REQUEST = "synapse.internal.request.sending";
+
public static final String SYNAPSE_STARTUP_TASK_SCHEDULER = "synapse.startup.taskscheduler";
public static final String SYNAPSE_STARTUP_TASK_DESCRIPTIONS_REPOSITORY = "synapse.startup.taskdescriptions.repository";
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsCollector.java Tue Mar 16 15:58:05 2010
@@ -18,6 +18,8 @@
*/
package org.apache.synapse.aspects.statistics;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.synapse.aspects.statistics.mbean.StatisticsView;
import org.apache.synapse.commons.jmx.MBeanRegistrar;
@@ -30,6 +32,8 @@ import java.util.List;
public class StatisticsCollector {
+ private static final Log log = LogFactory.getLog(StatisticsCollector.class);
+
private final List<StatisticsRecord> statisticsCollection = new ArrayList<StatisticsRecord>();
public StatisticsCollector() {
@@ -82,7 +86,9 @@ public class StatisticsCollector {
public List<StatisticsRecord> getAndClearStatisticsRecords() {
List<StatisticsRecord> records = new ArrayList<StatisticsRecord>();
records.addAll(statisticsCollection);
- statisticsCollection.clear();
+ for (StatisticsRecord record : records) {
+ statisticsCollection.remove(record);
+ }
return records;
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsRecord.java Tue Mar 16 15:58:05 2010
@@ -37,7 +37,7 @@ public class StatisticsRecord {
private String clientIP;
private String clientHost;
private ComponentType owner;
- private boolean isEndAnyReported = false;
+ private boolean isEndReported = false;
public StatisticsRecord(String id, String clientIP, String clientHost) {
this.id = id;
@@ -111,12 +111,12 @@ public class StatisticsRecord {
this.owner = owner;
}
- public boolean isEndAnyReported() {
- return isEndAnyReported;
+ public boolean isEndReported() {
+ return isEndReported;
}
- public void setEndAnyReported(boolean endAnyReported) {
- isEndAnyReported = endAnyReported;
+ public void setEndReported(boolean endReported) {
+ isEndReported = endReported;
}
public String toString() {
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsReporter.java Tue Mar 16 15:58:05 2010
@@ -25,7 +25,6 @@ import org.apache.synapse.Identifiable;
import org.apache.synapse.MessageContext;
import org.apache.synapse.SynapseConstants;
import org.apache.synapse.aspects.AspectConfiguration;
-import org.apache.synapse.aspects.AspectConfigurationDetectionStrategy;
import org.apache.synapse.aspects.ComponentType;
import org.apache.synapse.endpoints.EndpointDefinition;
@@ -47,13 +46,10 @@ public class StatisticsReporter {
public static void reportForComponent(MessageContext synCtx,
StatisticsConfigurable configurable,
ComponentType componentType) {
-
- if (configurable != null && configurable.isStatisticsEnable()
- && configurable instanceof Identifiable) {
-
- StatisticsRecord record = StatisticsReporter.getStatisticsRecord(synCtx);
+ if (configurable instanceof Identifiable && configurable.isStatisticsEnable()) {
+ StatisticsRecord record = getStatisticsRecord(synCtx);
record.setOwner(componentType);
- collectStatistics(synCtx, record, configurable, componentType);
+ record.collect(createStatisticsLog((Identifiable) configurable, componentType, synCtx));
}
}
@@ -63,26 +59,27 @@ public class StatisticsReporter {
* @param synCtx Current Message through synapse
*/
public static void reportForAllOnResponseReceived(MessageContext synCtx) {
-
- AspectConfiguration configuration =
- AspectConfigurationDetectionStrategy.getAspectConfiguration(synCtx);
-
- if (configuration != null && configuration.isStatisticsEnable()) {
-
- StatisticsRecord record = StatisticsReporter.getStatisticsRecord(synCtx);
- collectStatistics(synCtx, record, configuration, ComponentType.ANY);
+ synCtx.setProperty(SynapseConstants.SENDING_REQUEST, false);
+ StatisticsRecord statisticsRecord =
+ (StatisticsRecord) synCtx.getProperty(SynapseConstants.STATISTICS_STACK);
+ if (statisticsRecord != null) {
+ AspectConfiguration configuration = new AspectConfiguration(
+ SynapseConstants.SYNAPSE_ASPECTS);
+ configuration.enableStatistics();
+ statisticsRecord.collect(createStatisticsLog(configuration, ComponentType.ANY, synCtx));
}
}
/**
* Reporting a fault
*
- * @param synCtx synCtx Current Message through synapse
+ * @param synCtx synCtx Current Message through synapse
* @param errorLog the received error information
*/
- public static void reportFaultForAll(MessageContext synCtx , ErrorLog errorLog) {
+ public static void reportFaultForAll(MessageContext synCtx, ErrorLog errorLog) {
- StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
+ StatisticsRecord statisticsRecord =
+ (StatisticsRecord) synCtx.getProperty(SynapseConstants.STATISTICS_STACK);
if (statisticsRecord != null) {
if (log.isDebugEnabled()) {
log.debug("Reporting a fault : " + statisticsRecord);
@@ -120,15 +117,10 @@ public class StatisticsReporter {
* @param isStatisticsEnable is stat enable
*/
private static void endReportForAll(MessageContext synCtx, boolean isStatisticsEnable) {
-
- if (!isStatisticsEnable) {
- AspectConfiguration configuration =
- AspectConfigurationDetectionStrategy.getAspectConfiguration(synCtx);
- isStatisticsEnable = configuration != null && configuration.isStatisticsEnable();
- }
- if (isStatisticsEnable) {
- StatisticsRecord statisticsRecord = StatisticsReporter.getStatisticsRecord(synCtx);
- if (statisticsRecord != null && !statisticsRecord.isEndAnyReported()) {
+ StatisticsRecord statisticsRecord =
+ (StatisticsRecord) synCtx.getProperty(SynapseConstants.STATISTICS_STACK);
+ if (isStatisticsEnable || statisticsRecord != null) {
+ if (!statisticsRecord.isEndReported()) {
StatisticsLog statisticsLog = new StatisticsLog(SynapseConstants.SYNAPSE_ASPECTS,
ComponentType.ANY);
statisticsLog.setResponse(synCtx.isResponse() || synCtx.isFaultResponse());
@@ -138,7 +130,8 @@ public class StatisticsReporter {
}
statisticsLog.setEndAnyLog(true);
statisticsRecord.collect(statisticsLog);
- statisticsRecord.setEndAnyReported(true);
+ statisticsRecord.setEndReported(true);
+ addStatistics(synCtx, statisticsRecord);
}
}
}
@@ -155,7 +148,8 @@ public class StatisticsReporter {
boolean isOutOnly = Boolean.parseBoolean(
String.valueOf(synCtx.getProperty(SynapseConstants.OUT_ONLY)));
if (!isOutOnly) {
- isOutOnly = (synCtx.getProperty(SynapseConstants.LAST_ENDPOINT) == null
+ isOutOnly = (!Boolean.parseBoolean(
+ String.valueOf(synCtx.getProperty(SynapseConstants.SENDING_REQUEST)))
&& !synCtx.isResponse());
}
if (isOutOnly) {
@@ -188,15 +182,11 @@ public class StatisticsReporter {
/**
* Collects statistics
*
- * @param synCtx MessageContext instance
- * @param record StatisticsRecord instance
- * @param configurable StatisticsConfigurable instance
- * @param componentType ComponentType instance
+ * @param synCtx MessageContext instance
+ * @param record StatisticsRecord instance
*/
- private static void collectStatistics(MessageContext synCtx,
- StatisticsRecord record,
- StatisticsConfigurable configurable,
- ComponentType componentType) {
+ private static void addStatistics(MessageContext synCtx,
+ StatisticsRecord record) {
StatisticsCollector collector = synCtx.getEnvironment().getStatisticsCollector();
if (collector == null) {
@@ -207,9 +197,7 @@ public class StatisticsReporter {
collector = new StatisticsCollector();
synCtx.getEnvironment().setStatisticsCollector(collector);
}
-
- record.collect(createStatisticsLog((Identifiable) configurable, componentType, synCtx));
-
+ synCtx.getPropertyKeySet().remove(SynapseConstants.STATISTICS_STACK);
if (!collector.contains(record)) {
collector.collect(record);
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/aspects/statistics/StatisticsUpdateStrategy.java Tue Mar 16 15:58:05 2010
@@ -51,6 +51,13 @@ public class StatisticsUpdateStrategy {
switch (componentType) {
case SEQUENCE: {
+
+ if (startLog != null) {
+ if (log.isEndAnyLog() ||
+ log.getComponentType() == ComponentType.ANY) {
+ endLog = log;
+ }
+ }
if (componentType == log.getComponentType()) {
if (!id.equals(log.getId())) {
continue;
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/core/axis2/Axis2SynapseEnvironment.java Tue Mar 16 15:58:05 2010
@@ -185,6 +185,10 @@ public class Axis2SynapseEnvironment imp
dispatcher.updateSession(synCtx);
}
}
+
+ // This is only for stats collection
+ synCtx.setProperty(SynapseConstants.SENDING_REQUEST, true);
+
Axis2Sender.sendOn(endpoint, synCtx);
}
}
Modified: synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java
URL: http://svn.apache.org/viewvc/synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java?rev=923824&r1=923823&r2=923824&view=diff
==============================================================================
--- synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java (original)
+++ synapse/trunk/java/modules/core/src/main/java/org/apache/synapse/mediators/base/SequenceMediator.java Tue Mar 16 15:58:05 2010
@@ -19,10 +19,7 @@
package org.apache.synapse.mediators.base;
-import org.apache.synapse.Mediator;
-import org.apache.synapse.MessageContext;
-import org.apache.synapse.Nameable;
-import org.apache.synapse.SynapseLog;
+import org.apache.synapse.*;
import org.apache.synapse.aspects.ComponentType;
import org.apache.synapse.aspects.statistics.StatisticsReporter;
import org.apache.synapse.core.SynapseEnvironment;
@@ -72,11 +69,6 @@ public class SequenceMediator extends Ab
SynapseLog synLog = getLog(synCtx);
- if (isStatisticsEnable()) {
- StatisticsReporter.reportForComponent(synCtx,
- getAspectConfiguration(), ComponentType.SEQUENCE);
- }
-
if (synLog.isTraceOrDebugEnabled()) {
synLog.traceOrDebug("Start : Sequence "
+ (name == null ? (key == null ? "<anonymous" : "key=<" + key) : "<"
@@ -96,6 +88,10 @@ public class SequenceMediator extends Ab
// Setting Required property to reportForComponent the sequence aspects
try {
+ if (isStatisticsEnable()) {
+ StatisticsReporter.reportForComponent(synCtx,
+ getAspectConfiguration(), ComponentType.SEQUENCE);
+ }
// push the errorHandler sequence into the current message as the fault handler
if (errorHandler != null) {
@@ -145,8 +141,16 @@ public class SequenceMediator extends Ab
} finally {
if (isStatisticsEnable()) {
- StatisticsReporter.reportForComponent(synCtx,
- getAspectConfiguration(),ComponentType.SEQUENCE);
+ boolean shouldReport = Boolean.parseBoolean(
+ String.valueOf(synCtx.getProperty(SynapseConstants.OUT_ONLY)));
+ if (!shouldReport) {
+ shouldReport = !(Boolean.parseBoolean(String.valueOf(
+ synCtx.getProperty(SynapseConstants.SENDING_REQUEST))));
+ }
+ if (shouldReport) {
+ StatisticsReporter.reportForComponent(synCtx,
+ getAspectConfiguration(), ComponentType.SEQUENCE);
+ }
}
}
@@ -241,7 +245,7 @@ public class SequenceMediator extends Ab
public void setErrorHandler(String errorHandler) {
this.errorHandler = errorHandler;
}
-
+
/**
* Is this a dynamic sequence?
* @return true if dynamic