You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2024/06/03 13:36:42 UTC
(accumulo) branch elasticity updated: adds validation of file clipping to split code (#4627)
This is an automated email from the ASF dual-hosted git repository.
kturner pushed a commit to branch elasticity
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push:
new 021d7d2a86 adds validation of file clipping to split code (#4627)
021d7d2a86 is described below
commit 021d7d2a865d7747c4c80246b6944f74c3cdc6a7
Author: Keith Turner <kt...@apache.org>
AuthorDate: Mon Jun 3 09:36:36 2024 -0400
adds validation of file clipping to split code (#4627)
When the split code examined files to determine if they
should go to a child tablet it did not directly look at
any ranges associated with the file becasue it assumed
other code would clip. Added validation that clipping
was done since the file ranges are not directly examined
by split.
Ran ComprehensiveIT.testMergeAndSplit() to test this change
because it does split->merge-split->merge while will cause
split of tablets w/ fenced files.
---
.../accumulo/manager/tableOps/split/UpdateTablets.java | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java
index d8be0ab711..ce48d480b1 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/split/UpdateTablets.java
@@ -136,6 +136,21 @@ public class UpdateTablets extends ManagerRepo {
Range fileRange;
if (fileInfo != null) {
fileRange = new Range(fileInfo.getFirstRow(), fileInfo.getLastRow());
+ if (!file.getRange().isInfiniteStartKey() || !file.getRange().isInfiniteStopKey()) {
+ // Its expected that if a file has a range that the first row and last row will be clipped
+ // to be within that range. For that reason this code does not check file.getRange() when
+ // making decisions about whether a file should go to a tablet, because its assumed that
+ // fileRange will cover that case. Since file.getRange() is not being checked directly
+ // this code validates the assumption that fileRange is within file.getRange()
+ Preconditions.checkState(
+ file.getRange().clip(new Range(fileInfo.getFirstRow()), false) != null,
+ "First row %s computed for file %s did not fall in its range", fileInfo.getFirstRow(),
+ file);
+ Preconditions.checkState(
+ file.getRange().clip(new Range(fileInfo.getLastRow()), false) != null,
+ "Last row %s computed for file %s did not fall in its range", fileInfo.getLastRow(),
+ file);
+ }
} else {
fileRange = new Range();
}