phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-2628) Ensure split when iterating through results handled correctly
Date Wed, 06 Apr 2016 01:44:25 GMT

    [ https://issues.apache.org/jira/browse/PHOENIX-2628?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15227541#comment-15227541
] 

ASF GitHub Bot commented on PHOENIX-2628:
-----------------------------------------

Github user JamesRTaylor commented on a diff in the pull request:

    https://github.com/apache/phoenix/pull/156#discussion_r58641320
  
    --- Diff: phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
---
    @@ -556,35 +564,55 @@ private static String toString(List<byte[]> gps) {
                     } else {
                         endKey = regionBoundaries.get(regionIndex);
                     }
    -                HRegionLocation regionLocation = regionLocations.get(regionIndex);
    -                if (isLocalIndex) {
    -                    HRegionInfo regionInfo = regionLocation.getRegionInfo();
    -                    endRegionKey = regionInfo.getEndKey();
    -                    keyOffset = ScanUtil.getRowKeyOffset(regionInfo.getStartKey(), endRegionKey);
    -                }
    -                try {
    -                    while (guideIndex < gpsSize && (currentGuidePost.compareTo(endKey)
<= 0 || endKey.length == 0)) {
    -                        Scan newScan = scanRanges.intersectScan(scan, currentKeyBytes,
currentGuidePostBytes, keyOffset,
    -                                false);
    -                        estimatedRows += gps.getRowCounts().get(guideIndex);
    -                        estimatedSize += gps.getByteCounts().get(guideIndex);
    -                        scans = addNewScan(parallelScans, scans, newScan, currentGuidePostBytes,
false, regionLocation);
    -                        currentKeyBytes = currentGuidePost.copyBytes();
    -                        currentGuidePost = PrefixByteCodec.decode(decoder, input);
    -                        currentGuidePostBytes = currentGuidePost.copyBytes();
    -                        guideIndex++;
    -                    }
    -                } catch (EOFException e) {}
    -                Scan newScan = scanRanges.intersectScan(scan, currentKeyBytes, endKey,
keyOffset, true);
    -                if (isLocalIndex) {
    -                    if (newScan != null) {
    -                        newScan.setAttribute(EXPECTED_UPPER_REGION_KEY, endRegionKey);
    -                    } else if (!scans.isEmpty()) {
    -                        scans.get(scans.size()-1).setAttribute(EXPECTED_UPPER_REGION_KEY,
endRegionKey);
    -                    }
    -                }
    -                scans = addNewScan(parallelScans, scans, newScan, endKey, true, regionLocation);
    -                currentKeyBytes = endKey;
    +                if (Bytes.compareTo(scan.getStartRow(), context.getScan().getStartRow())
!= 0
    +                     || Bytes.compareTo(scan.getStopRow(), context.getScan().getStopRow())
!= 0) {
    +                    Scan newScan = ScanUtil.newScan(scan);
    +                    if(ScanUtil.isLocalIndex(scan)) {
    +                        newScan.setStartRow(regionInfo.getStartKey());
    +                        newScan.setAttribute(SCAN_ACTUAL_START_ROW, regionInfo.getStartKey());
    +                        newScan.setStopRow(regionInfo.getEndKey());
    +                        newScan.setAttribute(EXPECTED_UPPER_REGION_KEY, regionInfo.getEndKey());
    +                    } else {
    +                        if(Bytes.compareTo(scan.getStartRow(), regionInfo.getStartKey())<=0)
{
    +                            newScan.setAttribute(SCAN_ACTUAL_START_ROW, regionInfo.getStartKey());
    +                            newScan.setStartRow(regionInfo.getStartKey());
    +                        }
    +                        if(scan.getStopRow().length == 0 || (regionInfo.getEndKey().length
!= 0 && Bytes.compareTo(scan.getStopRow(), regionInfo.getEndKey())>0)) {
    +                            newScan.setStopRow(regionInfo.getEndKey());
    +                        }
    +                    }   
    +                    scans = addNewScan(parallelScans, scans, newScan, endKey, true, regionLocation);
    +                 } else {
    --- End diff --
    
    Can we remove the if (isLocalIndex) checks below since the above if statement would have
been entered instead?


> Ensure split when iterating through results handled correctly
> -------------------------------------------------------------
>
>                 Key: PHOENIX-2628
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2628
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Assignee: Rajeshbabu Chintaguntla
>             Fix For: 4.8.0
>
>         Attachments: PHOENIX-2628-wip.patch, PHOENIX-2628.patch, PHOENIX-2628_v7.patch,
PHOENIX-2628_v8.patch
>
>
> We should start with a test case to ensure this works correctly, both for scans and aggregates.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message