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

dlmarion pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/main by this push:
     new bf61fac87a Fixed bug in TabletsMetadata.fetch (#5342)
bf61fac87a is described below

commit bf61fac87a4b29e1e3aaa408bfea0d2711a9a812
Author: Dave Marion <dlmar...@apache.org>
AuthorDate: Thu Feb 20 11:56:46 2025 -0500

    Fixed bug in TabletsMetadata.fetch (#5342)
    
    A bug was introduced in #5335 to TabletsMetadata.fetch where the
    columns being passed as arguments to the function where not being
    used. This has the side effect of fetching all columns in the
    TabletMetadata which was causing some ITs to time out. The ITs
    in these cases were fetching and counting specific columns in
    the TabletMetadata.
    
    This bug also highlighted another bug in CloneIT where an invalid
    directory was being inserted into the TabletMetadata which would
    then subsequently fail when fetched. The directory column name
    was being validated on most, but not all, places where it was being
    inserted into the TabletMetadata. I added validation to the
    ServerColumnFamily.DIRECTORY_COLUMN.put method and fixed CloneIT.
---
 .../core/metadata/schema/MetadataSchema.java       |  8 +++-
 .../core/metadata/schema/TabletMetadata.java       |  1 -
 .../core/metadata/schema/TabletMutatorBase.java    |  1 -
 .../core/metadata/schema/TabletsMetadata.java      |  3 +-
 .../constraints/MetadataConstraintsTest.java       |  3 +-
 .../java/org/apache/accumulo/test/CloneIT.java     | 48 +++++++++++-----------
 6 files changed, 34 insertions(+), 30 deletions(-)

diff --git 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java
 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java
index 885fd32623..6a003c22fd 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/MetadataSchema.java
@@ -203,7 +203,13 @@ public class MetadataSchema {
        * Holds the location of the tablet in the DFS file system
        */
       public static final String DIRECTORY_QUAL = "dir";
-      public static final ColumnFQ DIRECTORY_COLUMN = new ColumnFQ(NAME, new 
Text(DIRECTORY_QUAL));
+      public static final ColumnFQ DIRECTORY_COLUMN = new ColumnFQ(NAME, new 
Text(DIRECTORY_QUAL)) {
+        @Override
+        public void put(Mutation m, Value v) {
+          validateDirCol(v.toString());
+          super.put(m, v);
+        }
+      };
       /**
        * Initial tablet directory name for the default tablet in all tables
        */
diff --git 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java
 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java
index c737b0d66b..a5a41a2684 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMetadata.java
@@ -73,7 +73,6 @@ import org.apache.accumulo.core.metadata.AccumuloTable;
 import org.apache.accumulo.core.metadata.StoredTabletFile;
 import org.apache.accumulo.core.metadata.SuspendingTServer;
 import org.apache.accumulo.core.metadata.TServerInstance;
-import org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection;
 import 
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.BulkFileColumnFamily;
 import 
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.ClonedColumnFamily;
 import 
org.apache.accumulo.core.metadata.schema.MetadataSchema.TabletsSection.CompactedColumnFamily;
diff --git 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java
 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java
index 4f39eda7b7..537caf917e 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletMutatorBase.java
@@ -90,7 +90,6 @@ public abstract class TabletMutatorBase<T extends 
Ample.TabletUpdates<T>>
 
   @Override
   public T putDirName(String dirName) {
-    ServerColumnFamily.validateDirCol(dirName);
     Preconditions.checkState(updatesEnabled, "Cannot make updates after 
calling mutate.");
     ServerColumnFamily.DIRECTORY_COLUMN.put(mutation, new Value(dirName));
     return getThis();
diff --git 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
index 26d157eb19..8f448c82ec 100644
--- 
a/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
+++ 
b/core/src/main/java/org/apache/accumulo/core/metadata/schema/TabletsMetadata.java
@@ -21,7 +21,6 @@ package org.apache.accumulo.core.metadata.schema;
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.stream.Collectors.groupingBy;
 import static java.util.stream.Collectors.toList;
-import static 
org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType.PREV_ROW;
 
 import java.io.IOException;
 import java.io.UncheckedIOException;
@@ -305,7 +304,7 @@ public class TabletsMetadata implements 
Iterable<TabletMetadata>, AutoCloseable
     @Override
     public Options fetch(ColumnType... colsToFetch) {
       Preconditions.checkArgument(colsToFetch.length > 0);
-      for (var col : fetchedCols) {
+      for (var col : colsToFetch) {
         fetchedCols.add(col);
         var qualifier = ColumnType.resolveQualifier(col);
         if (qualifier != null) {
diff --git 
a/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java
 
b/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java
index 40d347fcd5..ecbe69e480 100644
--- 
a/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java
+++ 
b/server/base/src/test/java/org/apache/accumulo/server/constraints/MetadataConstraintsTest.java
@@ -634,7 +634,8 @@ public class MetadataConstraintsTest {
     assertTrue(violations.isEmpty());
 
     m = new Mutation(new Text("0;foo"));
-    ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("/invalid"));
+    m.put(ServerColumnFamily.DIRECTORY_COLUMN.getColumnFamily(),
+        ServerColumnFamily.DIRECTORY_COLUMN.getColumnQualifier(), new 
Value("/invalid"));
     violations = mc.check(createEnv(), m);
     assertFalse(violations.isEmpty());
     assertEquals(1, violations.size());
diff --git a/test/src/main/java/org/apache/accumulo/test/CloneIT.java 
b/test/src/main/java/org/apache/accumulo/test/CloneIT.java
index 2d7caa2e94..5b84f3685a 100644
--- a/test/src/main/java/org/apache/accumulo/test/CloneIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/CloneIT.java
@@ -66,7 +66,7 @@ public class CloneIT extends AccumuloClusterHarness {
       Mutation mut = TabletColumnFamily.createPrevRowMutation(ke);
 
       ServerColumnFamily.TIME_COLUMN.put(mut, new Value("M0"));
-      ServerColumnFamily.DIRECTORY_COLUMN.put(mut, new 
Value("/default_tablet"));
+      ServerColumnFamily.DIRECTORY_COLUMN.put(mut, new 
Value("default_tablet"));
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName)) {
         bw1.addMutation(mut);
@@ -95,7 +95,7 @@ public class CloneIT extends AccumuloClusterHarness {
       Mutation mut = TabletColumnFamily.createPrevRowMutation(ke);
 
       ServerColumnFamily.TIME_COLUMN.put(mut, new Value("M0"));
-      ServerColumnFamily.DIRECTORY_COLUMN.put(mut, new 
Value("/default_tablet"));
+      ServerColumnFamily.DIRECTORY_COLUMN.put(mut, new 
Value("default_tablet"));
       mut.put(DataFileColumnFamily.NAME.toString(),
           getMetadata(filePrefix + "/default_tablet/0_0.rf", range1),
           new DataFileValue(1, 200).encodeAsString());
@@ -155,17 +155,17 @@ public class CloneIT extends AccumuloClusterHarness {
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName);
           BatchWriter bw2 = client.createBatchWriter(tableName)) {
-        bw1.addMutation(createTablet("0", null, null, "/default_tablet",
+        bw1.addMutation(createTablet("0", null, null, "default_tablet",
             filePrefix + "/default_tablet/0_0.rf", range));
 
         bw1.flush();
 
         MetadataTableUtil.initializeClone(tableName, TableId.of("0"), 
TableId.of("1"), client, bw2);
 
-        bw1.addMutation(createTablet("0", "m", null, "/default_tablet",
+        bw1.addMutation(createTablet("0", "m", null, "default_tablet",
             filePrefix + "/default_tablet/0_0.rf", range));
         bw1.addMutation(
-            createTablet("0", null, "m", "/t-1", filePrefix + 
"/default_tablet/0_0.rf", range));
+            createTablet("0", null, "m", "t-1", filePrefix + 
"/default_tablet/0_0.rf", range));
 
         bw1.flush();
 
@@ -203,17 +203,17 @@ public class CloneIT extends AccumuloClusterHarness {
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName);
           BatchWriter bw2 = client.createBatchWriter(tableName)) {
-        bw1.addMutation(createTablet("0", null, null, "/default_tablet",
+        bw1.addMutation(createTablet("0", null, null, "default_tablet",
             filePrefix + "/default_tablet/0_0.rf", range));
 
         bw1.flush();
 
         MetadataTableUtil.initializeClone(tableName, TableId.of("0"), 
TableId.of("1"), client, bw2);
 
-        bw1.addMutation(createTablet("0", "m", null, "/default_tablet",
+        bw1.addMutation(createTablet("0", "m", null, "default_tablet",
             filePrefix + "/default_tablet/1_0.rf", range));
         Mutation mut3 =
-            createTablet("0", null, "m", "/t-1", filePrefix + 
"/default_tablet/1_0.rf", range);
+            createTablet("0", null, "m", "t-1", filePrefix + 
"/default_tablet/1_0.rf", range);
         mut3.putDelete(DataFileColumnFamily.NAME.toString(),
             getMetadata(filePrefix + "/default_tablet/0_0.rf", range));
         bw1.addMutation(mut3);
@@ -285,17 +285,17 @@ public class CloneIT extends AccumuloClusterHarness {
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName);
           BatchWriter bw2 = client.createBatchWriter(tableName)) {
-        bw1.addMutation(createTablet("0", "m", null, "/d1", filePrefix + 
"/d1/file1.rf", range1));
-        bw1.addMutation(createTablet("0", null, "m", "/d2", filePrefix + 
"/d2/file2.rf", range2));
+        bw1.addMutation(createTablet("0", "m", null, "d1", filePrefix + 
"/d1/file1.rf", range1));
+        bw1.addMutation(createTablet("0", null, "m", "d2", filePrefix + 
"/d2/file2.rf", range2));
 
         bw1.flush();
 
         MetadataTableUtil.initializeClone(tableName, TableId.of("0"), 
TableId.of("1"), client, bw2);
 
-        bw1.addMutation(createTablet("0", "f", null, "/d1", filePrefix + 
"/d1/file3.rf", range3));
-        bw1.addMutation(createTablet("0", "m", "f", "/d3", filePrefix + 
"/d1/file1.rf", range1));
-        bw1.addMutation(createTablet("0", "s", "m", "/d2", filePrefix + 
"/d2/file2.rf", range2));
-        bw1.addMutation(createTablet("0", null, "s", "/d4", filePrefix + 
"/d2/file2.rf", range2));
+        bw1.addMutation(createTablet("0", "f", null, "d1", filePrefix + 
"/d1/file3.rf", range3));
+        bw1.addMutation(createTablet("0", "m", "f", "d3", filePrefix + 
"/d1/file1.rf", range1));
+        bw1.addMutation(createTablet("0", "s", "m", "d2", filePrefix + 
"/d2/file2.rf", range2));
+        bw1.addMutation(createTablet("0", null, "s", "d4", filePrefix + 
"/d2/file2.rf", range2));
 
         bw1.flush();
 
@@ -335,8 +335,8 @@ public class CloneIT extends AccumuloClusterHarness {
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName);
           BatchWriter bw2 = client.createBatchWriter(tableName)) {
-        bw1.addMutation(createTablet("0", "m", null, "/d1", filePrefix + 
"/d1/file1.rf", range1));
-        bw1.addMutation(createTablet("0", null, "m", "/d2", filePrefix + 
"/d2/file2.rf", range2));
+        bw1.addMutation(createTablet("0", "m", null, "d1", filePrefix + 
"/d1/file1.rf", range1));
+        bw1.addMutation(createTablet("0", null, "m", "d2", filePrefix + 
"/d2/file2.rf", range2));
 
         bw1.flush();
 
@@ -347,10 +347,10 @@ public class CloneIT extends AccumuloClusterHarness {
 
         bw1.flush();
 
-        bw1.addMutation(createTablet("0", "f", null, "/d1", filePrefix + 
"/d1/file3.rf", range3));
-        bw1.addMutation(createTablet("0", "m", "f", "/d3", filePrefix + 
"/d1/file1.rf", range1));
-        bw1.addMutation(createTablet("0", "s", "m", "/d2", filePrefix + 
"/d2/file3.rf", range3));
-        bw1.addMutation(createTablet("0", null, "s", "/d4", filePrefix + 
"/d4/file3.rf", range3));
+        bw1.addMutation(createTablet("0", "f", null, "d1", filePrefix + 
"/d1/file3.rf", range3));
+        bw1.addMutation(createTablet("0", "m", "f", "d3", filePrefix + 
"/d1/file1.rf", range1));
+        bw1.addMutation(createTablet("0", "s", "m", "d2", filePrefix + 
"/d2/file3.rf", range3));
+        bw1.addMutation(createTablet("0", null, "s", "d4", filePrefix + 
"/d4/file3.rf", range3));
 
         bw1.flush();
 
@@ -363,7 +363,7 @@ public class CloneIT extends AccumuloClusterHarness {
 
         bw1.flush();
 
-        bw1.addMutation(createTablet("0", "m", "f", "/d3", filePrefix + 
"/d1/file3.rf", range3));
+        bw1.addMutation(createTablet("0", "m", "f", "d3", filePrefix + 
"/d1/file3.rf", range3));
 
         bw1.flush();
 
@@ -405,15 +405,15 @@ public class CloneIT extends AccumuloClusterHarness {
 
       try (BatchWriter bw1 = client.createBatchWriter(tableName);
           BatchWriter bw2 = client.createBatchWriter(tableName)) {
-        bw1.addMutation(createTablet("0", "m", null, "/d1", filePrefix + 
"/d1/file1.rf", range1));
-        bw1.addMutation(createTablet("0", null, "m", "/d2", filePrefix + 
"/d2/file2.rf", range2));
+        bw1.addMutation(createTablet("0", "m", null, "d1", filePrefix + 
"/d1/file1.rf", range1));
+        bw1.addMutation(createTablet("0", null, "m", "d2", filePrefix + 
"/d2/file2.rf", range2));
 
         bw1.flush();
 
         MetadataTableUtil.initializeClone(tableName, TableId.of("0"), 
TableId.of("1"), client, bw2);
 
         bw1.addMutation(deleteTablet("0", "m", null, filePrefix + 
"/d1/file1.rf", range1));
-        Mutation mut = createTablet("0", null, null, "/d2", filePrefix + 
"/d2/file2.rf", range2);
+        Mutation mut = createTablet("0", null, null, "d2", filePrefix + 
"/d2/file2.rf", range2);
         mut.put(DataFileColumnFamily.NAME.toString(),
             getMetadata(filePrefix + "/d1/file1.rf", range1),
             new DataFileValue(10, 200).encodeAsString());

Reply via email to