[ https://issues.apache.org/jira/browse/PHOENIX-7402?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sanjeet Malhotra updated PHOENIX-7402: -------------------------------------- Summary: Even if a row is updated within TTL its getting expired partially (was: Even if a row is updated with TTL its getting expired partially) > Even if a row is updated within 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 > Fix For: 5.2.1, 5.3.0 > > > 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)