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 <[email protected]>
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();
}