This is an automated email from the ASF dual-hosted git repository. ddanielr pushed a commit to branch 2.1 in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push: new d973179452 Remove mutation timestamp for valid GcCandidates (#4113) d973179452 is described below commit d97317945290fcd4e3a4eb8b3cf7e427fcc322bd Author: Daniel Roberts <ddani...@gmail.com> AuthorDate: Wed Dec 27 23:07:39 2023 -0500 Remove mutation timestamp for valid GcCandidates (#4113) * Remove mutation timestamp for valid GcCandidates --- .../accumulo/server/metadata/ServerAmpleImpl.java | 18 ++++++++++++++---- .../accumulo/test/functional/GarbageCollectorIT.java | 18 +++++++++++++++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/server/base/src/main/java/org/apache/accumulo/server/metadata/ServerAmpleImpl.java b/server/base/src/main/java/org/apache/accumulo/server/metadata/ServerAmpleImpl.java index 223a9cf112..ef02f22b4d 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/metadata/ServerAmpleImpl.java +++ b/server/base/src/main/java/org/apache/accumulo/server/metadata/ServerAmpleImpl.java @@ -226,10 +226,20 @@ public class ServerAmpleImpl extends AmpleImpl implements Ample { } try (BatchWriter writer = context.createBatchWriter(level.metaTable())) { - for (GcCandidate candidate : candidates) { - Mutation m = new Mutation(DeletesSection.encodeRow(candidate.getPath())); - m.putDelete(EMPTY_TEXT, EMPTY_TEXT, candidate.getUid()); - writer.addMutation(m); + if (type == GcCandidateType.VALID) { + for (GcCandidate candidate : candidates) { + Mutation m = new Mutation(DeletesSection.encodeRow(candidate.getPath())); + // Removes all versions of the candidate to avoid reprocessing deleted file entries + m.putDelete(EMPTY_TEXT, EMPTY_TEXT); + writer.addMutation(m); + } + } else { + for (GcCandidate candidate : candidates) { + Mutation m = new Mutation(DeletesSection.encodeRow(candidate.getPath())); + // Removes this and older versions while allowing newer candidate versions to persist + m.putDelete(EMPTY_TEXT, EMPTY_TEXT, candidate.getUid()); + writer.addMutation(m); + } } } catch (MutationsRejectedException | TableNotFoundException e) { throw new RuntimeException(e); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java index d7899e1a3b..1776bc4c03 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/GarbageCollectorIT.java @@ -285,6 +285,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase { log.info("User GcCandidate Deletion test of table: {}", table); log.info("GcCandidates will be added/removed from table: {}", DataLevel.USER.metaTable()); createAndDeleteUniqueMutation(TableId.of(table), Ample.GcCandidateType.INUSE); + createAndDeleteUniqueMutation(TableId.of(table), Ample.GcCandidateType.VALID); } } @@ -295,6 +296,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase { log.info("Metadata GcCandidate Deletion test"); log.info("GcCandidates will be added/removed from table: {}", DataLevel.METADATA.metaTable()); createAndDeleteUniqueMutation(tableId, Ample.GcCandidateType.INUSE); + createAndDeleteUniqueMutation(tableId, Ample.GcCandidateType.VALID); } /** @@ -467,6 +469,13 @@ public class GarbageCollectorIT extends ConfigurableMacBase { } private void createAndDeleteUniqueMutation(TableId tableId, Ample.GcCandidateType type) { + int totalCandidates = 2; + boolean inUseDelete = true; + + if (type == Ample.GcCandidateType.VALID) { + totalCandidates = 1; + inUseDelete = false; + } Ample ample = cluster.getServerContext().getAmple(); DataLevel datalevel = Ample.DataLevel.of(tableId); @@ -504,7 +513,7 @@ public class GarbageCollectorIT extends ConfigurableMacBase { ample.putGcCandidates(tableId, List.of(new StoredTabletFile(deleteCandidate.getPath()))); log.debug("Deleting Candidate {}", deleteCandidate); - ample.deleteGcCandidates(datalevel, List.of(deleteCandidate), Ample.GcCandidateType.INUSE); + ample.deleteGcCandidates(datalevel, List.of(deleteCandidate), type); candidate = ample.getGcCandidates(datalevel); @@ -519,7 +528,10 @@ public class GarbageCollectorIT extends ConfigurableMacBase { } counter++; } - assertEquals(2, counter); - assertTrue(foundNewCandidate); + assertEquals(totalCandidates, counter); + assertEquals(inUseDelete, foundNewCandidate); + + // Cleanup from test + ample.deleteGcCandidates(datalevel, candidates, Ample.GcCandidateType.VALID); } }