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 md...@apache.org on 2015/07/07 15:26:15 UTC
svn commit: r1689663 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
Author: mduerig
Date: Tue Jul 7 13:26:15 2015
New Revision: 1689663
URL: http://svn.apache.org/r1689663
Log:
segment cache
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1689663&r1=1689662&r2=1689663&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java Tue Jul 7 13:26:15 2015
@@ -16,18 +16,17 @@
*/
package org.apache.jackrabbit.oak.plugins.segment;
-import static com.google.common.collect.Lists.newLinkedList;
import static com.google.common.collect.Queues.newArrayDeque;
import static com.google.common.collect.Sets.newHashSet;
import java.security.SecureRandom;
-import java.util.LinkedList;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nonnull;
+import org.apache.jackrabbit.oak.cache.CacheLIRS;
import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
import org.slf4j.Logger;
@@ -88,12 +87,12 @@ public class SegmentTracker {
*/
private final SegmentIdTable[] tables = new SegmentIdTable[32];
- private final LinkedList<Segment> segments = newLinkedList();
-
private long currentSize;
private final StringCache stringCache;
+ private final CacheLIRS<SegmentId, Segment> segmentCache;
+
public SegmentTracker(SegmentStore store, int cacheSizeMB,
SegmentVersion version) {
for (int i = 0; i < tables.length; i++) {
@@ -106,6 +105,10 @@ public class SegmentTracker {
this.compactionMap = new AtomicReference<CompactionMap>(
CompactionMap.EMPTY);
stringCache = new StringCache((int) Math.min(Integer.MAX_VALUE, cacheSize));
+ segmentCache = new CacheLIRS.Builder()
+ .maximumSize((int) Math.min(Integer.MAX_VALUE, cacheSize))
+ .averageWeight(Segment.MAX_SEGMENT_SIZE/2)
+ .build();
}
public SegmentTracker(SegmentStore store, SegmentVersion version) {
@@ -128,7 +131,7 @@ public class SegmentTracker {
* Clear the segment cache
*/
public synchronized void clearCache() {
- segments.clear();
+ segmentCache.invalidateAll();
stringCache.clear();
currentSize = 0;
}
@@ -154,34 +157,9 @@ public class SegmentTracker {
// done before synchronization to allow concurrent segment access
// while we update the cache below
id.setSegment(segment);
-
- synchronized (this) {
- long size = segment.getCacheSize();
-
- segments.addFirst(segment);
- currentSize += size;
-
- log.debug("Added segment {} to tracker cache ({} bytes)",
- id, size);
-
- // TODO possibly this cache could be improved
- while (currentSize > cacheSize && segments.size() > 1) {
- Segment last = segments.removeLast();
- SegmentId lastId = last.getSegmentId();
- if (last.accessed()) {
- segments.addFirst(last);
- log.debug("Segment {} was recently used, keeping in cache",
- lastId);
- } else {
- long lastSize = last.getCacheSize();
-
- lastId.setSegment(null);
- currentSize -= lastSize;
-
- log.debug("Removed segment {} from tracker cache ({} bytes)",
- lastId, lastSize);
- }
- }
+ Segment previous = segmentCache.put(id, segment, segment.size());
+ if (previous != null) {
+ previous.getSegmentId().setSegment(null);
}
}
Re: svn commit: r1689663 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
Posted by Michael Dürig <md...@apache.org>.
Commit accident: http://svn.apache.org/r1689662 and
http://svn.apache.org/r1689663. Reverted already. Sorry for the noise.
Michael
On 7.7.15 3:26 , mduerig@apache.org wrote:
> Author: mduerig
> Date: Tue Jul 7 13:26:15 2015
> New Revision: 1689663
>
> URL: http://svn.apache.org/r1689663
> Log:
> segment cache
>
> Modified:
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java?rev=1689663&r1=1689662&r2=1689663&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentTracker.java Tue Jul 7 13:26:15 2015
> @@ -16,18 +16,17 @@
> */
> package org.apache.jackrabbit.oak.plugins.segment;
>
> -import static com.google.common.collect.Lists.newLinkedList;
> import static com.google.common.collect.Queues.newArrayDeque;
> import static com.google.common.collect.Sets.newHashSet;
>
> import java.security.SecureRandom;
> -import java.util.LinkedList;
> import java.util.Queue;
> import java.util.Set;
> import java.util.concurrent.atomic.AtomicReference;
>
> import javax.annotation.Nonnull;
>
> +import org.apache.jackrabbit.oak.cache.CacheLIRS;
> import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
> import org.apache.jackrabbit.oak.plugins.segment.compaction.CompactionStrategy;
> import org.slf4j.Logger;
> @@ -88,12 +87,12 @@ public class SegmentTracker {
> */
> private final SegmentIdTable[] tables = new SegmentIdTable[32];
>
> - private final LinkedList<Segment> segments = newLinkedList();
> -
> private long currentSize;
>
> private final StringCache stringCache;
>
> + private final CacheLIRS<SegmentId, Segment> segmentCache;
> +
> public SegmentTracker(SegmentStore store, int cacheSizeMB,
> SegmentVersion version) {
> for (int i = 0; i < tables.length; i++) {
> @@ -106,6 +105,10 @@ public class SegmentTracker {
> this.compactionMap = new AtomicReference<CompactionMap>(
> CompactionMap.EMPTY);
> stringCache = new StringCache((int) Math.min(Integer.MAX_VALUE, cacheSize));
> + segmentCache = new CacheLIRS.Builder()
> + .maximumSize((int) Math.min(Integer.MAX_VALUE, cacheSize))
> + .averageWeight(Segment.MAX_SEGMENT_SIZE/2)
> + .build();
> }
>
> public SegmentTracker(SegmentStore store, SegmentVersion version) {
> @@ -128,7 +131,7 @@ public class SegmentTracker {
> * Clear the segment cache
> */
> public synchronized void clearCache() {
> - segments.clear();
> + segmentCache.invalidateAll();
> stringCache.clear();
> currentSize = 0;
> }
> @@ -154,34 +157,9 @@ public class SegmentTracker {
> // done before synchronization to allow concurrent segment access
> // while we update the cache below
> id.setSegment(segment);
> -
> - synchronized (this) {
> - long size = segment.getCacheSize();
> -
> - segments.addFirst(segment);
> - currentSize += size;
> -
> - log.debug("Added segment {} to tracker cache ({} bytes)",
> - id, size);
> -
> - // TODO possibly this cache could be improved
> - while (currentSize > cacheSize && segments.size() > 1) {
> - Segment last = segments.removeLast();
> - SegmentId lastId = last.getSegmentId();
> - if (last.accessed()) {
> - segments.addFirst(last);
> - log.debug("Segment {} was recently used, keeping in cache",
> - lastId);
> - } else {
> - long lastSize = last.getCacheSize();
> -
> - lastId.setSegment(null);
> - currentSize -= lastSize;
> -
> - log.debug("Removed segment {} from tracker cache ({} bytes)",
> - lastId, lastSize);
> - }
> - }
> + Segment previous = segmentCache.put(id, segment, segment.size());
> + if (previous != null) {
> + previous.getSegmentId().setSegment(null);
> }
> }
>
>
>