This is an automated email from the ASF dual-hosted git repository.

jmark99 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 de48b78544 Verify hostingGoals in table with mixed goals (#3532)
de48b78544 is described below

commit de48b785447be37622d1c9bd4cd32e89d6177c5f
Author: Mark Owens <jmar...@apache.org>
AuthorDate: Fri Jun 23 13:48:48 2023 -0400

    Verify hostingGoals in table with mixed goals (#3532)
    
    * Verify hostingGoals in table with mixed goals
    
    This PR adds a suggested additional test for the setting of 
`TabletHostingGoals` in `TableOperationsImpl.java`.
    
    Specifically, the new tests verifies that when a table that already 
contains mixed `TabletHostingGoals` splits further, the new splits retain the 
hostingGoal of the tablet from which they were split. The new test, 
`testGetHostingGoals_StaggeredSplits`, does the following:
    
    - creates table
    - add two splits; leave first tablet to default ONDEMAND. Set second to  
NEVER and third to ALWAYS
    - add an additional split point within each of the existing three tablets
    - verify newly created tablets are set with the hostingGoal of the tablet 
from which they were split
---
 .../apache/accumulo/test/TableOperationsIT.java    | 63 ++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java 
b/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java
index 94d41f82b4..caef8145e7 100644
--- a/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/TableOperationsIT.java
@@ -617,6 +617,69 @@ public class TableOperationsIT extends 
AccumuloClusterHarness {
     }
   }
 
+  // This test checks that tablets are correct when staggered splits are added 
to a table, i.e.,
+  // a table is split and assigned differing goals. Later when the two 
existing tablets are
+  // split, verify that the new splits contain the appropriate hosting goal of 
the tablet from
+  // which they wre split. Steps are as follows:
+  // - create table
+  // - add two splits; leave first tablet to default ONDEMAND, seconds to 
NEVER, third to ALWAYS
+  // - add an additional split within each of the three existing tablets
+  // - verify the newly created tablets are set with the hostingGoals of the 
tablet from which they
+  // are split.
+  @Test
+  public void testGetHostingGoals_StaggeredSplits() throws AccumuloException, 
TableExistsException,
+      AccumuloSecurityException, TableNotFoundException {
+
+    String tableName = getUniqueNames(1)[0];
+
+    try {
+      accumuloClient.tableOperations().create(tableName);
+      String tableId = 
accumuloClient.tableOperations().tableIdMap().get(tableName);
+
+      // add split 'h' and 'q'. Leave first as ONDEMAND, set second to NEVER, 
and third to ALWAYS
+      SortedSet<Text> splits = Sets.newTreeSet(Arrays.asList(new Text("h"), 
new Text("q")));
+      accumuloClient.tableOperations().addSplits(tableName, splits);
+      Range range = new Range(new Text("h"), false, new Text("q"), true);
+      accumuloClient.tableOperations().setTabletHostingGoal(tableName, range,
+          TabletHostingGoal.NEVER);
+      range = new Range(new Text("q"), false, null, true);
+      accumuloClient.tableOperations().setTabletHostingGoal(tableName, range,
+          TabletHostingGoal.ALWAYS);
+
+      // verify
+      List<HostingGoalForTablet> expectedGoals = new ArrayList<>();
+      setExpectedGoal(expectedGoals, tableId, "h", null, 
TabletHostingGoal.ONDEMAND);
+      setExpectedGoal(expectedGoals, tableId, "q", "h", 
TabletHostingGoal.NEVER);
+      setExpectedGoal(expectedGoals, tableId, null, "q", 
TabletHostingGoal.ALWAYS);
+
+      List<HostingGoalForTablet> hostingInfo = accumuloClient.tableOperations()
+          .getTabletHostingGoal(tableName, new 
Range()).collect(Collectors.toList());
+
+      assertEquals(expectedGoals, hostingInfo);
+
+      // Add a split within each of the existing tablets. Adding 'd', 'm', and 
'v'
+      splits = Sets.newTreeSet(Arrays.asList(new Text("d"), new Text("m"), new 
Text("v")));
+      accumuloClient.tableOperations().addSplits(tableName, splits);
+
+      // verify results
+      expectedGoals.clear();
+      hostingInfo.clear();
+      setExpectedGoal(expectedGoals, tableId, "d", null, 
TabletHostingGoal.ONDEMAND);
+      setExpectedGoal(expectedGoals, tableId, "h", "d", 
TabletHostingGoal.ONDEMAND);
+      setExpectedGoal(expectedGoals, tableId, "m", "h", 
TabletHostingGoal.NEVER);
+      setExpectedGoal(expectedGoals, tableId, "q", "m", 
TabletHostingGoal.NEVER);
+      setExpectedGoal(expectedGoals, tableId, "v", "q", 
TabletHostingGoal.ALWAYS);
+      setExpectedGoal(expectedGoals, tableId, null, "v", 
TabletHostingGoal.ALWAYS);
+
+      hostingInfo = 
accumuloClient.tableOperations().getTabletHostingGoal(tableName, new Range())
+          .collect(Collectors.toList());
+
+      assertEquals(expectedGoals, hostingInfo);
+    } finally {
+      accumuloClient.tableOperations().delete(tableName);
+    }
+  }
+
   private void verifyTablesWithSplits(String tableName, Map<String,String> 
idMap,
       SortedSet<Text> splits, TabletHostingGoal goal) throws 
TableNotFoundException {
 

Reply via email to