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 <[email protected]>
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 {