Author: mduerig
Date: Wed Feb 3 16:47:15 2016
New Revision: 1728341
URL: http://svn.apache.org/viewvc?rev=1728341&view=rev
Log:
OAK-3978: Add segment size to segment graph
Add additional column for the segment sizes in nodedef
Modified:
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraph.java
Modified:
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraph.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraph.java?rev=1728341&r1=1728340&r2=1728341&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraph.java
(original)
+++
jackrabbit/oak/trunk/oak-segment/src/main/java/org/apache/jackrabbit/oak/plugins/segment/SegmentGraph.java
Wed Feb 3 16:47:15 2016
@@ -23,6 +23,7 @@ import static com.google.common.base.Pre
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.collect.Maps.newHashMap;
import static com.google.common.collect.Sets.newHashSet;
+import static java.lang.String.valueOf;
import static java.util.Collections.singletonMap;
import static java.util.regex.Pattern.compile;
import static org.apache.jackrabbit.oak.commons.IOUtils.closeQuietly;
@@ -167,7 +168,7 @@ public final class SegmentGraph {
Graph<UUID> segmentGraph = parseSegmentGraph(fileStore, filter);
Graph<UUID> headGraph = parseHeadGraph(root.getRecordId());
- writer.write("nodedef>name VARCHAR, label VARCHAR, type VARCHAR,
wid VARCHAR, gc INT, t INT, head BOOLEAN\n");
+ writer.write("nodedef>name VARCHAR, label VARCHAR, type VARCHAR,
wid VARCHAR, gc INT, t INT, size INT, head BOOLEAN\n");
for (UUID segment : segmentGraph.vertices()) {
writeNode(segment, writer, headGraph.containsVertex(segment),
epoch, fileStore.getTracker());
}
@@ -472,6 +473,7 @@ public final class SegmentGraph {
"," + sInfo.get("wid") +
"," + sInfo.get("gc") +
"," + ts +
+ "," + sInfo.get("size") +
"," + inHead + "\n");
}
}
@@ -493,38 +495,75 @@ public final class SegmentGraph {
}
private static Map<String, String> getSegmentInfoMap(UUID segment,
SegmentTracker tracker) {
- try {
- String info = getSegmentInfo(segment, tracker);
- if (info != null) {
- JsopTokenizer tokenizer = new JsopTokenizer(info);
- tokenizer.read('{');
- return JsonObject.create(tokenizer).getProperties();
+ return new SegmentInfo(segment, tracker).getInfoMap();
+ }
+
+ private static String getSegmentInfo(UUID segment, SegmentTracker tracker)
{
+ return new SegmentInfo(segment, tracker).getInfo();
+ }
+
+ private static class SegmentInfo {
+ private final UUID uuid;
+ private final SegmentTracker tracker;
+
+ private SegmentId id;
+
+ SegmentInfo(UUID uuid, SegmentTracker tracker) {
+ this.uuid = uuid;
+ this.tracker = tracker;
+ }
+
+ boolean isData() {
+ return isDataSegmentId(uuid.getLeastSignificantBits());
+ }
+
+ SegmentId getSegmentId() {
+ if (id == null) {
+ id = tracker.getSegmentId(
+ uuid.getMostSignificantBits(),
uuid.getLeastSignificantBits());
+ }
+ return id;
+ }
+
+ int getSize() {
+ return getSegmentId().getSegment().size();
+ }
+
+ String getInfo() {
+ if (isData()) {
+ return getSegmentId().getSegment().getSegmentInfo();
} else {
return null;
}
- } catch (SegmentNotFoundException e) {
- return singletonMap("error", toString(e));
}
- }
- private static String getSegmentInfo(UUID segment, SegmentTracker tracker)
{
- if (isDataSegmentId(segment.getLeastSignificantBits())) {
- SegmentId id = tracker.getSegmentId(segment.getMostSignificantBits(),
segment.getLeastSignificantBits());
- return id.getSegment().getSegmentInfo();
- } else {
- return null;
+ Map<String, String> getInfoMap() {
+ try {
+ Map<String, String> infoMap = newHashMap();
+ String info = getInfo();
+ if (info != null) {
+ JsopTokenizer tokenizer = new JsopTokenizer(info);
+ tokenizer.read('{');
+
infoMap.putAll(JsonObject.create(tokenizer).getProperties());
+ }
+ infoMap.put("size", valueOf(getSize()));
+ return infoMap;
+ } catch (SegmentNotFoundException e) {
+ return singletonMap("error", toString(e));
+ }
}
- }
- private static String toString(Throwable e) {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw, true);
- try {
- e.printStackTrace(pw);
- return sw.toString();
- } finally {
- pw.close();
+ private static String toString(Throwable e) {
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw, true);
+ try {
+ e.printStackTrace(pw);
+ return sw.toString();
+ } finally {
+ pw.close();
+ }
}
+
}
}