You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by ol...@apache.org on 2014/03/07 07:07:44 UTC

svn commit: r1575185 - in /incubator/sirona/trunk: agent/store/cube/src/main/java/org/apache/sirona/cube/ core/src/main/java/org/apache/sirona/store/tracking/ core/src/test/java/org/apache/sirona/store/tracking/

Author: olamy
Date: Fri Mar  7 06:07:43 2014
New Revision: 1575185

URL: http://svn.apache.org/r1575185
Log:
use send single store send directly to the collector no local storage of PathTracking entries

Modified:
    incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubePathTrackingDataStore.java
    incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java
    incubator/sirona/trunk/core/src/test/java/org/apache/sirona/store/tracking/InMemoryPathTrackingTest.java

Modified: incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubePathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubePathTrackingDataStore.java?rev=1575185&r1=1575184&r2=1575185&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubePathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/agent/store/cube/src/main/java/org/apache/sirona/cube/CubePathTrackingDataStore.java Fri Mar  7 06:07:43 2014
@@ -23,6 +23,7 @@ import org.apache.sirona.configuration.i
 import org.apache.sirona.store.tracking.BatchPathTrackingDataStore;
 import org.apache.sirona.store.tracking.CollectorPathTrackingDataStore;
 import org.apache.sirona.tracking.PathTrackingEntry;
+import org.apache.sirona.util.SerializeUtils;
 
 import java.util.List;
 import java.util.Map;
@@ -39,16 +40,18 @@ public class CubePathTrackingDataStore
     private final Cube cube = IoCs.findOrCreateInstance( CubeBuilder.class ).build();
 
 
-    private static final boolean useExecutors = Boolean.parseBoolean(
+    private static final boolean USE_EXECUTORS = Boolean.parseBoolean(
         Configuration.getProperty( Configuration.CONFIG_PROPERTY_PREFIX + "pathtracking.post.useexecutors", "false" ) );
 
+    private static boolean USE_SINGLE_STORE = Boolean.parseBoolean(
+        Configuration.getProperty( Configuration.CONFIG_PROPERTY_PREFIX + "pathtracking.singlestore", "false" ) );
 
     protected static ExecutorService executorService;
 
     static
     {
 
-        if ( useExecutors )
+        if ( USE_EXECUTORS )
         {
             int threadsNumber =
                 Configuration.getInteger( Configuration.CONFIG_PROPERTY_PREFIX + "pathtracking.post.executors", 5 );
@@ -58,16 +61,26 @@ public class CubePathTrackingDataStore
     }
 
     @Override
+    public void store( PathTrackingEntry pathTrackingEntry )
+    {
+        cube.postBytes( SerializeUtils.serialize( pathTrackingEntry ), PathTrackingEntry.class.getName() );
+    }
+
+    @Override
     protected void pushEntriesByBatch( Map<String, List<Pointer>> pathTrackingEntries )
     {
-        for ( Map.Entry<String, List<Pointer>> entry : pathTrackingEntries.entrySet() )
+        if (!USE_SINGLE_STORE)
         {
-            for ( Pointer pointer : entry.getValue() )
+
+            for ( Map.Entry<String, List<Pointer>> entry : pathTrackingEntries.entrySet() )
             {
-                if ( !pointer.isFree() )
+                for ( Pointer pointer : entry.getValue() )
                 {
-                    cube.postBytes( readBytes( pointer ), PathTrackingEntry.class.getName() );
-                    pointer.freeMemory();
+                    if ( !pointer.isFree() )
+                    {
+                        cube.postBytes( readBytes( pointer ), PathTrackingEntry.class.getName() );
+                        pointer.freeMemory();
+                    }
                 }
             }
         }

Modified: incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java?rev=1575185&r1=1575184&r2=1575185&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java (original)
+++ incubator/sirona/trunk/core/src/main/java/org/apache/sirona/store/tracking/InMemoryPathTrackingDataStore.java Fri Mar  7 06:07:43 2014
@@ -33,6 +33,7 @@ import java.util.Set;
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
 
 /**
  * Very simple in memory storage for Path tracking feature
@@ -84,7 +85,7 @@ public class InMemoryPathTrackingDataSto
 
             if ( entriesList == null )
             {
-                entriesList = new ArrayList<Pointer>();
+                entriesList = new CopyOnWriteArrayList<Pointer>();
             }
             entriesList.addAll( serialize( entry.getValue() ) );
             this.pathTrackingEntries.put( entry.getKey(), entriesList );
@@ -214,16 +215,29 @@ public class InMemoryPathTrackingDataSto
     @Override
     public void clearEntries()
     {
+        List<String> entriesToRemove = new ArrayList<String>();
         for ( Map.Entry<String, List<Pointer>> entry : pathTrackingEntries.entrySet() )
         {
+            boolean allFree = true;
             // clear entries to not wait gc
             for ( Pointer pointer : entry.getValue() )
             {
-                //UnsafeUtils.getUnsafe().freeMemory( pointer.offheapPointer );
-                pointer.freeMemory();
+                if ( !pointer.isFree() )
+                {
+                    allFree = false;
+                }
             }
+            if ( allFree )
+            {
+                entriesToRemove.add( entry.getKey() );
+            }
+        }
+
+        for (String key : entriesToRemove)
+        {
+            pathTrackingEntries.remove( key );
         }
-        pathTrackingEntries = new ConcurrentHashMap<String, List<Pointer>>( 50 );
+
     }
 
     protected Map<String, Set<PathTrackingEntry>> getPathTrackingEntries()
@@ -243,11 +257,6 @@ public class InMemoryPathTrackingDataSto
         return entries;
     }
 
-    /**
-     * direct access to datas not a copy
-     *
-     * @return
-     */
     protected Map<String, List<Pointer>> getPointers()
     {
         return this.pathTrackingEntries;

Modified: incubator/sirona/trunk/core/src/test/java/org/apache/sirona/store/tracking/InMemoryPathTrackingTest.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/core/src/test/java/org/apache/sirona/store/tracking/InMemoryPathTrackingTest.java?rev=1575185&r1=1575184&r2=1575185&view=diff
==============================================================================
--- incubator/sirona/trunk/core/src/test/java/org/apache/sirona/store/tracking/InMemoryPathTrackingTest.java (original)
+++ incubator/sirona/trunk/core/src/test/java/org/apache/sirona/store/tracking/InMemoryPathTrackingTest.java Fri Mar  7 06:07:43 2014
@@ -52,12 +52,14 @@ public class InMemoryPathTrackingTest
 
         Assert.assertEquals( "nodeId", entry.getNodeId() );
 
+        /*
+        we do not clear anymore entries pointer are freeing once sended
         store.clearEntries();
 
         all = store.getPathTrackingEntries();
 
         Assert.assertNotNull( all );
         Assert.assertEquals( 0, all.size() );
-
+        */
     }
 }