This is an automated email from the ASF dual-hosted git repository.
amagyar 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 6512cc870 KNOX-2884 - Skip generating read-only descriptor and
provider generation from hxr (#734)
6512cc870 is described below
commit 6512cc8703385d7daebfbd434b6638eed1b609dc
Author: Attila Magyar <[email protected]>
AuthorDate: Wed Mar 1 17:33:24 2023 +0100
KNOX-2884 - Skip generating read-only descriptor and provider generation
from hxr (#734)
---
.../hadoop/xml/HadoopXmlResourceMessages.java | 9 ++++++
.../hadoop/xml/HadoopXmlResourceMonitor.java | 2 +-
.../hadoop/xml/HadoopXmlResourceParser.java | 32 ++++++++++++++--------
.../hadoop/xml/HadoopXmlResourceParserTest.java | 31 +++++++++++++++++++++
4 files changed, 62 insertions(+), 12 deletions(-)
diff --git
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMessages.java
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMessages.java
index 64b12100f..b849c5823 100644
---
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMessages.java
+++
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMessages.java
@@ -60,9 +60,18 @@ public interface HadoopXmlResourceMessages {
@Message(level = MessageLevel.ERROR, text = "Error while producing Knox
descriptor: {0}")
void failedToProduceKnoxDescriptor(String errorMessage, @StackTrace(level =
MessageLevel.DEBUG) Exception e);
+ @Message(level = MessageLevel.ERROR, text = "Error while producing Knox
provider: {0}")
+ void failedToProduceKnoxProvider(String errorMessage, @StackTrace(level =
MessageLevel.DEBUG) Exception e);
+
@Message(level = MessageLevel.WARN, text = "Service {0} is disabled. It will
NOT be added in {1}")
void serviceDisabled(String serviceName, String descriptorName);
@Message(level = MessageLevel.INFO, text = "Updated advanced service
discovery configuration for {0}.")
void updatedAdvanceServiceDiscoverytConfiguration(String topologyName);
+
+ @Message(level = MessageLevel.WARN, text = "Skipping read only descriptor:
{0}.")
+ void skipReadOnlyDescriptor(String name);
+
+ @Message(level = MessageLevel.WARN, text = "Skipping read only provider:
{0}.")
+ void skipReadOnlyProvider(String key);
}
diff --git
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMonitor.java
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMonitor.java
index 613d2bfab..00ed45737 100644
---
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMonitor.java
+++
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceMonitor.java
@@ -111,7 +111,7 @@ public class HadoopXmlResourceMonitor implements
AdvancedServiceDiscoveryConfigC
LOG.resourceDidNotChange(key, "shared provider");
}
} catch (IOException e) {
- e.printStackTrace();
+ LOG.failedToProduceKnoxProvider(e.getMessage(), e);
}
});
}
diff --git
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParser.java
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParser.java
index 25455835b..3ce78ff17 100644
---
a/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParser.java
+++
b/gateway-topology-hadoop-xml/src/main/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParser.java
@@ -73,8 +73,10 @@ public class HadoopXmlResourceParser implements
AdvancedServiceDiscoveryConfigCh
private final Map<String, AdvancedServiceDiscoveryConfig>
advancedServiceDiscoveryConfigMap;
private final String sharedProvidersDir;
+ private final GatewayConfig gatewayConfig;
public HadoopXmlResourceParser(GatewayConfig gatewayConfig) {
+ this.gatewayConfig = gatewayConfig;
this.advancedServiceDiscoveryConfigMap = new ConcurrentHashMap<>();
this.sharedProvidersDir = gatewayConfig.getGatewayProvidersConfigDir();
}
@@ -131,21 +133,29 @@ public class HadoopXmlResourceParser implements
AdvancedServiceDiscoveryConfigCh
if (xmlConfigurationKey.startsWith(CONFIG_NAME_PROVIDER_CONFIGS_PREFIX))
{
final String[] providerConfigurations =
xmlConfigurationKey.replace(CONFIG_NAME_PROVIDER_CONFIGS_PREFIX, "").split(",");
Arrays.asList(providerConfigurations).stream().map(providerConfigurationName ->
providerConfigurationName.trim()).forEach(providerConfigurationName -> {
- final File providerConfigFile =
resolveProviderConfiguration(providerConfigurationName);
- try {
- final ProviderConfiguration providerConfiguration =
getProviderConfiguration(providers, providerConfigFile,
providerConfigurationName);
- providerConfiguration.setReadOnly(true);
-
providerConfiguration.saveOrUpdateProviders(parseProviderConfigurations(xmlDescriptor.getValue(),
providerConfiguration));
- providers.put(providerConfigurationName, providerConfiguration);
- } catch (Exception e) {
- log.failedToParseProviderConfiguration(providerConfigurationName,
e.getMessage(), e);
+ if
(gatewayConfig.getReadOnlyOverrideProviderNames().contains(providerConfigurationName))
{
+ log.skipReadOnlyProvider(providerConfigurationName);
+ } else {
+ final File providerConfigFile =
resolveProviderConfiguration(providerConfigurationName);
+ try {
+ final ProviderConfiguration providerConfiguration =
getProviderConfiguration(providers, providerConfigFile,
providerConfigurationName);
+ providerConfiguration.setReadOnly(true);
+
providerConfiguration.saveOrUpdateProviders(parseProviderConfigurations(xmlDescriptor.getValue(),
providerConfiguration));
+ providers.put(providerConfigurationName, providerConfiguration);
+ } catch (Exception e) {
+
log.failedToParseProviderConfiguration(providerConfigurationName,
e.getMessage(), e);
+ }
}
});
} else {
if (topologyName == null || xmlConfigurationKey.equals(topologyName)) {
- SimpleDescriptor descriptor =
parseXmlDescriptor(xmlConfigurationKey, xmlDescriptor.getValue());
- if (descriptor != null) {
- descriptors.add(descriptor);
+ if
(gatewayConfig.getReadOnlyOverrideTopologyNames().contains(xmlConfigurationKey))
{
+ log.skipReadOnlyDescriptor(xmlConfigurationKey);
+ } else {
+ SimpleDescriptor descriptor =
parseXmlDescriptor(xmlConfigurationKey, xmlDescriptor.getValue());
+ if (descriptor != null) {
+ descriptors.add(descriptor);
+ }
}
}
}
diff --git
a/gateway-topology-hadoop-xml/src/test/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParserTest.java
b/gateway-topology-hadoop-xml/src/test/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParserTest.java
index a87a423fd..e8ff1ceb5 100644
---
a/gateway-topology-hadoop-xml/src/test/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParserTest.java
+++
b/gateway-topology-hadoop-xml/src/test/java/org/apache/knox/gateway/topology/hadoop/xml/HadoopXmlResourceParserTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.fail;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -56,12 +57,16 @@ public class HadoopXmlResourceParserTest {
private GatewayConfig gatewayConfigMock;
private HadoopXmlResourceParser hadoopXmlResourceParser;
private File providersDir;
+ private List<String> readOnlyProviders = new ArrayList<>();
+ private List<String> readOnlyTopologies = new ArrayList<>();
@Before
public void setUp() throws IOException {
providersDir = tempDir.newFolder("shared-providers");
gatewayConfigMock = EasyMock.createNiceMock(GatewayConfig.class);
EasyMock.expect(gatewayConfigMock.getGatewayProvidersConfigDir()).andReturn(providersDir.getAbsolutePath()).anyTimes();
+
EasyMock.expect(gatewayConfigMock.getReadOnlyOverrideProviderNames()).andReturn(readOnlyProviders).anyTimes();
+
EasyMock.expect(gatewayConfigMock.getReadOnlyOverrideTopologyNames()).andReturn(readOnlyTopologies).anyTimes();
EasyMock.replay(gatewayConfigMock);
hadoopXmlResourceParser = new HadoopXmlResourceParser(gatewayConfigMock);
}
@@ -78,6 +83,32 @@ public class HadoopXmlResourceParserTest {
validateTestDescriptorProviderConfigs(parserResult.getProviders(),
"ldap://localhost:33389");
}
+ @Test
+ public void testFilteredDescriptorName() throws Exception {
+ readOnlyTopologies.add("topology1");
+ final String testConfigPath =
this.getClass().getClassLoader().getResource("testDescriptor.xml").getPath();
+ final HadoopXmlResourceParserResult parserResult =
hadoopXmlResourceParser.parse(testConfigPath);
+ final Set<SimpleDescriptor> descriptors = parserResult.getDescriptors();
+ assertEquals(1, descriptors.size());
+ final Iterator<SimpleDescriptor> descriptorsIterator =
descriptors.iterator();
+ validateTopology2Descriptors(descriptorsIterator.next(), true);
+ validateTestDescriptorProviderConfigs(parserResult.getProviders(),
"ldap://localhost:33389");
+ }
+
+ @Test
+ public void testFilteredProviderName() throws Exception {
+ readOnlyProviders.add("knoxsso");
+ final String testConfigPath =
this.getClass().getClassLoader().getResource("testDescriptor.xml").getPath();
+ final HadoopXmlResourceParserResult parserResult =
hadoopXmlResourceParser.parse(testConfigPath);
+ final Set<SimpleDescriptor> descriptors = parserResult.getDescriptors();
+ assertEquals(2, descriptors.size());
+ final Iterator<SimpleDescriptor> descriptorsIterator =
descriptors.iterator();
+ validateTopology1Descriptors(descriptorsIterator.next());
+ validateTopology2Descriptors(descriptorsIterator.next(), true);
+ assertEquals(1, parserResult.getProviders().size());
+ assertNotNull(parserResult.getProviders().get("admin"));
+ }
+
@Test
public void testCMDescriptorParserOnlyTopology2() throws Exception {
final String testConfigPath =
this.getClass().getClassLoader().getResource("testDescriptor.xml").getPath();