Index: src/main/java/org/apache/jackrabbit/oak/plugins/segment/PersistedCompactionMap.java =================================================================== --- src/main/java/org/apache/jackrabbit/oak/plugins/segment/PersistedCompactionMap.java (revision 1707677) +++ src/main/java/org/apache/jackrabbit/oak/plugins/segment/PersistedCompactionMap.java (working copy) @@ -99,7 +99,7 @@ return recordId; } - return get(store.getTracker(), entries, uuid, offset); + return entries == null ? null : get(store.getTracker(), entries, uuid, offset); } @CheckForNull @@ -178,7 +178,7 @@ return; } - SegmentWriter writer = store.createSegmentWriter(); + SegmentWriter writer = null; Map segmentIdMap = newHashMap(); for (Entry recentEntry : recent.entrySet()) { UUID uuid = recentEntry.getKey(); @@ -192,6 +192,10 @@ MapEntry baseEntry = entries == null ? null : entries.getEntry(uuid.toString()); base = baseEntry == null ? null : new MapRecord(baseEntry.getValue()); + if (writer == null) { + writer = store.createSegmentWriter(); + } + Map offsetMap = newHashMap(); for (int k = 0; k < newSegment.size(); k++) { offsetMap.put(String.valueOf(newSegment.getKey(k)), @@ -212,15 +216,25 @@ } } - RecordId previousBaseId = entries == null ? null : entries.getRecordId(); - entries = writer.writeMap(entries, segmentIdMap); - entries.getSegment().getSegmentId().pin(); - String mapInfo = PERSISTED_COMPACTION_MAP + '{' + - "id=" + entries.getRecordId() + - ", baseId=" + previousBaseId + '}'; - writer.writeString(mapInfo); - writer.flush(); - recent.clear(); + if (!segmentIdMap.isEmpty()) { + if (writer == null) { + writer = store.createSegmentWriter(); + } + + RecordId previousBaseId = entries == null ? null : entries.getRecordId(); + entries = writer.writeMap(entries, segmentIdMap); + entries.getSegment().getSegmentId().pin(); + String mapInfo = PERSISTED_COMPACTION_MAP + '{' + + "id=" + entries.getRecordId() + + ", baseId=" + previousBaseId + '}'; + writer.writeString(mapInfo); + writer.flush(); + recent.clear(); + } + + if (recordCount == 0) { + entries = null; + } } /**