Sanjeet Malhotra created PHOENIX-7402:
-----------------------------------------
Summary: 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
Reporter: Sanjeet Malhotra
Assignee: Sanjeet Malhotra
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)