You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by sm...@apache.org on 2020/01/22 06:28:59 UTC
[knox] branch master updated: KNOX-2188 - Handling discovery
details via advanced configuration (#240)
This is an automated email from the ASF dual-hosted git repository.
smolnar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new 5bea67f KNOX-2188 - Handling discovery details via advanced configuration (#240)
5bea67f is described below
commit 5bea67f7d6fbab6cf5ec6e658c46dfbe3fa222d5
Author: Sandor Molnar <sm...@apache.org>
AuthorDate: Wed Jan 22 07:28:51 2020 +0100
KNOX-2188 - Handling discovery details via advanced configuration (#240)
---
.../ClouderaManagerDescriptorParser.java | 16 +++++++++++++
.../advanced/AdvancedServiceDiscoveryConfig.java | 12 +++++++++-
.../ClouderaManagerDescriptorParserTest.java | 18 +++++++++++++++
.../testDescriptorWithoutDiscoveryDetails.xml | 27 ++++++++++++++++++++++
4 files changed, 72 insertions(+), 1 deletion(-)
diff --git a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
index 2986136..e4ca4d4 100644
--- a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
+++ b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParser.java
@@ -23,6 +23,7 @@ import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
+import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.knox.gateway.ClouderaManagerIntegrationMessages;
import org.apache.knox.gateway.i18n.messages.MessagesFactory;
@@ -121,6 +122,7 @@ public class ClouderaManagerDescriptorParser implements AdvancedServiceDiscovery
}
}
if (advancedServiceDiscoveryConfig.getExpectedTopologyNames().contains(name)) {
+ setDiscoveryDetails(descriptor);
addEnabledServices(descriptor);
}
return descriptor;
@@ -130,6 +132,20 @@ public class ClouderaManagerDescriptorParser implements AdvancedServiceDiscovery
}
}
+ private void setDiscoveryDetails(SimpleDescriptorImpl descriptor) {
+ if (StringUtils.isBlank(descriptor.getDiscoveryAddress())) {
+ descriptor.setDiscoveryAddress(advancedServiceDiscoveryConfig.getDiscoveryAddress());
+ }
+
+ if (StringUtils.isBlank(descriptor.getCluster())) {
+ descriptor.setCluster(advancedServiceDiscoveryConfig.getDiscoveryCluster());
+ }
+
+ if (StringUtils.isBlank(descriptor.getDiscoveryType())) {
+ descriptor.setDiscoveryType("ClouderaManager");
+ }
+ }
+
/*
* Adds any enabled service which is not listed in the CM descriptor
*/
diff --git a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
index 11fc56e..17308cc 100644
--- a/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
+++ b/gateway-cm-integration/src/main/java/org/apache/knox/gateway/topology/discovery/advanced/AdvancedServiceDiscoveryConfig.java
@@ -32,6 +32,8 @@ public class AdvancedServiceDiscoveryConfig {
public static final String PARAMETER_NAME_PREFIX_ENABLED_SERVICE = "gateway.auto.discovery.enabled.";
public static final String PARAMETER_NAME_EXPECTED_TOPOLOGIES = "gateway.auto.discovery.expected.topology.names";
+ public static final String PARAMETER_NAME_DISCOVERY_ADDRESS = "gateway.auto.discovery.address";
+ public static final String PARAMETER_NAME_DISCOVERY_CLUSTER = "gateway.auto.discovery.cluster";
private final Properties properties;
@@ -53,7 +55,15 @@ public class AdvancedServiceDiscoveryConfig {
}
public Set<String> getExpectedTopologyNames() {
- return Stream.of(properties.getProperty(PARAMETER_NAME_EXPECTED_TOPOLOGIES, "").split(",")).map(expectedToplogyName -> expectedToplogyName.trim()).collect(toSet());
+ return Stream.of(getPropertyIgnoreCase(PARAMETER_NAME_EXPECTED_TOPOLOGIES, "").split(",")).map(expectedToplogyName -> expectedToplogyName.trim()).collect(toSet());
+ }
+
+ public String getDiscoveryAddress() {
+ return getPropertyIgnoreCase(PARAMETER_NAME_DISCOVERY_ADDRESS, "");
+ }
+
+ public String getDiscoveryCluster() {
+ return getPropertyIgnoreCase(PARAMETER_NAME_DISCOVERY_CLUSTER, "");
}
private String getPropertyIgnoreCase(String propertyName, String defaultValue) {
diff --git a/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java b/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
index 023d7be..fa760bf 100644
--- a/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
+++ b/gateway-cm-integration/src/test/java/org/apache/knox/gateway/cm/descriptor/ClouderaManagerDescriptorParserTest.java
@@ -106,6 +106,24 @@ public class ClouderaManagerDescriptorParserTest {
assertNull(descriptor.getService("OOZIE"));
}
+ @Test
+ public void testSettingDiscoveryDetails() throws Exception {
+ final String address = "http://myCmHost:7180";
+ final String cluster = "My Test Cluster";
+ final String testConfigPath = this.getClass().getClassLoader().getResource("testDescriptorWithoutDiscoveryDetails.xml").getPath();
+ final Properties advancedConfiguration = new Properties();
+ advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_EXPECTED_TOPOLOGIES, "topology1");
+ advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_DISCOVERY_ADDRESS, address);
+ advancedConfiguration.put(AdvancedServiceDiscoveryConfig.PARAMETER_NAME_DISCOVERY_CLUSTER, cluster);
+ cmDescriptorParser.onAdvancedServiceDiscoveryConfigurationChange(advancedConfiguration);
+ final Set<SimpleDescriptor> descriptors = cmDescriptorParser.parse(testConfigPath);
+ final Iterator<SimpleDescriptor> descriptorsIterator = descriptors.iterator();
+ SimpleDescriptor descriptor = descriptorsIterator.next();
+ assertEquals(address, descriptor.getDiscoveryAddress());
+ assertEquals(cluster, descriptor.getCluster());
+ assertEquals("ClouderaManager", descriptor.getDiscoveryType());
+ }
+
private void validateTopology1(SimpleDescriptor descriptor) {
assertEquals("topology1", descriptor.getName());
assertEquals("ClouderaManager", descriptor.getDiscoveryType());
diff --git a/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml b/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml
new file mode 100644
index 0000000..2773d35
--- /dev/null
+++ b/gateway-cm-integration/src/test/resources/testDescriptorWithoutDiscoveryDetails.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<configuration>
+ <property>
+ <name>topology1</name>
+ <value>
+ providerConfigRef=topology1-provider;
+ app:knoxauth:param1.name=param1.value;
+ app:admin-ui;
+ HIVE:url=http://localhost:123;
+ </value>
+ </property>
+</configuration>
\ No newline at end of file