HDDS-1093. Configuration tab in OM/SCM ui is not displaying the correct values.
(cherry picked from commit a55fc36299
)
This commit is contained in:
parent
9cd3fe49cf
commit
67a26ac793
|
@ -249,7 +249,7 @@ public class NodeHealthScriptRunner extends AbstractService {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets if the node is healhty or not considering disks' health also.
|
* Sets if the node is healthy or not considering disks' health also.
|
||||||
*
|
*
|
||||||
* @param isHealthy
|
* @param isHealthy
|
||||||
* if or not node is healthy
|
* if or not node is healthy
|
||||||
|
|
|
@ -30,7 +30,9 @@ import javax.xml.bind.annotation.XmlElement;
|
||||||
import javax.xml.bind.annotation.XmlRootElement;
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Enumeration;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configuration for ozone.
|
* Configuration for ozone.
|
||||||
|
@ -161,4 +163,31 @@ public class OzoneConfiguration extends Configuration {
|
||||||
Configuration.addDefaultResource("ozone-default.xml");
|
Configuration.addDefaultResource("ozone-default.xml");
|
||||||
Configuration.addDefaultResource("ozone-site.xml");
|
Configuration.addDefaultResource("ozone-site.xml");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The super class method getAllPropertiesByTag
|
||||||
|
* does not override values of properties
|
||||||
|
* if there is no tag present in the configs of
|
||||||
|
* newly added resources.
|
||||||
|
* @param tag
|
||||||
|
* @return Properties that belong to the tag
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public Properties getAllPropertiesByTag(String tag) {
|
||||||
|
// Call getProps first to load the newly added resources
|
||||||
|
// before calling super.getAllPropertiesByTag
|
||||||
|
Properties updatedProps = getProps();
|
||||||
|
Properties propertiesByTag = super.getAllPropertiesByTag(tag);
|
||||||
|
Properties props = new Properties();
|
||||||
|
Enumeration properties = propertiesByTag.propertyNames();
|
||||||
|
while (properties.hasMoreElements()) {
|
||||||
|
Object propertyName = properties.nextElement();
|
||||||
|
// get the current value of the property
|
||||||
|
Object value = updatedProps.getProperty(propertyName.toString());
|
||||||
|
if (value != null) {
|
||||||
|
props.put(propertyName, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return props;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
/**
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you 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
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* 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.apache.hadoop.hdds.conf;
|
||||||
|
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.fs.Path;
|
||||||
|
import org.junit.Rule;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.rules.TemporaryFolder;
|
||||||
|
|
||||||
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test class for OzoneConfiguration.
|
||||||
|
*/
|
||||||
|
public class TestOzoneConfiguration {
|
||||||
|
|
||||||
|
private Configuration conf;
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public TemporaryFolder tempConfigs = new TemporaryFolder();
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() throws Exception {
|
||||||
|
conf = new OzoneConfiguration();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startConfig(BufferedWriter out) throws IOException {
|
||||||
|
out.write("<?xml version=\"1.0\"?>\n");
|
||||||
|
out.write("<configuration>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void endConfig(BufferedWriter out) throws IOException {
|
||||||
|
out.write("</configuration>\n");
|
||||||
|
out.flush();
|
||||||
|
out.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetAllPropertiesByTags() throws Exception {
|
||||||
|
File coreDefault = tempConfigs.newFile("core-default-test.xml");
|
||||||
|
File coreSite = tempConfigs.newFile("core-site-test.xml");
|
||||||
|
try (BufferedWriter out = new BufferedWriter(new FileWriter(coreDefault))) {
|
||||||
|
startConfig(out);
|
||||||
|
appendProperty(out, "hadoop.tags.system", "YARN,HDFS,NAMENODE");
|
||||||
|
appendProperty(out, "hadoop.tags.custom", "MYCUSTOMTAG");
|
||||||
|
appendPropertyByTag(out, "dfs.cblock.trace.io", "false", "YARN");
|
||||||
|
appendPropertyByTag(out, "dfs.replication", "1", "HDFS");
|
||||||
|
appendPropertyByTag(out, "dfs.namenode.logging.level", "INFO",
|
||||||
|
"NAMENODE");
|
||||||
|
appendPropertyByTag(out, "dfs.random.key", "XYZ", "MYCUSTOMTAG");
|
||||||
|
endConfig(out);
|
||||||
|
|
||||||
|
Path fileResource = new Path(coreDefault.getAbsolutePath());
|
||||||
|
conf.addResource(fileResource);
|
||||||
|
Assert.assertEquals(conf.getAllPropertiesByTag("MYCUSTOMTAG")
|
||||||
|
.getProperty("dfs.random.key"), "XYZ");
|
||||||
|
}
|
||||||
|
|
||||||
|
try (BufferedWriter out = new BufferedWriter(new FileWriter(coreSite))) {
|
||||||
|
startConfig(out);
|
||||||
|
appendProperty(out, "dfs.random.key", "ABC");
|
||||||
|
appendProperty(out, "dfs.replication", "3");
|
||||||
|
appendProperty(out, "dfs.cblock.trace.io", "true");
|
||||||
|
endConfig(out);
|
||||||
|
|
||||||
|
Path fileResource = new Path(coreSite.getAbsolutePath());
|
||||||
|
conf.addResource(fileResource);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test if values are getting overridden even without tags being present
|
||||||
|
Assert.assertEquals("3", conf.getAllPropertiesByTag("HDFS")
|
||||||
|
.getProperty("dfs.replication"));
|
||||||
|
Assert.assertEquals("ABC", conf.getAllPropertiesByTag("MYCUSTOMTAG")
|
||||||
|
.getProperty("dfs.random.key"));
|
||||||
|
Assert.assertEquals("true", conf.getAllPropertiesByTag("YARN")
|
||||||
|
.getProperty("dfs.cblock.trace.io"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendProperty(BufferedWriter out, String name, String val)
|
||||||
|
throws IOException {
|
||||||
|
this.appendProperty(out, name, val, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendProperty(BufferedWriter out, String name, String val,
|
||||||
|
boolean isFinal) throws IOException {
|
||||||
|
out.write("<property>");
|
||||||
|
out.write("<name>");
|
||||||
|
out.write(name);
|
||||||
|
out.write("</name>");
|
||||||
|
out.write("<value>");
|
||||||
|
out.write(val);
|
||||||
|
out.write("</value>");
|
||||||
|
if (isFinal) {
|
||||||
|
out.write("<final>true</final>");
|
||||||
|
}
|
||||||
|
out.write("</property>\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendPropertyByTag(BufferedWriter out, String name, String val,
|
||||||
|
String tags) throws IOException {
|
||||||
|
this.appendPropertyByTag(out, name, val, false, tags);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void appendPropertyByTag(BufferedWriter out, String name, String val,
|
||||||
|
boolean isFinal,
|
||||||
|
String tag) throws IOException {
|
||||||
|
out.write("<property>");
|
||||||
|
out.write("<name>");
|
||||||
|
out.write(name);
|
||||||
|
out.write("</name>");
|
||||||
|
out.write("<value>");
|
||||||
|
out.write(val);
|
||||||
|
out.write("</value>");
|
||||||
|
if (isFinal) {
|
||||||
|
out.write("<final>true</final>");
|
||||||
|
}
|
||||||
|
out.write("<tag>");
|
||||||
|
out.write(tag);
|
||||||
|
out.write("</tag>");
|
||||||
|
out.write("</property>\n");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Licensed to the Apache Software Foundation (ASF) under one
|
||||||
|
* or more contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. The ASF licenses this file
|
||||||
|
* to you 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This package contains the OzoneConfiguration related tests.
|
||||||
|
*/
|
||||||
|
package org.apache.hadoop.hdds.conf;
|
|
@ -308,7 +308,6 @@
|
||||||
ctrl.convertToArray(response.data);
|
ctrl.convertToArray(response.data);
|
||||||
ctrl.configs = Object.values(ctrl.keyTagMap);
|
ctrl.configs = Object.values(ctrl.keyTagMap);
|
||||||
ctrl.component = 'All';
|
ctrl.component = 'All';
|
||||||
console.log("ajay -> " + JSON.stringify(ctrl.configs));
|
|
||||||
ctrl.sortBy('name');
|
ctrl.sortBy('name');
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -326,7 +325,6 @@
|
||||||
|
|
||||||
if (ctrl.component != 'All' && (item['tag'].indexOf(ctrl
|
if (ctrl.component != 'All' && (item['tag'].indexOf(ctrl
|
||||||
.component) < 0)) {
|
.component) < 0)) {
|
||||||
console.log(item['name'] + " false tag " + item['tag']);
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -518,7 +518,7 @@ public class TestSCMNodeManager {
|
||||||
|
|
||||||
// 3.5 seconds have elapsed for stale node, so it moves into Stale.
|
// 3.5 seconds have elapsed for stale node, so it moves into Stale.
|
||||||
// 7 seconds have elapsed for dead node, so it moves into dead.
|
// 7 seconds have elapsed for dead node, so it moves into dead.
|
||||||
// 2 Seconds have elapsed for healthy node, so it stays in healhty state.
|
// 2 Seconds have elapsed for healthy node, so it stays in healthy state.
|
||||||
healthyList = nodeManager.getNodes(HEALTHY);
|
healthyList = nodeManager.getNodes(HEALTHY);
|
||||||
List<DatanodeDetails> staleList = nodeManager.getNodes(STALE);
|
List<DatanodeDetails> staleList = nodeManager.getNodes(STALE);
|
||||||
List<DatanodeDetails> deadList = nodeManager.getNodes(DEAD);
|
List<DatanodeDetails> deadList = nodeManager.getNodes(DEAD);
|
||||||
|
|
|
@ -45,7 +45,7 @@ wait_for_datanodes(){
|
||||||
|
|
||||||
#Print it only if a number. Could be not a number if scm is not yet started
|
#Print it only if a number. Could be not a number if scm is not yet started
|
||||||
if [[ "$datanodes" ]]; then
|
if [[ "$datanodes" ]]; then
|
||||||
echo "$datanodes datanode is up and healhty (until now)"
|
echo "$datanodes datanode is up and healthy (until now)"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue