This is an automated email from the ASF dual-hosted git repository.
ddanielr pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/2.1 by this push:
new ff9a3f7442 Setting empty property value no longer deletes property
(#4731)
ff9a3f7442 is described below
commit ff9a3f744206ebf6d8ff7dec9c869fe757c07c04
Author: Mark Owens <[email protected]>
AuthorDate: Tue Jul 23 16:27:04 2024 -0400
Setting empty property value no longer deletes property (#4731)
Modifed ManagerServiceClientHandler alterProperty method so it no
longer removes/deletes a property when set to null or empty string.
Added configPropertyTest integration tests to ShellIT.
---
.../manager/ManagerClientServiceHandler.java | 7 +++-
.../org/apache/accumulo/test/shell/ShellIT.java | 49 ++++++++++++++++++++++
2 files changed, 54 insertions(+), 2 deletions(-)
diff --git
a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java
b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java
index 1a8d0d0cac..ee914703cc 100644
---
a/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java
+++
b/server/manager/src/main/java/org/apache/accumulo/manager/ManagerClientServiceHandler.java
@@ -555,10 +555,13 @@ public class ManagerClientServiceHandler implements
ManagerClientService.Iface {
}
try {
- if (value == null || value.isEmpty()) {
+ if (op == TableOperation.REMOVE_PROPERTY) {
PropUtil.removeProperties(manager.getContext(),
TablePropKey.of(manager.getContext(), tableId), List.of(property));
- } else {
+ } else if (op == TableOperation.SET_PROPERTY) {
+ if (value == null || value.isEmpty()) {
+ value = "";
+ }
PropUtil.setProperties(manager.getContext(),
TablePropKey.of(manager.getContext(), tableId),
Map.of(property, value));
}
diff --git a/test/src/main/java/org/apache/accumulo/test/shell/ShellIT.java
b/test/src/main/java/org/apache/accumulo/test/shell/ShellIT.java
index 650ebac7c3..8e3ef9e867 100644
--- a/test/src/main/java/org/apache/accumulo/test/shell/ShellIT.java
+++ b/test/src/main/java/org/apache/accumulo/test/shell/ShellIT.java
@@ -31,6 +31,7 @@ import java.nio.file.Files;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Duration;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -475,6 +476,54 @@ public class ShellIT extends SharedMiniClusterBase {
exec("deletetable t -f", true, "Table: [t] has been deleted");
}
+ @Test
+ void configPropertyTest() throws IOException {
+ final String table = "testtable";
+ final String filterProperty = "config -t " + table + " -f ";
+ final String setProperty = "config -t " + table + " -s ";
+ List<String> expectedStrings = new ArrayList<>();
+
+ try {
+ exec("createtable " + table);
+
+ exec(filterProperty + "table.iterator.scan.vers.opt.maxVersions", true,
+ "table | table.iterator.scan.vers.opt.maxVersions .. | 1\n");
+ // set to new value and verify results
+ exec(setProperty + "table.iterator.scan.vers.opt.maxVersions=2", true);
+ exec(filterProperty + "table.iterator.scan.vers.opt.maxVersions", true,
+ "table | table.iterator.scan.vers.opt.maxVersions .. | 2\n");
+ // set to empty string and verify property still exists and is not
deleted
+ exec(setProperty + "table.iterator.scan.vers.opt.maxVersions=", true);
+ exec(filterProperty + "table.iterator.scan.vers.opt.maxVersions", true,
+ "table | table.iterator.scan.vers.opt.maxVersions .. | \n");
+
+ exec(filterProperty + "table.bloom.enabled", true,
+ "default | table.bloom.enabled ....................... |
false\n");
+ exec(setProperty + "table.bloom.enabled=true", true);
+ expectedStrings.add("default | table.bloom.enabled
....................... | false\n");
+ expectedStrings.add("table | @override
.............................. | true\n");
+ execExpectList(filterProperty + "table.bloom.enabled", true,
expectedStrings);
+ // can't set prop to empty value since type is Boolean
+ exec(setProperty + "table.bloom.enabled=failsSinceNotABoolean", false);
+
+ exec(filterProperty + "table.file.compress.type", true,
+ "default | table.file.compress.type .................. | gz\n");
+ exec(setProperty + "table.file.compress.type=zippy", true);
+ expectedStrings.clear();
+ expectedStrings.add("default | table.file.compress.type
.................. | gz\n");
+ expectedStrings.add("table | @override
.............................. | zippy");
+ execExpectList(filterProperty + "table.file.compress.type", true,
expectedStrings);
+ exec(setProperty + "table.file.compress.type=", true);
+ expectedStrings.clear();
+ expectedStrings.add("default | table.file.compress.type
.................. | gz\n");
+ expectedStrings.add("table | @override
.............................. | \n");
+ execExpectList(filterProperty + "table.file.compress.type", true,
expectedStrings);
+
+ } finally {
+ exec("deletetable " + table + " -f", true);
+ }
+ }
+
@Test
void configTest() throws IOException {
Shell.log.debug("Starting config property type test
-------------------------");