You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Samarth Jain (JIRA)" <ji...@apache.org> on 2014/07/17 02:14:05 UTC

[jira] [Created] (PHOENIX-1096) Duplicate sequence values returned when doing upsert select against a salted table.

Samarth Jain created PHOENIX-1096:
-------------------------------------

             Summary: Duplicate sequence values returned when doing upsert select against a salted table.
                 Key: PHOENIX-1096
                 URL: https://issues.apache.org/jira/browse/PHOENIX-1096
             Project: Phoenix
          Issue Type: Bug
            Reporter: Samarth Jain
             Fix For: 3.0.0, 4.0.0, 5.0.0


{code}
@Test

    public void testUpsertSelectWithSequenceAndLargeDataSet() throws Exception {

        long ts = nextTimestamp();

        Properties props = new Properties();

        //props.setProperty(QueryServices.THREAD_POOL_SIZE_ATTRIB, Integer.toString(64));

        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts));

        Connection conn = DriverManager.getConnection(getUrl(), props);

        String ddl = "CREATE TABLE IF NOT EXISTS DUMMY_CURSOR_STORAGE ("

        + "ORGANIZATION_ID CHAR(15) NOT NULL, QUERY_ID CHAR(15) NOT NULL, CURSOR_ORDER BIGINT NOT NULL "

        + "CONSTRAINT MAIN_PK PRIMARY KEY (ORGANIZATION_ID, QUERY_ID, CURSOR_ORDER) "

        + ") SALT_BUCKETS = 64";

        conn.createStatement().execute(ddl);

        conn.createStatement().execute("CREATE TABLE DUMMY_SEQ_TEST_DATA (ORGANIZATION_ID CHAR(15) NOT NULL, k1 integer not null, v1 integer not null CONSTRAINT PK PRIMARY KEY (ORGANIZATION_ID, k1, v1) ) VERSIONS=1, SALT_BUCKETS=64");

        conn.createStatement().execute("create sequence s cache " + Long.MAX_VALUE);

        conn.close();



        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 10));

        conn = DriverManager.getConnection(getUrl(), props);

        for (int i = 0; i < 500000; i++) {

        conn.createStatement().execute("upsert into DUMMY_SEQ_TEST_DATA values ('00Dxx0000001gEH'," + i + "," + i + ")");

        }

        conn.commit();



        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 15));

        conn = DriverManager.getConnection(getUrl(), props);

        conn.setAutoCommit(true);

        conn.createStatement().execute("upsert into DUMMY_CURSOR_STORAGE select ORGANIZATION_ID, 'MyQueryId', next value for s FROM DUMMY_SEQ_TEST_DATA");

        //conn.commit(); 

        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 20));

        conn = DriverManager.getConnection(getUrl(), props);

        ResultSet rs = conn.createStatement().executeQuery("select count(*) from DUMMY_CURSOR_STORAGE");

        

        assertTrue(rs.next());

        assertEquals(500000, rs.getLong(1));

        conn.close();



        props.setProperty(PhoenixRuntime.CURRENT_SCN_ATTRIB, Long.toString(ts + 25));

        ResultSet rs2 = conn.createStatement().executeQuery("select cursor_order from DUMMY_CURSOR_STORAGE");

        long seq = 1;

        while (rs2.next()) {

            assertEquals(seq, rs2.getLong(1));

            seq++;

        }

        conn.close();

    

    }

{code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)