You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2013/11/19 05:14:27 UTC
svn commit: r1543305 - in /hbase/trunk/hbase-server/src:
main/java/org/apache/hadoop/hbase/regionserver/
main/java/org/apache/hadoop/hbase/util/
test/java/org/apache/hadoop/hbase/regionserver/
Author: tedyu
Date: Tue Nov 19 04:14:26 2013
New Revision: 1543305
URL: http://svn.apache.org/r1543305
Log:
HBASE-9949 Addendum takes out test infrastructure and new test
Removed:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/InjectionEvent.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/util/InjectionHandler.java
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java?rev=1543305&r1=1543304&r2=1543305&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java Tue Nov 19 04:14:26 2013
@@ -67,7 +67,6 @@ import org.apache.hadoop.hbase.io.hfile.
import org.apache.hadoop.hbase.monitoring.MonitoredTask;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.protobuf.generated.WALProtos.CompactionDescriptor;
-import org.apache.hadoop.hbase.regionserver.StoreScanner.StoreScannerCompactionRace;
import org.apache.hadoop.hbase.regionserver.compactions.CompactionContext;
import org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress;
import org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest;
@@ -78,8 +77,6 @@ import org.apache.hadoop.hbase.util.Byte
import org.apache.hadoop.hbase.util.ChecksumType;
import org.apache.hadoop.hbase.util.ClassSize;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-import org.apache.hadoop.hbase.util.InjectionEvent;
-import org.apache.hadoop.hbase.util.InjectionHandler;
import org.apache.hadoop.util.StringUtils;
import com.google.common.annotations.VisibleForTesting;
@@ -1424,8 +1421,6 @@ public class HStore implements Store {
// scenario that could have happened if continue to hold the lock.
notifyChangedReadersObservers();
// At this point the store will use new files for all scanners.
- InjectionHandler.processEvent(InjectionEvent.STORESCANNER_COMPACTION_RACE, new Object[] {
- StoreScannerCompactionRace.BEFORE_SEEK.ordinal()});
// let the archive util decide if we should archive or delete the files
LOG.debug("Removing store files after compaction...");
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java?rev=1543305&r1=1543304&r2=1543305&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java Tue Nov 19 04:14:26 2013
@@ -41,8 +41,6 @@ import org.apache.hadoop.hbase.filter.Fi
import org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
-import org.apache.hadoop.hbase.util.InjectionEvent;
-import org.apache.hadoop.hbase.util.InjectionHandler;
/**
* Scanner scans both the memstore and the Store. Coalesce KeyValue stream
@@ -172,8 +170,6 @@ public class StoreScanner extends NonLaz
// key does not exist, then to the start of the next matching Row).
// Always check bloom filter to optimize the top row seek for delete
// family marker.
- InjectionHandler.processEvent(InjectionEvent.STORESCANNER_COMPACTION_RACE, new Object[] {
- StoreScannerCompactionRace.BEFORE_SEEK.ordinal()});
if (explicitColumnQuery && lazySeekEnabledGlobally) {
for (KeyValueScanner scanner : scanners) {
scanner.requestSeek(matcher.getStartKey(), false, true);
@@ -196,8 +192,6 @@ public class StoreScanner extends NonLaz
// Combine all seeked scanners with a heap
heap = new KeyValueHeap(scanners, store.getComparator());
- InjectionHandler.processEvent(InjectionEvent.STORESCANNER_COMPACTION_RACE, new Object[] {
- StoreScannerCompactionRace.AFTER_SEEK.ordinal()});
}
/**
@@ -252,8 +246,6 @@ public class StoreScanner extends NonLaz
// Filter the list of scanners using Bloom filters, time range, TTL, etc.
scanners = selectScannersFrom(scanners);
- InjectionHandler.processEvent(InjectionEvent.STORESCANNER_COMPACTION_RACE, new Object[] {
- StoreScannerCompactionRace.BEFORE_SEEK.ordinal()});
// Seek all scanners to the initial key
if (!isParallelSeekEnabled) {
for (KeyValueScanner scanner : scanners) {
@@ -265,8 +257,6 @@ public class StoreScanner extends NonLaz
// Combine all seeked scanners with a heap
heap = new KeyValueHeap(scanners, store.getComparator());
- InjectionHandler.processEvent(InjectionEvent.STORESCANNER_COMPACTION_RACE, new Object[] {
- StoreScannerCompactionRace.AFTER_SEEK.ordinal()});
}
/** Constructor for testing. */
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java?rev=1543305&r1=1543304&r2=1543305&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestStoreScanner.java Tue Nov 19 04:14:26 2013
@@ -42,12 +42,9 @@ import org.apache.hadoop.hbase.KeyValueT
import org.apache.hadoop.hbase.MediumTests;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Scan;
-import org.apache.hadoop.hbase.regionserver.StoreScanner.StoreScannerCompactionRace;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.util.EnvironmentEdge;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManagerTestHelper;
-import org.apache.hadoop.hbase.util.InjectionEvent;
-import org.apache.hadoop.hbase.util.InjectionHandler;
import org.apache.hadoop.hbase.util.Threads;
import org.junit.experimental.categories.Category;
@@ -511,110 +508,6 @@ public class TestStoreScanner extends Te
assertEquals(false, scanner.next(results));
}
- private class StoreScannerCompactionRaceCondition extends InjectionHandler {
- final Store store;
- Boolean beforeSeek = false;
- Boolean afterSeek = false;
- Boolean compactionComplete = false;
- final int waitTime;
- boolean doneSeeking = false;
- public Future<Void> f;
- StoreScannerCompactionRaceCondition(Store s, int waitTime) {
- this.store = s;
- this.waitTime = waitTime;
- }
-
- protected void _processEvent(InjectionEvent event, Object... args) {
- if (event == InjectionEvent.STORESCANNER_COMPACTION_RACE) {
- // To prevent other scanners which are not supposed to be tested from taking this code path.
- if ((args instanceof Object[]) && (args.length == 1)
- && (args[0] instanceof Integer)) {
- StoreScannerCompactionRace sscr = StoreScannerCompactionRace.values()[(Integer)args[0]];
- switch (sscr) {
- case BEFORE_SEEK :
- // Inside StoreScanner ctor before seek.
- synchronized (beforeSeek) {
- if (!beforeSeek) {
- beforeSeek = true;
- f = Executors.newSingleThreadExecutor().submit(new Callable<Void>() {
- @Override
- public Void call() throws Exception {
- StoreScanner.enableLazySeekGlobally(false);
- ((HStore)store).compactRecentForTestingAssumingDefaultPolicy(
- store.getStorefiles().size() / 2);
- StoreScanner.enableLazySeekGlobally(true);
- return null;
- }
- });
- Threads.sleep(waitTime);
- }
- }
- break;
- case AFTER_SEEK:
- // Inside StoreScanner ctor after seek.
- synchronized (afterSeek) {
- if (!afterSeek) {
- afterSeek = true;
- this.doneSeeking = true;
- }
- }
- break;
- case COMPACT_COMPLETE:
- // Inside HStore.completeCompaction
- synchronized (compactionComplete) {
- if (!compactionComplete) {
- compactionComplete = true;
- assertTrue(doneSeeking);
- }
- }
- break;
- }
- }
- }
- }
- }
-
- /*
- * Verifies that there is no race condition between StoreScanner construction and compaction.
- * This is done through 3 injection points:
- * 1. before seek operation in StoreScanner ctor
- * 2. after seek operation in StoreScanner ctor
- * 3. after compaction completion
- */
- public void testCompactionRaceCondition() throws Exception {
- HBaseTestingUtility util = new HBaseTestingUtility();
- util.startMiniCluster(1);
- byte[] t = Bytes.toBytes("tbl"), cf = Bytes.toBytes("cf");
- HTable table = util.createTable(t, cf);
- util.loadTable(table, cf);
- util.flush();
- util.loadTable(table, cf);
- util.flush();
- List<HRegion> regions = util.getHBaseCluster().getRegions(t);
- assertTrue(regions.size() == 1);
- HRegion r = regions.get(0);
- Store s = r.getStore(cf);
-
- // Setup the injection handler.
- StoreScannerCompactionRaceCondition ih =
- new StoreScannerCompactionRaceCondition(s, 5);
- InjectionHandler.set(ih);
-
- // Create a StoreScanner
- TreeSet<byte[]> set = new TreeSet<byte[]>(Bytes.BYTES_COMPARATOR);
- set.add(cf);
- Scan scanSpec = new Scan();
- scanSpec.setStartRow(Bytes.toBytes("hjfsd"));
- scanSpec.setStartRow(Bytes.toBytes("zjfsd"));
- KeyValueScanner scanner = s.getScanner(scanSpec, set, s.getSmallestReadPoint());
- ih.f.get();
-
- // Clear injection handling and shutdown the minicluster.
- InjectionHandler.clear();
- scanner.close();
- util.shutdownMiniCluster();
- }
-
public void testDeleteMarkerLongevity() throws Exception {
try {
final long now = System.currentTimeMillis();