HDDS-1093. Configuration tab in OM/SCM ui is not displaying the correct values.

This commit is contained in:
Vivek Ratnavel Subramanian 2019-03-06 17:43:57 -08:00 committed by Bharat Viswanadham
parent 618e009ac0
commit a55fc36299
7 changed files with 197 additions and 5 deletions

View File

@ -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
* if or not node is healthy

View File

@ -30,7 +30,9 @@ import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.Properties;
/**
* Configuration for ozone.
@ -161,4 +163,31 @@ public class OzoneConfiguration extends Configuration {
Configuration.addDefaultResource("ozone-default.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;
}
}

View File

@ -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");
}
}

View File

@ -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;

View File

@ -308,7 +308,6 @@
ctrl.convertToArray(response.data);
ctrl.configs = Object.values(ctrl.keyTagMap);
ctrl.component = 'All';
console.log("ajay -> " + JSON.stringify(ctrl.configs));
ctrl.sortBy('name');
});
};
@ -326,7 +325,6 @@
if (ctrl.component != 'All' && (item['tag'].indexOf(ctrl
.component) < 0)) {
console.log(item['name'] + " false tag " + item['tag']);
return false;
}

View File

@ -518,7 +518,7 @@ public class TestSCMNodeManager {
// 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.
// 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);
List<DatanodeDetails> staleList = nodeManager.getNodes(STALE);
List<DatanodeDetails> deadList = nodeManager.getNodes(DEAD);

View File

@ -45,7 +45,7 @@ wait_for_datanodes(){
#Print it only if a number. Could be not a number if scm is not yet started
if [[ "$datanodes" ]]; then
echo "$datanodes datanode is up and healhty (until now)"
echo "$datanodes datanode is up and healthy (until now)"
fi
fi