diff --git oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java index 2f6abca..31fdc9b 100644 --- oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java +++ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java @@ -815,7 +815,9 @@ class TarReader implements Closeable { log.debug("Cleaning up {}", name); Set cleaned = newHashSet(); - int size = 0; + int sweptEntriesSize = 0; + int currentEntriesSize = 0; + int count = 0; TarEntry[] entries = getEntries(); for (int i = 0; i < entries.length; i++) { @@ -825,25 +827,25 @@ class TarReader implements Closeable { cleaned.add(id); entries[i] = null; } else { - size += getEntrySize(entry.size()); + sweptEntriesSize += getEntrySize(entry.size()); count += 1; } + + currentEntriesSize += getEntrySize(entry.size());; } - size += getEntrySize(TarEntry.SIZE * count + 16); - size += 2 * BLOCK_SIZE; - + if (count == 0) { log.debug("None of the entries of {} are referenceable.", name); logCleanedSegments(cleaned); return null; } - if (size >= access.length() * 3 / 4 && hasGraph()) { + if (sweptEntriesSize >= currentEntriesSize * 3 / 4 && hasGraph()) { // the space savings are not worth it at less than 25%, // unless this tar file lacks a pre-compiled segment graph // in which case we'll always generate a new tar file with // the graph to speed up future garbage collection runs. log.debug("Not enough space savings. ({}/{}). Skipping clean up of {}", - access.length() - size, access.length(), name); + access.length() - sweptEntriesSize, access.length(), name); return this; } if (!hasGraph()) {