Skip to content

Commit

Permalink
Allow removal of global configuration properties
Browse files Browse the repository at this point in the history
Signed-off-by: Clement de Groc <[email protected]>
  • Loading branch information
cdegroc committed Jun 17, 2022
1 parent 2641530 commit 0ea6d70
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -96,24 +96,28 @@ public UserModifiableConfiguration set(String path, Object value) {
Preconditions.checkArgument(pp.element.isOption(),"Need to provide configuration option - not namespace: %s",path);
ConfigOption option = (ConfigOption)pp.element;
verifier.verifyModification(option);
if (option.getDatatype().isArray()) {
Class arrayType = option.getDatatype().getComponentType();
Object arr;
if (value.getClass().isArray()) {
int size = Array.getLength(value);
arr = Array.newInstance(arrayType,size);
for (int i=0;i<size;i++) {
Array.set(arr,i,convertBasic(Array.get(value,i),arrayType));
if (value == null) {
config.remove(option, pp.umbrellaElements);
} else {
if (option.getDatatype().isArray()) {
Class arrayType = option.getDatatype().getComponentType();
Object arr;
if (value.getClass().isArray()) {
int size = Array.getLength(value);
arr = Array.newInstance(arrayType, size);
for (int i = 0; i < size; i++) {
Array.set(arr, i, convertBasic(Array.get(value, i), arrayType));
}
} else {
arr = Array.newInstance(arrayType, 1);
Array.set(arr, 0, convertBasic(value, arrayType));
}
value = arr;
} else {
arr = Array.newInstance(arrayType,1);
Array.set(arr,0,convertBasic(value,arrayType));
value = convertBasic(value, option.getDatatype());
}
value = arr;
} else {
value = convertBasic(value,option.getDatatype());
config.set(option, value, pp.umbrellaElements);
}
config.set(option,value,pp.umbrellaElements);
return this;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Copyright 2022 JanusGraph Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package org.janusgraph.diskstorage.configuration;

import org.apache.commons.configuration2.BaseConfiguration;
import org.janusgraph.diskstorage.configuration.backend.CommonsConfiguration;
import org.janusgraph.graphdb.configuration.GraphDatabaseConfiguration;
import org.janusgraph.util.system.ConfigurationUtil;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;

public class UserModifiableConfigurationTest {

private UserModifiableConfiguration newBaseConfiguration() {
final BaseConfiguration base = ConfigurationUtil.createBaseConfiguration();
final CommonsConfiguration config = new CommonsConfiguration(base);
return new UserModifiableConfiguration(new ModifiableConfiguration(GraphDatabaseConfiguration.ROOT_NS, config.copy(), BasicConfiguration.Restriction.NONE));
}

@Test
public void testRemove() {
UserModifiableConfiguration configuration = newBaseConfiguration();
configuration.set("storage.backend", "inmemory");
assertEquals("inmemory", configuration.get("storage.backend"));

configuration.set("storage.backend", null);
assertEquals("null", configuration.get("storage.backend"));

configuration.set("index.search.backend", "lucene");
assertEquals("lucene", configuration.get("index.search.backend"));
assertEquals("+ search\n", configuration.get("index"));

configuration.set("index.search.backend", null);
assertEquals("", configuration.get("index"));
}
}

0 comments on commit 0ea6d70

Please sign in to comment.