Index: src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/CompactionGainEstimate.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/CompactionGainEstimate.java (revision 1642996) +++ src/main/java/org/apache/jackrabbit/oak/plugins/segment/file/CompactionGainEstimate.java (working copy) @@ -29,13 +29,14 @@ import org.apache.jackrabbit.oak.plugins.segment.SegmentBlob; import org.apache.jackrabbit.oak.plugins.segment.SegmentId; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeState; +import org.apache.jackrabbit.oak.plugins.segment.SegmentPropertyState; import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry; import com.google.common.hash.BloomFilter; import com.google.common.hash.Funnel; import com.google.common.hash.PrimitiveSink; -class CompactionGainEstimate implements TarEntryVisitor { +public class CompactionGainEstimate implements TarEntryVisitor { private static final Funnel UUID_FUNNEL = new Funnel() { @Override @@ -60,11 +61,15 @@ Set visited) { ThinRecordId tr = ThinRecordId.apply(node.getRecordId()); if (!visited.contains(tr)) { + uuids.put(asUUID(node.getRecordId().getSegmentId())); for (PropertyState property : node.getProperties()) { + if (property instanceof SegmentPropertyState) { + uuids.put(asUUID(((SegmentPropertyState) property) + .getRecordId().getSegmentId())); + } for (Blob blob : property.getValue(BINARIES)) { for (SegmentId id : SegmentBlob.getBulkSegmentIds(blob)) { - uuids.put(new UUID(id.getMostSignificantBits(), id - .getLeastSignificantBits())); + uuids.put(asUUID(id)); } } } @@ -76,6 +81,11 @@ } } + private static UUID asUUID(SegmentId id) { + return new UUID(id.getMostSignificantBits(), + id.getLeastSignificantBits()); + } + /** * Returns a percentage estimate (scale 0-100) for how much disk space * running compaction (and cleanup) could potentially release. @@ -103,8 +113,7 @@ public void visit(long msb, long lsb, File file, int offset, int size) { int entrySize = TarReader.getEntrySize(size); totalSize += entrySize; - if (SegmentId.isDataSegmentId(lsb) - || uuids.mightContain(new UUID(msb, lsb))) { + if (uuids.mightContain(new UUID(msb, lsb))) { reachableSize += entrySize; } }