diff --git a/leveldb/src/main/java/org/iq80/leveldb/impl/Compaction.java b/leveldb/src/main/java/org/iq80/leveldb/impl/Compaction.java index f0699b7a..672fc8d7 100644 --- a/leveldb/src/main/java/org/iq80/leveldb/impl/Compaction.java +++ b/leveldb/src/main/java/org/iq80/leveldb/impl/Compaction.java @@ -17,12 +17,14 @@ */ package org.iq80.leveldb.impl; +import com.google.common.collect.ImmutableList; import org.iq80.leveldb.table.UserComparator; import org.iq80.leveldb.util.Slice; import java.util.List; import static com.google.common.base.Preconditions.checkArgument; +import static java.util.Objects.requireNonNull; import static org.iq80.leveldb.impl.DbConstants.NUM_LEVELS; import static org.iq80.leveldb.impl.VersionSet.MAX_GRAND_PARENT_OVERLAP_BYTES; @@ -67,7 +69,7 @@ public Compaction(Version inputVersion, int level, List levelInput this.level = level; this.levelInputs = levelInputs; this.levelUpInputs = levelUpInputs; - this.grandparents = grandparents; + this.grandparents = ImmutableList.copyOf(requireNonNull(grandparents, "grandparents is null")); this.maxOutputFileSize = VersionSet.maxFileSizeForLevel(level); this.inputs = new List[] {levelInputs, levelUpInputs}; } @@ -172,10 +174,6 @@ public boolean isBaseLevelForKey(Slice userKey) // before processing "internal_key". public boolean shouldStopBefore(InternalKey internalKey) { - if (grandparents == null) { - return false; - } - // Scan to find earliest grandparent file that contains key. InternalKeyComparator internalKeyComparator = inputVersion.getInternalKeyComparator(); while (grandparentIndex < grandparents.size() && internalKeyComparator.compare(internalKey, grandparents.get(grandparentIndex).getLargest()) > 0) { diff --git a/leveldb/src/main/java/org/iq80/leveldb/impl/VersionSet.java b/leveldb/src/main/java/org/iq80/leveldb/impl/VersionSet.java index f554d82d..22f9bc57 100755 --- a/leveldb/src/main/java/org/iq80/leveldb/impl/VersionSet.java +++ b/leveldb/src/main/java/org/iq80/leveldb/impl/VersionSet.java @@ -596,7 +596,7 @@ private Compaction setupOtherInputs(int level, List levelInputs) // Compute the set of grandparent files that overlap this compaction // (parent == level+1; grandparent == level+2) - List grandparents = null; + List grandparents = ImmutableList.of(); if (level + 2 < NUM_LEVELS) { grandparents = getOverlappingInputs(level + 2, allStart, allLimit); }