HBASE-13970 NPE during compaction in trunk
This commit is contained in:
parent
272b025b25
commit
28a035000f
|
@ -23,6 +23,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
import org.apache.commons.logging.Log;
|
||||||
import org.apache.commons.logging.LogFactory;
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
@ -221,6 +222,24 @@ public abstract class Compactor {
|
||||||
return store.getCoprocessorHost().preCompact(store, scanner, scanType, request);
|
return store.getCoprocessorHost().preCompact(store, scanner, scanType, request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to prevent compaction name conflict when multiple compactions running parallel on the
|
||||||
|
* same store.
|
||||||
|
*/
|
||||||
|
private static final AtomicInteger NAME_COUNTER = new AtomicInteger(0);
|
||||||
|
|
||||||
|
private String generateCompactionName() {
|
||||||
|
int counter;
|
||||||
|
for (;;) {
|
||||||
|
counter = NAME_COUNTER.get();
|
||||||
|
int next = counter == Integer.MAX_VALUE ? 0 : counter + 1;
|
||||||
|
if (NAME_COUNTER.compareAndSet(counter, next)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return store.getRegionInfo().getRegionNameAsString() + "#"
|
||||||
|
+ store.getFamily().getNameAsString() + "#" + counter;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* Performs the compaction.
|
* Performs the compaction.
|
||||||
* @param scanner Where to read from.
|
* @param scanner Where to read from.
|
||||||
|
@ -242,8 +261,7 @@ public abstract class Compactor {
|
||||||
if (LOG.isDebugEnabled()) {
|
if (LOG.isDebugEnabled()) {
|
||||||
lastMillis = EnvironmentEdgeManager.currentTime();
|
lastMillis = EnvironmentEdgeManager.currentTime();
|
||||||
}
|
}
|
||||||
String compactionName =
|
String compactionName = generateCompactionName();
|
||||||
store.getRegionInfo().getRegionNameAsString() + "#" + store.getFamily().getNameAsString();
|
|
||||||
long now = 0;
|
long now = 0;
|
||||||
boolean hasMore;
|
boolean hasMore;
|
||||||
ScannerContext scannerContext =
|
ScannerContext scannerContext =
|
||||||
|
|
Loading…
Reference in New Issue