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