Skip to content

Commit

Permalink
Fix NPE when compacting last level
Browse files Browse the repository at this point in the history
Fixes #99
  • Loading branch information
pcmind authored and dain committed Feb 19, 2019
1 parent b2ac727 commit beb0f5a
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 6 deletions.
8 changes: 3 additions & 5 deletions leveldb/src/main/java/org/iq80/leveldb/impl/Compaction.java
Expand Up @@ -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;

Expand Down Expand Up @@ -67,7 +69,7 @@ public Compaction(Version inputVersion, int level, List<FileMetaData> 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};
}
Expand Down Expand Up @@ -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) {
Expand Down
Expand Up @@ -596,7 +596,7 @@ private Compaction setupOtherInputs(int level, List<FileMetaData> levelInputs)

// Compute the set of grandparent files that overlap this compaction
// (parent == level+1; grandparent == level+2)
List<FileMetaData> grandparents = null;
List<FileMetaData> grandparents = ImmutableList.of();
if (level + 2 < NUM_LEVELS) {
grandparents = getOverlappingInputs(level + 2, allStart, allLimit);
}
Expand Down

0 comments on commit beb0f5a

Please sign in to comment.