[
https://issues.apache.org/jira/browse/PHOENIX-3585?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15837216#comment-15837216
]
Thomas D'Silva commented on PHOENIX-3585:
-----------------------------------------
[~rajeshbabu]
The test was failing TransactionProcessor.preCompactScannerOpen runs first
(because it has a higher priority) and returns an internal scanner which gets
passed into the IndexHalfStoreFileReaderGenerator.preCompactScannerOpen() call
as the InternalScanner so the LocalIndexStoreFileScanner is never created.
{code}
@Override
public InternalScanner
preCompactScannerOpen(ObserverContext<RegionCoprocessorEnvironment> c,
Store store, List<? extends KeyValueScanner> scanners, ScanType
scanType,
long earliestPutTs, InternalScanner s, CompactionRequest request)
throws IOException {
if (!store.getFamily().getNameAsString()
.startsWith(QueryConstants.LOCAL_INDEX_COLUMN_FAMILY_PREFIX)
|| s != null // -----> returns here
|| !store.hasReferences()) {
return s;
}
List<StoreFileScanner> newScanners = new
ArrayList<StoreFileScanner>(scanners.size());
Scan scan = new Scan();
scan.setMaxVersions(store.getFamily().getMaxVersions());
boolean scanUsePread =
c.getEnvironment().getConfiguration().getBoolean("hbase.storescanner.use.pread",
scan.isSmall());
for(KeyValueScanner scanner: scanners) {
Reader reader = ((StoreFileScanner) scanner).getReaderForTesting();
if (reader instanceof IndexHalfStoreFileReader) {
newScanners.add(new LocalIndexStoreFileScanner(reader,
reader.getScanner(
scan.getCacheBlocks(), scanUsePread, false), true,
reader.getHFileReader()
.hasMVCCInfo(), store.getSmallestReadPoint()));
} else {
newScanners.add(((StoreFileScanner) scanner));
}
}
return new StoreScanner(store, store.getScanInfo(), scan, newScanners,
scanType, store.getSmallestReadPoint(), earliestPutTs);
}
{code}
[~jamestaylor]
The TransactionProcessor creates a scan with a filter to filter out invalid
data. Do you see any way we can combine the StoreScanner from the
TransactionProcessor with that created in IndexHalfStoreFileReaderGenerator
{code}
protected InternalScanner createStoreScanner(RegionCoprocessorEnvironment env,
String action,
TransactionVisibilityState
snapshot, Store store,
List<? extends KeyValueScanner>
scanners, ScanType type,
long earliestPutTs) throws
IOException {
if (snapshot == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Region " + env.getRegion().getRegionNameAsString() +
", no current transaction state found, defaulting to normal
" + action + " scanner");
}
return null;
}
// construct a dummy transaction from the latest snapshot
Transaction dummyTx = TxUtils.createDummyTransaction(snapshot);
Scan scan = new Scan();
// need to see all versions, since we filter out excludes and applications
may rely on multiple versions
scan.setMaxVersions();
scan.setFilter(
new IncludeInProgressFilter(dummyTx.getVisibilityUpperBound(),
snapshot.getInvalid(),
getTransactionFilter(dummyTx, type, null)));
return new StoreScanner(store, store.getScanInfo(), scan, scanners,
type, store.getSmallestReadPoint(), earliestPutTs);
}
{code}
> MutableIndexIT testSplitDuringIndexScan and testIndexHalfStoreFileReader fail
> for transactional tables and local indexes
> ------------------------------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-3585
> URL: https://issues.apache.org/jira/browse/PHOENIX-3585
> Project: Phoenix
> Issue Type: Bug
> Reporter: Thomas D'Silva
> Attachments: diff.patch
>
>
> the tests fail if we use HDFSTransactionStateStorage instead of
> InMemoryTransactionStateStorage when we create the TransactionManager in
> BaseTest
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)