You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by sa...@apache.org on 2016/08/05 21:03:02 UTC
[03/50] [abbrv] phoenix git commit: PHOENIX-3021 Using local index
during compaction is producing NPE(Sergey Soldatov)
PHOENIX-3021 Using local index during compaction is producing NPE(Sergey Soldatov)
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo
Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/1a05421a
Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/1a05421a
Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/1a05421a
Branch: refs/heads/encodecolumns
Commit: 1a05421a3e968e0aaeee9a9d76f10f08bd6b3ae0
Parents: 7fcdf96
Author: Rajeshbabu Chintaguntla <ra...@apache.org>
Authored: Wed Jul 13 18:46:51 2016 +0530
Committer: Rajeshbabu Chintaguntla <ra...@apache.org>
Committed: Wed Jul 13 18:46:51 2016 +0530
----------------------------------------------------------------------
.../IndexHalfStoreFileReaderGenerator.java | 87 ++++++++++++++------
1 file changed, 61 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/phoenix/blob/1a05421a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
index 9861cad..3bbc3df 100644
--- a/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
+++ b/phoenix-core/src/main/java/org/apache/hadoop/hbase/regionserver/IndexHalfStoreFileReaderGenerator.java
@@ -28,6 +28,7 @@ import java.util.NavigableSet;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
@@ -244,36 +245,70 @@ public class IndexHalfStoreFileReaderGenerator extends BaseRegionObserver {
if (store.getFamily().getNameAsString()
.startsWith(QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)
&& store.hasReferences()) {
- long readPt = c.getEnvironment().getRegion().getReadpoint(scan.getIsolationLevel());
- boolean scanUsePread = c.getEnvironment().getConfiguration().getBoolean("hbase.storescanner.use.pread", scan.isSmall());
- Collection<StoreFile> storeFiles = store.getStorefiles();
- List<StoreFile> nonReferenceStoreFiles = new ArrayList<StoreFile>(store.getStorefiles().size());
- List<StoreFile> referenceStoreFiles = new ArrayList<StoreFile>(store.getStorefiles().size());
- List<KeyValueScanner> keyValueScanners = new ArrayList<KeyValueScanner>(store.getStorefiles().size()+1);
- for(StoreFile storeFile : storeFiles) {
- if (storeFile.isReference()) {
- referenceStoreFiles.add(storeFile);
- } else {
- nonReferenceStoreFiles.add(storeFile);
- }
- }
- List<StoreFileScanner> scanners = StoreFileScanner.getScannersForStoreFiles(nonReferenceStoreFiles, scan.getCacheBlocks(), scanUsePread, readPt);
- keyValueScanners.addAll(scanners);
- for(StoreFile sf : referenceStoreFiles) {
- if(sf.getReader() instanceof IndexHalfStoreFileReader) {
- keyValueScanners.add(new LocalIndexStoreFileScanner(sf.getReader(), sf.getReader()
+ final long readPt = c.getEnvironment().getRegion().getReadpoint(scan.getIsolationLevel
+ ());
+ if (!scan.isReversed()) {
+ return new StoreScanner(store, store.getScanInfo(), scan,
+ targetCols, readPt) {
+
+ @Override
+ protected List<KeyValueScanner> getScannersNoCompaction() throws IOException {
+ if (store.hasReferences()) {
+ return getLocalIndexScanners(c, store, scan, readPt);
+ } else {
+ return super.getScannersNoCompaction();
+ }
+ }
+ };
+ } else {
+ return new ReversedStoreScanner(store, store.getScanInfo(), scan,
+ targetCols, readPt) {
+ @Override
+ protected List<KeyValueScanner> getScannersNoCompaction() throws IOException {
+ if (store.hasReferences()) {
+ return getLocalIndexScanners(c, store, scan, readPt);
+ } else {
+ return super.getScannersNoCompaction();
+ }
+ }
+ };
+ }
+ }
+ return s;
+ }
+
+ private List<KeyValueScanner> getLocalIndexScanners(final
+ ObserverContext<RegionCoprocessorEnvironment> c,
+ final Store store, final Scan scan, final long readPt) throws IOException {
+
+ boolean scanUsePread = c.getEnvironment().getConfiguration().getBoolean("hbase.storescanner.use.pread", scan.isSmall());
+ Collection<StoreFile> storeFiles = store.getStorefiles();
+ List<StoreFile> nonReferenceStoreFiles = new ArrayList<>(store.getStorefiles().size());
+ List<StoreFile> referenceStoreFiles = new ArrayList<>(store.getStorefiles().size
+ ());
+ final List<KeyValueScanner> keyValueScanners = new ArrayList<>(store
+ .getStorefiles().size() + 1);
+ for (StoreFile storeFile : storeFiles) {
+ if (storeFile.isReference()) {
+ referenceStoreFiles.add(storeFile);
+ } else {
+ nonReferenceStoreFiles.add(storeFile);
+ }
+ }
+ final List<StoreFileScanner> scanners = StoreFileScanner.getScannersForStoreFiles(nonReferenceStoreFiles, scan.getCacheBlocks(), scanUsePread, readPt);
+ keyValueScanners.addAll(scanners);
+ for (StoreFile sf : referenceStoreFiles) {
+ if (sf.getReader() instanceof IndexHalfStoreFileReader) {
+ keyValueScanners.add(new LocalIndexStoreFileScanner(sf.getReader(), sf.getReader()
.getScanner(scan.getCacheBlocks(), scanUsePread, false), true, sf
.getReader().getHFileReader().hasMVCCInfo(), readPt));
- } else {
- keyValueScanners.add(new StoreFileScanner(sf.getReader(), sf.getReader()
+ } else {
+ keyValueScanners.add(new StoreFileScanner(sf.getReader(), sf.getReader()
.getScanner(scan.getCacheBlocks(), scanUsePread, false), true, sf
.getReader().getHFileReader().hasMVCCInfo(), readPt));
- }
}
- keyValueScanners.addAll(((HStore)store).memstore.getScanners(readPt));
- if(!scan.isReversed()) return new StoreScanner(scan, store.getScanInfo(), ScanType.USER_SCAN, targetCols, keyValueScanners);
- return new ReversedStoreScanner(scan, store.getScanInfo(), ScanType.USER_SCAN, targetCols, keyValueScanners);
- }
- return s;
+ }
+ keyValueScanners.addAll(((HStore) store).memstore.getScanners(readPt));
+ return keyValueScanners;
}
}