Author: alexparvulescu Date: Mon Jan 25 13:46:02 2016 New Revision: 1726625
URL: http://svn.apache.org/viewvc?rev=1726625&view=rev Log: OAK-3922 Provide flag to disable template cache in segments Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java Modified: jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java?rev=1726625&r1=1726624&r2=1726625&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java (original) +++ jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/Segment.java Mon Jan 25 13:46:02 2016 @@ -22,6 +22,7 @@ import static com.google.common.base.Pre import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.Lists.newArrayListWithCapacity; import static com.google.common.collect.Maps.newConcurrentMap; +import static java.lang.Boolean.getBoolean; import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly; import static org.apache.jackrabbit.oak.plugins.segment.SegmentVersion.V_11; import static org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.BLOCK_SIZE; @@ -163,7 +164,9 @@ public class Segment { * Template records read from segment. Used to avoid duplicate * copies and repeated parsing of the same templates. */ - private final ConcurrentMap<Integer, Template> templates = newConcurrentMap(); + private final ConcurrentMap<Integer, Template> templates; + + private static final boolean DISABLE_TEMPLATE_CACHE = getBoolean("oak.segment.disableTemplateCache"); private volatile long accessed; @@ -211,6 +214,11 @@ public class Segment { strings = null; stringCache = tracker.getStringCache(); } + if (DISABLE_TEMPLATE_CACHE) { + templates = null; + } else { + templates = newConcurrentMap(); + } this.data = checkNotNull(data); if (id.isDataSegmentId()) { byte segmentVersion = data.get(3); @@ -256,6 +264,12 @@ public class Segment { strings = null; stringCache = tracker.getStringCache(); } + if (DISABLE_TEMPLATE_CACHE) { + templates = null; + } else { + templates = newConcurrentMap(); + } + this.data = ByteBuffer.wrap(checkNotNull(buffer)); this.refids = new SegmentId[SEGMENT_REFERENCE_LIMIT + 1]; this.refids[0] = id; @@ -529,6 +543,9 @@ public class Segment { } private Template readTemplate(int offset) { + if (templates == null) { + return loadTemplate(offset); + } Template template = templates.get(offset); if (template == null) { template = loadTemplate(offset);
