[ https://issues.apache.org/jira/browse/PHOENIX-7402?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sanjeet Malhotra updated PHOENIX-7402: -------------------------------------- Description: Even though a row is being updated within TTL but still its getting expired partially. Following IT in MaxLookbackExtendedIT can be used to reproduce the issue: {code:java} @Test public void testRetainingLastRowVersion() throws Exception { if (multiCF) { return; } if(hasTableLevelMaxLookback) { optionBuilder.append(", MAX_LOOKBACK_AGE=" + TABLE_LEVEL_MAX_LOOKBACK_AGE * 1000); tableDDLOptions = optionBuilder.toString(); } try(Connection conn = DriverManager.getConnection(getUrl())) { String tableName = generateUniqueName(); createTable(tableName); injectEdge.setValue(System.currentTimeMillis()); EnvironmentEdgeManager.injectEdge(injectEdge); injectEdge.incrementValue(1); Statement stmt = conn.createStatement(); stmt.execute("upsert into " + tableName + " values ('a', 'ab', 'abc', 'abcd')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab1')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab2')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab3')"); conn.commit(); injectEdge.incrementValue(11 * 1000); stmt.execute("upsert into " + tableName + " values ('b', 'bc', 'bcd', 'bcde')"); conn.commit(); injectEdge.incrementValue(1); TableName dataTableName = TableName.valueOf(tableName); TestUtil.dumpTable(conn, dataTableName); flush(dataTableName); injectEdge.incrementValue(1); TestUtil.dumpTable(conn, dataTableName); majorCompact(dataTableName); TestUtil.dumpTable(conn, dataTableName); injectEdge.incrementValue(1); ResultSet rs = stmt.executeQuery("select * from " + dataTableName + " where id = 'a'"); //TestUtil.printResultSet(rs); while(rs.next()) { assertNotNull(rs.getString(3)); assertNotNull(rs.getString(4)); } } } {code} The TTL in above IT is 30 sec and table level max lookback age is 10 sec with cluster level max lookback = 15 sec. The IT is failing at the last two checks: {code:java} while(rs.next()) { assertNotNull(rs.getString(3)); assertNotNull(rs.getString(4)); } {code} was: Even though a row is being updated within TTL but still its getting expired partially. Following IT in MaxLookbackExnetedIT can be used to reproduce the issue: {code:java} @Test public void testRetainingLastRowVersion() throws Exception { if (multiCF) { return; } if(hasTableLevelMaxLookback) { optionBuilder.append(", MAX_LOOKBACK_AGE=" + TABLE_LEVEL_MAX_LOOKBACK_AGE * 1000); tableDDLOptions = optionBuilder.toString(); } try(Connection conn = DriverManager.getConnection(getUrl())) { String tableName = generateUniqueName(); createTable(tableName); injectEdge.setValue(System.currentTimeMillis()); EnvironmentEdgeManager.injectEdge(injectEdge); injectEdge.incrementValue(1); Statement stmt = conn.createStatement(); stmt.execute("upsert into " + tableName + " values ('a', 'ab', 'abc', 'abcd')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab1')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab2')"); conn.commit(); injectEdge.incrementValue(16 * 1000); stmt.execute("upsert into " + tableName + " values ('a', 'ab3')"); conn.commit(); injectEdge.incrementValue(11 * 1000); stmt.execute("upsert into " + tableName + " values ('b', 'bc', 'bcd', 'bcde')"); conn.commit(); injectEdge.incrementValue(1); TableName dataTableName = TableName.valueOf(tableName); TestUtil.dumpTable(conn, dataTableName); flush(dataTableName); injectEdge.incrementValue(1); TestUtil.dumpTable(conn, dataTableName); majorCompact(dataTableName); TestUtil.dumpTable(conn, dataTableName); injectEdge.incrementValue(1); ResultSet rs = stmt.executeQuery("select * from " + dataTableName + " where id = 'a'"); //TestUtil.printResultSet(rs); while(rs.next()) { assertNotNull(rs.getString(3)); assertNotNull(rs.getString(4)); } } } {code} The TTL in above IT is 30 sec and table level max lookback age is 10 sec with cluster level max lookback = 15 sec. The IT is failing at the last two checks: {code:java} while(rs.next()) { assertNotNull(rs.getString(3)); assertNotNull(rs.getString(4)); } {code} > Even if a row is updated with TTL its getting expired partially > --------------------------------------------------------------- > > Key: PHOENIX-7402 > URL: https://issues.apache.org/jira/browse/PHOENIX-7402 > Project: Phoenix > Issue Type: Bug > Affects Versions: 5.2.0, 5.2.1, 5.3.0 > Reporter: Sanjeet Malhotra > Assignee: Sanjeet Malhotra > Priority: Critical > > Even though a row is being updated within TTL but still its getting expired > partially. Following IT in MaxLookbackExtendedIT can be used to reproduce the > issue: > {code:java} > @Test > public void testRetainingLastRowVersion() throws Exception { > if (multiCF) { > return; > } > if(hasTableLevelMaxLookback) { > optionBuilder.append(", MAX_LOOKBACK_AGE=" + > TABLE_LEVEL_MAX_LOOKBACK_AGE * 1000); > tableDDLOptions = optionBuilder.toString(); > } > try(Connection conn = DriverManager.getConnection(getUrl())) { > String tableName = generateUniqueName(); > createTable(tableName); > injectEdge.setValue(System.currentTimeMillis()); > EnvironmentEdgeManager.injectEdge(injectEdge); > injectEdge.incrementValue(1); > Statement stmt = conn.createStatement(); > stmt.execute("upsert into " + tableName + " values ('a', 'ab', 'abc', > 'abcd')"); > conn.commit(); > injectEdge.incrementValue(16 * 1000); > stmt.execute("upsert into " + tableName + " values ('a', 'ab1')"); > conn.commit(); > injectEdge.incrementValue(16 * 1000); > stmt.execute("upsert into " + tableName + " values ('a', 'ab2')"); > conn.commit(); > injectEdge.incrementValue(16 * 1000); > stmt.execute("upsert into " + tableName + " values ('a', 'ab3')"); > conn.commit(); > injectEdge.incrementValue(11 * 1000); > stmt.execute("upsert into " + tableName + " values ('b', 'bc', 'bcd', > 'bcde')"); > conn.commit(); > injectEdge.incrementValue(1); > TableName dataTableName = TableName.valueOf(tableName); > TestUtil.dumpTable(conn, dataTableName); > flush(dataTableName); > injectEdge.incrementValue(1); > TestUtil.dumpTable(conn, dataTableName); > majorCompact(dataTableName); > TestUtil.dumpTable(conn, dataTableName); > injectEdge.incrementValue(1); > ResultSet rs = stmt.executeQuery("select * from " + dataTableName + " > where id = 'a'"); > //TestUtil.printResultSet(rs); > while(rs.next()) { > assertNotNull(rs.getString(3)); > assertNotNull(rs.getString(4)); > } > } > } {code} > The TTL in above IT is 30 sec and table level max lookback age is 10 sec with > cluster level max lookback = 15 sec. > The IT is failing at the last two checks: > {code:java} > while(rs.next()) { > assertNotNull(rs.getString(3)); > assertNotNull(rs.getString(4)); > } {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)