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 {