[ 
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)

Reply via email to