You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Sanjeet Malhotra (Jira)" <ji...@apache.org> on 2024/09/16 19:24:00 UTC
[jira] [Updated] (PHOENIX-7402) Even if a row is updated within TTL its getting expired partially
[ 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)