From bbb10eb76c4f74583815a7d818c4b6f0f941ddbf Mon Sep 17 00:00:00 2001 From: he1l0world Date: Tue, 17 Jun 2025 04:16:28 -0400 Subject: [PATCH 1/6] improve the getConfigResources --- .../impl/DefaultModuleDefinitionSet.java | 81 +++++++++++-------- 1 file changed, 48 insertions(+), 33 deletions(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index 2a6d0b63e5c2..768c153b9964 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -18,6 +18,20 @@ */ package org.apache.cloudstack.spring.module.model.impl; +import org.apache.cloudstack.spring.module.context.ResourceApplicationContext; +import org.apache.cloudstack.spring.module.model.ModuleDefinition; +import org.apache.cloudstack.spring.module.model.ModuleDefinitionSet; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import org.springframework.core.io.UrlResource; +import org.springframework.util.StringUtils; + import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -32,21 +46,6 @@ import java.util.Set; import java.util.Stack; -import org.apache.commons.io.IOUtils; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.LogManager; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.util.StringUtils; - -import org.apache.cloudstack.spring.module.context.ResourceApplicationContext; -import org.apache.cloudstack.spring.module.model.ModuleDefinition; -import org.apache.cloudstack.spring.module.model.ModuleDefinitionSet; - public class DefaultModuleDefinitionSet implements ModuleDefinitionSet { protected Logger logger = LogManager.getLogger(getClass()); @@ -61,6 +60,9 @@ public class DefaultModuleDefinitionSet implements ModuleDefinitionSet { String root; Map modules; Map contexts = new HashMap(); + + Map> configResourcesMap = new HashMap>(); + ApplicationContext rootContext = null; Set excludes = new HashSet(); Properties configProperties = null; @@ -72,8 +74,9 @@ public DefaultModuleDefinitionSet(Map modules, String } public void load() throws IOException { - if (!loadRootContext()) + if (!loadRootContext()) { return; + } printHierarchy(); loadContexts(); @@ -83,8 +86,9 @@ public void load() throws IOException { protected boolean loadRootContext() { ModuleDefinition def = modules.get(root); - if (def == null) + if (def == null) { return false; + } ApplicationContext defaultsContext = getDefaultsContext(); @@ -190,8 +194,7 @@ protected ApplicationContext getDefaultsContext() { context.setApplicationName("/defaults"); context.refresh(); - @SuppressWarnings("unchecked") - final List resources = (List)context.getBean(DEFAULT_CONFIG_RESOURCES); + @SuppressWarnings("unchecked") final List resources = (List) context.getBean(DEFAULT_CONFIG_RESOURCES); withModule(new WithModule() { @Override @@ -202,12 +205,12 @@ public void with(ModuleDefinition def, Stack parents) { } }); - configProperties = (Properties)context.getBean(DEFAULT_CONFIG_PROPERTIES); + configProperties = (Properties) context.getBean(DEFAULT_CONFIG_PROPERTIES); for (Resource resource : resources) { load(resource, configProperties); } - for (Resource resource : (Resource[])context.getBean(MODULE_PROPERITES)) { + for (Resource resource : (Resource[]) context.getBean(MODULE_PROPERITES)) { load(resource, configProperties); } @@ -263,8 +266,9 @@ protected void withModule(WithModule with) { } protected void withModule(ModuleDefinition def, Stack parents, WithModule with) { - if (def == null) + if (def == null) { return; + } if (!shouldLoad(def)) { logger.info("Excluding context [" + def.getName() + "] based on configuration"); @@ -314,24 +318,35 @@ public Map getContextMap() { @Override public Resource[] getConfigResources(String name) { - Set resources = new LinkedHashSet(); - - ModuleDefinition original = null; - ModuleDefinition def = original = modules.get(name); - - if (def == null) + ModuleDefinition def = modules.get(name); + if (def == null) { return new Resource[] {}; + } + + Set resources = new LinkedHashSet<>(); resources.addAll(def.getContextLocations()); - while (def != null) { - resources.addAll(def.getInheritableContextLocations()); - def = modules.get(def.getParentName()); + resources.addAll(collectInheritedResources(def)); + + resources.addAll(def.getOverrideContextLocations()); + + return resources.toArray(Resource[]::new); + } + + private Set collectInheritedResources(ModuleDefinition def) { + if (def == null) { + return new LinkedHashSet<>(); } - resources.addAll(original.getOverrideContextLocations()); + if (configResourcesMap.containsKey(def.getName())) { + return configResourcesMap.get(def.getName()); + } - return resources.toArray(new Resource[resources.size()]); + Set inheritableResources = new LinkedHashSet<>(def.getInheritableContextLocations()); + inheritableResources.addAll(collectInheritedResources(modules.get(def.getParentName()))); + configResourcesMap.put(def.getName(), inheritableResources); + return inheritableResources; } @Override From c15d8cd0db9f89e70f7785498d447ac9b362184c Mon Sep 17 00:00:00 2001 From: he1l0world Date: Tue, 17 Jun 2025 04:35:31 -0400 Subject: [PATCH 2/6] revert format changes --- .../impl/DefaultModuleDefinitionSet.java | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index 768c153b9964..d108a2acefa4 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -18,20 +18,6 @@ */ package org.apache.cloudstack.spring.module.model.impl; -import org.apache.cloudstack.spring.module.context.ResourceApplicationContext; -import org.apache.cloudstack.spring.module.model.ModuleDefinition; -import org.apache.cloudstack.spring.module.model.ModuleDefinitionSet; -import org.apache.commons.io.IOUtils; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.io.Resource; -import org.springframework.core.io.UrlResource; -import org.springframework.util.StringUtils; - import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -46,6 +32,22 @@ import java.util.Set; import java.util.Stack; +import org.apache.commons.io.IOUtils; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.Resource; +import org.springframework.core.io.UrlResource; +import org.springframework.util.StringUtils; + +import org.apache.cloudstack.spring.module.context.ResourceApplicationContext; +import org.apache.cloudstack.spring.module.model.ModuleDefinition; +import org.apache.cloudstack.spring.module.model.ModuleDefinitionSet; + + public class DefaultModuleDefinitionSet implements ModuleDefinitionSet { protected Logger logger = LogManager.getLogger(getClass()); @@ -74,9 +76,8 @@ public DefaultModuleDefinitionSet(Map modules, String } public void load() throws IOException { - if (!loadRootContext()) { + if (!loadRootContext()) return; - } printHierarchy(); loadContexts(); @@ -86,9 +87,8 @@ public void load() throws IOException { protected boolean loadRootContext() { ModuleDefinition def = modules.get(root); - if (def == null) { + if (def == null) return false; - } ApplicationContext defaultsContext = getDefaultsContext(); @@ -194,7 +194,8 @@ protected ApplicationContext getDefaultsContext() { context.setApplicationName("/defaults"); context.refresh(); - @SuppressWarnings("unchecked") final List resources = (List) context.getBean(DEFAULT_CONFIG_RESOURCES); + @SuppressWarnings("unchecked") + final List resources = (List) context.getBean(DEFAULT_CONFIG_RESOURCES); withModule(new WithModule() { @Override @@ -205,12 +206,12 @@ public void with(ModuleDefinition def, Stack parents) { } }); - configProperties = (Properties) context.getBean(DEFAULT_CONFIG_PROPERTIES); + configProperties = (Properties)context.getBean(DEFAULT_CONFIG_PROPERTIES); for (Resource resource : resources) { load(resource, configProperties); } - for (Resource resource : (Resource[]) context.getBean(MODULE_PROPERITES)) { + for (Resource resource : (Resource[])context.getBean(MODULE_PROPERITES)) { load(resource, configProperties); } @@ -266,9 +267,8 @@ protected void withModule(WithModule with) { } protected void withModule(ModuleDefinition def, Stack parents, WithModule with) { - if (def == null) { + if (def == null) return; - } if (!shouldLoad(def)) { logger.info("Excluding context [" + def.getName() + "] based on configuration"); From 0c0cfcff74060e86275268aebd56c448d9a83e3d Mon Sep 17 00:00:00 2001 From: he1l0world Date: Tue, 17 Jun 2025 04:39:14 -0400 Subject: [PATCH 3/6] revert format changes --- .../spring/module/model/impl/DefaultModuleDefinitionSet.java | 1 - 1 file changed, 1 deletion(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index d108a2acefa4..bd586d9192a2 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -47,7 +47,6 @@ import org.apache.cloudstack.spring.module.model.ModuleDefinition; import org.apache.cloudstack.spring.module.model.ModuleDefinitionSet; - public class DefaultModuleDefinitionSet implements ModuleDefinitionSet { protected Logger logger = LogManager.getLogger(getClass()); From 286f87a270e7134609f27613b0816686dada9d87 Mon Sep 17 00:00:00 2001 From: he1l0world Date: Tue, 17 Jun 2025 04:40:27 -0400 Subject: [PATCH 4/6] revert format changes --- .../spring/module/model/impl/DefaultModuleDefinitionSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index bd586d9192a2..ca6b6ff70005 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -194,7 +194,7 @@ protected ApplicationContext getDefaultsContext() { context.refresh(); @SuppressWarnings("unchecked") - final List resources = (List) context.getBean(DEFAULT_CONFIG_RESOURCES); + final List resources = (List)context.getBean(DEFAULT_CONFIG_RESOURCES); withModule(new WithModule() { @Override From effdae1e9110aaaa239fa7157aef0d1e21ebfc14 Mon Sep 17 00:00:00 2001 From: he1l0world Date: Thu, 19 Jun 2025 23:15:07 -0400 Subject: [PATCH 5/6] return immutable set when def is null --- .../spring/module/model/impl/DefaultModuleDefinitionSet.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index ca6b6ff70005..e42a24e86ebb 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -22,6 +22,7 @@ import java.io.InputStream; import java.net.URL; import java.util.ArrayList; +import java.util.Collections; import java.util.EmptyStackException; import java.util.HashMap; import java.util.HashSet; @@ -335,7 +336,7 @@ public Resource[] getConfigResources(String name) { private Set collectInheritedResources(ModuleDefinition def) { if (def == null) { - return new LinkedHashSet<>(); + return Collections.emptySet(); } if (configResourcesMap.containsKey(def.getName())) { From 73610315d3f21a38a72ae2b97d201ad649328821 Mon Sep 17 00:00:00 2001 From: he1l0world Date: Fri, 20 Jun 2025 23:54:40 -0400 Subject: [PATCH 6/6] add final for clarity --- .../spring/module/model/impl/DefaultModuleDefinitionSet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java index e42a24e86ebb..f3ba6fe91eba 100644 --- a/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java +++ b/framework/spring/module/src/main/java/org/apache/cloudstack/spring/module/model/impl/DefaultModuleDefinitionSet.java @@ -334,7 +334,7 @@ public Resource[] getConfigResources(String name) { return resources.toArray(Resource[]::new); } - private Set collectInheritedResources(ModuleDefinition def) { + private Set collectInheritedResources(final ModuleDefinition def) { if (def == null) { return Collections.emptySet(); } @@ -343,7 +343,7 @@ private Set collectInheritedResources(ModuleDefinition def) { return configResourcesMap.get(def.getName()); } - Set inheritableResources = new LinkedHashSet<>(def.getInheritableContextLocations()); + final Set inheritableResources = new LinkedHashSet<>(def.getInheritableContextLocations()); inheritableResources.addAll(collectInheritedResources(modules.get(def.getParentName()))); configResourcesMap.put(def.getName(), inheritableResources); return inheritableResources;