Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import static org.apache.hadoop.hdds.protocol.DatanodeDetails.Port.Name.HTTP;
import static org.apache.hadoop.hdds.protocol.DatanodeDetails.Port.Name.HTTPS;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_ADDRESS_KEY;
import static org.apache.hadoop.hdds.scm.ScmConfigKeys.OZONE_SCM_NODES_KEY;
import static org.apache.hadoop.hdds.utils.HddsServerUtil.getRemoteUser;
import static org.apache.hadoop.hdds.utils.HddsServerUtil.getScmSecurityClientWithMaxRetry;
Expand Down Expand Up @@ -93,6 +94,7 @@
import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
import org.apache.hadoop.ozone.container.common.volume.StorageVolume;
import org.apache.hadoop.ozone.container.diskbalancer.DiskBalancerProtocolServer;
import org.apache.hadoop.ozone.ha.ConfUtils;
import org.apache.hadoop.ozone.util.OzoneNetUtils;
import org.apache.hadoop.ozone.util.ShutdownHookManager;
import org.apache.hadoop.security.SecurityUtil;
Expand Down Expand Up @@ -313,9 +315,11 @@ public String getNamespace() {
this::reconfigReplicationStreamsLimit);

scmServiceId = HddsUtils.getScmServiceId(conf);

if (scmServiceId != null) {
reconfigurationHandler.register(OZONE_SCM_NODES_KEY + "." + scmServiceId,
this::reconfigScmNodes);
reconfigurationHandler
.registerPrefix(ConfUtils.addKeySuffixes(OZONE_SCM_ADDRESS_KEY, scmServiceId))
.register(OZONE_SCM_NODES_KEY + "." + scmServiceId, this::reconfigScmNodes);
}

reconfigurationHandler.setReconfigurationCompleteCallback(reconfigurationHandler.defaultLoggingCallback());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,13 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.function.BiConsumer;
import java.util.function.UnaryOperator;
import org.apache.hadoop.conf.Configuration;
Expand All @@ -51,6 +53,7 @@ public class ReconfigurationHandler extends ReconfigurableBase
private final CheckedConsumer<String, IOException> requireAdminPrivilege;
private final Map<String, UnaryOperator<String>> properties =
new ConcurrentHashMap<>();
private final Set<String> prefixProperties = new ConcurrentSkipListSet<>();

private final List<ReconfigurationChangeCallback> completeCallbacks = new ArrayList<>();
private BiConsumer<ReconfigurationTaskStatus, Configuration> reconfigurationStatusListener;
Expand Down Expand Up @@ -122,14 +125,33 @@ public ReconfigurationHandler register(ReconfigurableConfig config) {
return this;
}

public ReconfigurationHandler registerPrefix(String prefixProperty) {
prefixProperties.add(
prefixProperty.endsWith(".") ? prefixProperty : prefixProperty.concat(".")
);
return this;
}

@Override
protected Configuration getNewConf() {
return new OzoneConfiguration();
}

@Override
public Set<String> getReconfigurableProperties() {
return unmodifiableSet(properties.keySet());
Set<String> reconfigureProperties = new HashSet<>(properties.keySet());
reconfigureProperties.addAll(prefixProperties);
return unmodifiableSet(reconfigureProperties);
}

@Override
public boolean isPropertyReconfigurable(String property) {
for (String prefixProperty : prefixProperties) {
if (property.startsWith(prefixProperty)) {
return true;
}
}
return properties.containsKey(property);
}

@Override
Expand Down Expand Up @@ -164,7 +186,9 @@ public ReconfigurationTaskStatus getReconfigureStatus() throws IOException {
@Override
public List<String> listReconfigureProperties() throws IOException {
requireAdminPrivilege.accept("listReconfigurableProperties");
return new ArrayList<>(new TreeSet<>(getReconfigurableProperties()));
Set<String> reconfigureProperties = new TreeSet<>(getReconfigurableProperties());
reconfigureProperties.addAll(prefixProperties);
return new ArrayList<>(reconfigureProperties);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,9 @@ void testSCMMigration() throws Exception {
for (StorageContainerManager scm : cluster.getStorageContainerManagers()) {
String scmAddrKey = ConfUtils.addKeySuffixes(
ScmConfigKeys.OZONE_SCM_ADDRESS_KEY, scmServiceId, scm.getSCMNodeId());
datanode.getConf().set(scmAddrKey, cluster.getConf().get(scmAddrKey));
assertTrue(datanode.getReconfigurationHandler().isPropertyReconfigurable(scmAddrKey));
datanode.getReconfigurationHandler().reconfigureProperty(scmAddrKey,
cluster.getConf().get(scmAddrKey));
String dnPortKey = ConfUtils.addKeySuffixes(
ScmConfigKeys.OZONE_SCM_DATANODE_ADDRESS_KEY, scmServiceId, scm.getSCMNodeId());
datanode.getConf().set(dnPortKey, cluster.getConf().get(dnPortKey));
Expand Down Expand Up @@ -273,7 +275,9 @@ void testAddAndRemoveOneSCM() throws Exception {
for (StorageContainerManager scm : cluster.getStorageContainerManagers()) {
String scmAddrKey = ConfUtils.addKeySuffixes(
ScmConfigKeys.OZONE_SCM_ADDRESS_KEY, scmServiceId, scm.getSCMNodeId());
datanode.getConf().set(scmAddrKey, cluster.getConf().get(scmAddrKey));
assertTrue(datanode.getReconfigurationHandler().isPropertyReconfigurable(scmAddrKey));
datanode.getReconfigurationHandler().reconfigureProperty(scmAddrKey,
cluster.getConf().get(scmAddrKey));
String dnPortKey = ConfUtils.addKeySuffixes(
ScmConfigKeys.OZONE_SCM_DATANODE_ADDRESS_KEY, scmServiceId, scm.getSCMNodeId());
datanode.getConf().set(dnPortKey, cluster.getConf().get(dnPortKey));
Expand Down