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