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();

Reply via email to