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

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


The following commit(s) were added to refs/heads/3.1 by this push:
     new fba12bd081 Validate the format of a directory column
fba12bd081 is described below

commit fba12bd081fbdfbfac64457dc8fdd2ec5c3b635f
Author: Christopher L. Shannon <cshan...@apache.org>
AuthorDate: Sat Sep 21 13:31:32 2024 -0400

    Validate the format of a directory column
    
    MetadataConstraints has been updated to validate the format of the
    directory column
    
    This is a backport from #4913
---
 .../server/constraints/MetadataConstraints.java     |  8 ++++++++
 .../server/constraints/MetadataConstraintsTest.java | 21 ++++++++++++++++++++-
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java
 
b/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java
index c3ca7bdd4a..b6d120f4b4 100644
--- 
a/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java
+++ 
b/server/base/src/main/java/org/apache/accumulo/server/constraints/MetadataConstraints.java
@@ -259,6 +259,8 @@ public class MetadataConstraints implements Constraint {
         return "Invalid data file metadata format";
       case 10:
         return "Suspended timestamp is not valid";
+      case 17:
+        return "Invalid directory column value";
     }
     return null;
   }
@@ -356,6 +358,12 @@ public class MetadataConstraints implements Constraint {
         }
         break;
       case ServerColumnFamily.DIRECTORY_QUAL:
+        try {
+          ServerColumnFamily.validateDirCol(new 
String(columnUpdate.getValue(), UTF_8));
+        } catch (IllegalArgumentException e) {
+          addViolation(violations, 17);
+        }
+
         // splits, which also write the time reference, are allowed to write 
this reference
         // even when the transaction is not running because the other half of 
the tablet is
         // holding a reference to the file.
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 4d69ebd8a6..096b3647e6 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
@@ -254,7 +254,7 @@ public class MetadataConstraintsTest {
         BulkFileColumnFamily.NAME, StoredTabletFile
             .of(new 
Path("hdfs://1.2.3.4/accumulo/tables/2a/t-0003/someFile")).getMetadataText(),
         new Value("5"));
-    ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("/t1"));
+    ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("t-000009x"));
     violations = mc.check(createEnv(), m);
     assertTrue(violations.isEmpty());
 
@@ -475,6 +475,25 @@ public class MetadataConstraintsTest {
     assertNotNull(mc.getViolationDescription((short) 9));
   }
 
+  @Test
+  public void testDirectoryColumn() {
+    MetadataConstraints mc = new MetadataConstraints();
+    Mutation m;
+    List<Short> violations;
+    m = new Mutation(new Text("0;foo"));
+    ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("t-000009x"));
+    violations = mc.check(createEnv(), m);
+    assertTrue(violations.isEmpty());
+
+    m = new Mutation(new Text("0;foo"));
+    ServerColumnFamily.DIRECTORY_COLUMN.put(m, new Value("/invalid"));
+    violations = mc.check(createEnv(), m);
+    assertFalse(violations.isEmpty());
+    assertEquals(1, violations.size());
+    assertEquals((short) 17, violations.get(0));
+
+  }
+
   // Encode a row how it would appear in Json
   private static String encodeRowForMetadata(String row) {
     try {

Reply via email to