[ 
https://issues.apache.org/jira/browse/PHOENIX-2647?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ankit Singhal updated PHOENIX-2647:
-----------------------------------
    Attachment: PHOENIX-2647.patch

[~jamestaylor] , PFA, patch for review.

Actually start key created for reverse scan seems to be crossing region 
boundaries.
As they are altered/reversed at the server level so scan doesn't mind when 
reading complete region as they are gonna read till boundaries only  but it 
affects when scan is within region.

[[email protected]], the problem is basically seen with a 
reverse scan done with specific range in a region only and can affect queries 
without guidePosts also . example like below.

{code}
    @Test
    public void testReverseScanForSpecificRangeInRegion() throws Exception {
        Connection conn;
        ResultSet rs;
        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
        conn = DriverManager.getConnection(getUrl(), props);
        conn.createStatement()
                .execute("CREATE TABLE T" + " ( k VARCHAR, c1.a bigint,c2.b 
bigint CONSTRAINT pk PRIMARY KEY (k)) ");
        conn.createStatement().execute("upsert into T values ('a',1,3)");
        conn.createStatement().execute("upsert into T values ('b',1,3)");
        conn.createStatement().execute("upsert into T values ('c',1,3)");
        conn.createStatement().execute("upsert into T values ('d',1,3)");
        conn.createStatement().execute("upsert into T values ('e',1,3)");
        conn.commit();
        rs = conn.createStatement().executeQuery("SELECT k FROM T where k>'b' 
and k<'d' order by k desc");
        assertTrue(rs.next());
        assertEquals("c", rs.getString(1));
        assertTrue(!rs.next());
        conn.close();
    }

{code}

> Duplicate results in reverse scan when guideposts are traversed
> ---------------------------------------------------------------
>
>                 Key: PHOENIX-2647
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2647
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.4.0
>            Reporter: Maryann Xue
>            Assignee: Ankit Singhal
>             Fix For: 4.7.0
>
>         Attachments: PHOENIX-2647.patch, PHOENIX-2647_wip.patch
>
>
> This problem seems to only occur with reverse scan not forward scan. Adding 
> the below tests and settings in OrderByIT can reproduce the issue. I ended up 
> getting two rows of "ROW7" instead of one.
> {code}
>     
>     @BeforeClass
>     public static void doSetup() throws Exception {
>         Map<String,String> props = getDefaultProps();
>         props.put(QueryServices.RUN_UPDATE_STATS_ASYNC, 
> Boolean.FALSE.toString());
>         props.put(QueryServices.COMMIT_STATS_ASYNC, Boolean.FALSE.toString());
>         props.put(QueryServices.STATS_GUIDEPOST_WIDTH_BYTES_ATTRIB, 
> Long.toString(1000));
>         setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator()));
>     }
>     @Test
>     public void testReverseScan() throws Exception {
>         long ts = nextTimestamp();
>         String tenantId = getOrganizationId();
>         initATableValues(tenantId, getDefaultSplits(tenantId), null, ts);
>         String query = "SELECT entity_id FROM aTable ORDER BY organization_id 
> desc";
>         Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
>         props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts 
> + 2)); // Execute at timestamp 2
>         Connection conn = DriverManager.getConnection(getUrl(), props);
>         conn.createStatement().execute("UPDATE STATISTICS ATABLE");
>         conn.commit();
>         conn.close();
>         props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts 
> + 5)); // Execute at timestamp 2
>         conn = DriverManager.getConnection(getUrl(), props);
>         try {
>             PreparedStatement statement = conn.prepareStatement(query);
>             ResultSet rs = statement.executeQuery();
>             assertTrue (rs.next());
>             assertEquals(ROW9,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW8,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW7,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW6,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW5,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW4,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW3,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW2,rs.getString(1));
>             assertTrue (rs.next());
>             assertEquals(ROW1,rs.getString(1));
>             assertFalse(rs.next());
>         } finally {
>             conn.close();
>         }
>     }
> {code}



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

Reply via email to