[ 
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)

Reply via email to