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

cshannon 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 b5dde78c72 Validate the format of a directory column (#4913)
b5dde78c72 is described below

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

    Validate the format of a directory column (#4913)
    
    MetadataConstraints has been updated to validate the format of the
    directory column
---
 .../server/constraints/MetadataConstraints.java      |  8 ++++++++
 .../server/constraints/MetadataConstraintsTest.java  | 20 +++++++++++++++++++-
 2 files changed, 27 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 55dbb276b3..eb45429ede 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
@@ -299,6 +299,8 @@ public class MetadataConstraints implements Constraint {
         return "Invalid unsplittable column";
       case 16:
         return "Malformed availability value";
+      case 17:
+        return "Invalid directory column value";
     }
     return null;
   }
@@ -409,6 +411,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 519625a2c4..34ece8a523 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
@@ -269,7 +269,7 @@ public class MetadataConstraintsTest {
         BulkFileColumnFamily.NAME, StoredTabletFile
             .of(new 
Path("hdfs://1.2.3.4/accumulo/tables/2a/t-0003/someFile")).getMetadataText(),
         new Value(fateId1.canonical()));
-    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());
 
@@ -608,6 +608,24 @@ public class MetadataConstraintsTest {
     assertEquals(Short.valueOf((short) 15), violations.get(0));
   }
 
+  @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