This is an automated email from the ASF dual-hosted git repository.

tkhurana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/phoenix.git


The following commit(s) were added to refs/heads/master by this push:
     new fa1d22cb21 PHOENIX-7448 Phoenix Compaction can miss retaining some 
cells when there is a gap more than TTL (#2017)
fa1d22cb21 is described below

commit fa1d22cb2189844832fb24a361bec2cadc4ab911
Author: tkhurana <[email protected]>
AuthorDate: Tue Oct 22 15:53:11 2024 -0700

    PHOENIX-7448 Phoenix Compaction can miss retaining some cells when there is 
a gap more than TTL (#2017)
    
    Co-authored-by: Tanuj Khurana <[email protected]>
---
 .../phoenix/coprocessor/CompactionScanner.java     |  3 +-
 .../org/apache/phoenix/end2end/TableTTLIT.java     | 32 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git 
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/CompactionScanner.java
 
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/CompactionScanner.java
index 126e212104..241ea00f36 100644
--- 
a/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/CompactionScanner.java
+++ 
b/phoenix-core-server/src/main/java/org/apache/phoenix/coprocessor/CompactionScanner.java
@@ -2463,7 +2463,8 @@ public class CompactionScanner implements InternalScanner 
{
                             trimmedRow.add(cell);
                         }
                     }
-                    lastRowVersion = trimmedRow;
+                    lastRowVersion.clear();
+                    lastRowVersion.addAll(trimmedRow);
                     trimmedEmptyColumn.clear();;
                     for (Cell cell : emptyColumn) {
                         if (cell.getTimestamp() >= minTimestamp) {
diff --git 
a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableTTLIT.java 
b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableTTLIT.java
index ba22bf667a..a4f77a8a6b 100644
--- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableTTLIT.java
+++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TableTTLIT.java
@@ -315,6 +315,38 @@ public class TableTTLIT extends BaseTest {
             injectEdge.incrementValue(1000);
         }
     }
+
+    @Test
+    public void testMultipleRowsWithUpdatesMoreThanTTLApart() throws Exception 
{
+        // for the purpose of this test only considering cases when 
maxlookback is 0
+        if (tableLevelMaxLooback == null || tableLevelMaxLooback != 0) {
+            return;
+        }
+        try (Connection conn = DriverManager.getConnection(getUrl())) {
+            String tableName = generateUniqueName();
+            createTable(tableName);
+            long startTime = System.currentTimeMillis() + 1000;
+            startTime = (startTime / 1000) * 1000;
+            EnvironmentEdgeManager.injectEdge(injectEdge);
+            injectEdge.setValue(startTime);
+            updateRow(conn, tableName, "a1");
+            updateRow(conn, tableName, "a2");
+            updateRow(conn, tableName, "a3");
+            //advance the time to create a gap > TTL
+            injectEdge.incrementValue((ttl + 1) * 1000);
+            updateColumn(conn, tableName, "a1", 2, "col2");
+            updateColumn(conn, tableName, "a2", 3, "col3");
+            updateColumn(conn, tableName, "a3", 5, "col5");
+            conn.commit();
+            flush(TableName.valueOf(tableName));
+            majorCompact(TableName.valueOf(tableName));
+            String dql = "SELECT count(*) from " + tableName;
+            ResultSet rs = conn.createStatement().executeQuery(dql);
+            assertTrue(rs.next());
+            assertEquals(3, rs.getInt(1));
+        }
+    }
+
     private void flush(TableName table) throws IOException {
         Admin admin = getUtility().getAdmin();
         admin.flush(table);

Reply via email to