[
https://issues.apache.org/jira/browse/PHOENIX-7402?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sanjeet Malhotra updated PHOENIX-7402:
--------------------------------------
Affects Version/s: 5.2.0
5.2.1
5.3.0
> 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 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}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)