You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2016/07/11 13:49:53 UTC

svn commit: r1752160 - in /jackrabbit/oak/trunk/oak-segment-tar/src: main/java/org/apache/jackrabbit/oak/segment/ main/java/org/apache/jackrabbit/oak/segment/file/ test/java/org/apache/jackrabbit/oak/segment/

Author: alexparvulescu
Date: Mon Jul 11 13:49:53 2016
New Revision: 1752160

URL: http://svn.apache.org/viewvc?rev=1752160&view=rev
Log:
OAK-3309 Segment Tar SegmentCache loader stats

Added:
    jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java   (with props)
Modified:
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java?rev=1752160&r1=1752159&r2=1752160&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/SegmentCache.java Mon Jul 11 13:49:53 2016
@@ -22,19 +22,18 @@ package org.apache.jackrabbit.oak.segmen
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 
-import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 
-import com.google.common.cache.RemovalCause;
 import org.apache.jackrabbit.oak.cache.CacheLIRS;
 import org.apache.jackrabbit.oak.cache.CacheLIRS.EvictionCallback;
 import org.apache.jackrabbit.oak.cache.CacheStats;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.google.common.cache.RemovalCause;
+
 /**
  * FIXME OAK-4474: Finalise SegmentCache: document, add monitoring, management, tests, logging
- * FIXME OAK-3309: SegmentMK segment cache loader stats
  */
 public class SegmentCache {
     private static final Logger LOG = LoggerFactory.getLogger(SegmentCache.class);
@@ -60,23 +59,8 @@ public class SegmentCache {
             .build();
     }
 
-    /**
-     * Get a segment from the cache
-     * @param id  segment id
-     * @return  segment with the given {@code id} or {@code null} if not in the cache
-     */
-    @CheckForNull
-    public Segment geSegment(@Nonnull SegmentId id) {
-        try {
-            return cache.get(id);
-        } catch (ExecutionException e) {
-            LOG.error("Error loading segment {} from cache", id, e);
-            return null;
-        }
-    }
-
     @Nonnull
-    public Segment geSegment(@Nonnull SegmentId id, @Nonnull Callable<Segment> loader)
+    public Segment getSegment(@Nonnull SegmentId id, @Nonnull Callable<Segment> loader)
     throws ExecutionException {
         return cache.get(id, loader);
     }
@@ -92,6 +76,7 @@ public class SegmentCache {
 
     @Nonnull
     public CacheStats getCacheStats() {
-        return new CacheStats(cache, "Segment Cache", null, -1);
+        return new CacheStats(cache, "Segment Cache", null,
+                cache.getMaxMemory());
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java?rev=1752160&r1=1752159&r2=1752160&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/FileStore.java Mon Jul 11 13:49:53 2016
@@ -1182,7 +1182,7 @@ public class FileStore implements Segmen
     @Nonnull
     public Segment readSegment(final SegmentId id) {
         try {
-            return segmentCache.geSegment(id, new Callable<Segment>() {
+            return segmentCache.getSegment(id, new Callable<Segment>() {
                 @Override
                 public Segment call() throws Exception {
                     long msb = id.getMostSignificantBits();

Added: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java?rev=1752160&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java (added)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java Mon Jul 11 13:49:53 2016
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.jackrabbit.oak.segment;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+
+import java.util.concurrent.Callable;
+
+import org.apache.jackrabbit.oak.cache.CacheStats;
+import org.junit.Test;
+
+public class SegmentCacheTest {
+
+    @Test
+    public void statsTest() throws Exception {
+        Callable<Segment> loader = new Callable<Segment>() {
+
+            @Override
+            public Segment call() throws Exception {
+                return mock(Segment.class);
+            }
+        };
+
+        SegmentCache cache = new SegmentCache(1);
+        CacheStats stats = cache.getCacheStats();
+        SegmentId id = new SegmentId(mock(SegmentStore.class), -1, -1);
+
+        // empty cache
+        assertEquals(0, stats.getElementCount());
+        assertEquals(0, stats.getLoadCount());
+        assertEquals(0, stats.getHitCount());
+        assertEquals(0, stats.getMissCount());
+        assertEquals(0, stats.getRequestCount());
+
+        // load
+        cache.getSegment(id, loader);
+        assertEquals(1, stats.getElementCount());
+        assertEquals(1, stats.getLoadCount());
+        assertEquals(0, stats.getHitCount());
+        assertEquals(1, stats.getMissCount());
+        assertEquals(1, stats.getRequestCount());
+
+        // cache hit
+        cache.getSegment(id, loader);
+        assertEquals(1, stats.getElementCount());
+        assertEquals(1, stats.getLoadCount());
+        assertEquals(1, stats.getHitCount());
+        assertEquals(1, stats.getMissCount());
+        assertEquals(2, stats.getRequestCount());
+
+        cache.clear();
+        assertEquals(0, stats.getElementCount());
+        assertEquals(1, stats.getLoadCount());
+        assertEquals(1, stats.getHitCount());
+        assertEquals(1, stats.getMissCount());
+        assertEquals(2, stats.getRequestCount());
+
+        stats.resetStats();
+        assertEquals(0, stats.getElementCount());
+        assertEquals(0, stats.getLoadCount());
+        assertEquals(0, stats.getHitCount());
+        assertEquals(0, stats.getMissCount());
+        assertEquals(0, stats.getRequestCount());
+    }
+
+}
\ No newline at end of file

Propchange: jackrabbit/oak/trunk/oak-segment-tar/src/test/java/org/apache/jackrabbit/oak/segment/SegmentCacheTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain