You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by dd...@apache.org on 2023/12/28 04:07:45 UTC
(accumulo) branch 2.1 updated: Remove mutation timestamp for valid GcCandidates (#4113)
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 <dd...@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);
}
}