Uploaded image for project: 'Phoenix'
  1. Phoenix
  2. PHOENIX-1096

Duplicate sequence values returned when doing upsert select against a salted table.

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 3.0.0, 4.0.0
    • 3.1.0, 4.1.0
    • None
    • None

    Description

      @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();
      
          
      
          }
      
      

      Attachments

        1. PHOENIX-1096.patch
          6 kB
          Jan Fernando

        Issue Links

          Activity

            People

              jfernando_sfdc Jan Fernando
              samarthjain Samarth Jain
              Votes:
              0 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: