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