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