From a00263672f26f4bf388f7db461d9ed625aae1cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Voz=C3=A1r?= Date: Wed, 24 Sep 2025 13:00:48 +0200 Subject: [PATCH 1/7] NAE-2212 - added method that will cache all petriNets functions --- .../service/FieldActionsCacheService.java | 23 +++++++++++++++++-- .../interfaces/IFieldActionsCacheService.java | 2 ++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java index 1b996bc60d..5f158efb7c 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java @@ -15,6 +15,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -22,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; @Service @Slf4j @@ -30,14 +33,15 @@ public class FieldActionsCacheService implements IFieldActionsCacheService { private final RunnerConfigurationProperties.FieldRunnerProperties properties; private IPetriNetService petriNetService; - + private MongoTemplate mongoTemplate; private Map actionsCache; private Map> namespaceFunctionsCache; private Map functionsCache; private final GroovyShell shell; - public FieldActionsCacheService(RunnerConfigurationProperties.FieldRunnerProperties properties, IGroovyShellFactory shellFactory) { + public FieldActionsCacheService(RunnerConfigurationProperties.FieldRunnerProperties properties, IGroovyShellFactory shellFactory, MongoTemplate mongoTemplate) { this.properties = properties; + this.mongoTemplate = mongoTemplate; this.actionsCache = new MaxSizeHashMap<>(properties.getActionCacheSize()); this.functionsCache = new MaxSizeHashMap<>(properties.getFunctionsCacheSize()); this.namespaceFunctionsCache = new MaxSizeHashMap<>(properties.getNamespaceCacheSize()); @@ -96,6 +100,21 @@ public List getCachedFunctions(List stream = mongoTemplate.query(PetriNet.class).matching(query).stream()) { + stream.forEach(petriNet -> { + if (petriNet == null) return; + try { + this.cachePetriNetFunctions(petriNet); + } catch (Exception e) { + log.warn("Failed to cache functions for PetriNet id={}", petriNet.getStringId(), e); + } + }); + } + } + @Override public void evaluateFunctions(List functions) { evaluateCachedFunctions(functions.stream().map(function -> CachedFunction.build(shell, function)).collect(Collectors.toList())); diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IFieldActionsCacheService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IFieldActionsCacheService.java index 6eb2580949..10eb67bc21 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IFieldActionsCacheService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/interfaces/IFieldActionsCacheService.java @@ -27,5 +27,7 @@ public interface IFieldActionsCacheService { void clearNamespaceFunctionCache(); + void cacheAllPetriNetsFunctions(); + void clearFunctionCache(); } From e6e8dacdba5976636c17f8998098b38fa06b7bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Voz=C3=A1r?= Date: Thu, 25 Sep 2025 21:06:05 +0200 Subject: [PATCH 2/7] NAE-2212 - added prevention of cache namespaceFunctions deletion from worker nodes --- .../configuration/CacheConfiguration.java | 4 +- .../configuration/cache/CacheMapKeys.java | 5 +++ .../configuration/cache/ReadOnlyCache.java | 42 +++++++++++++++++++ .../cache/WorkerConcurrentCacheManager.java | 23 ++++++++++ .../CacheConfigurationProperties.java | 7 +++- 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java create mode 100644 application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/ReadOnlyCache.java create mode 100644 application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java index 1e0ad25c87..685aab2a96 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java @@ -1,10 +1,10 @@ package com.netgrif.application.engine.configuration; +import com.netgrif.application.engine.configuration.cache.WorkerConcurrentCacheManager; import com.netgrif.application.engine.configuration.properties.CacheConfigurationProperties; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.CachingConfigurerSupport; import org.springframework.cache.annotation.EnableCaching; -import org.springframework.cache.concurrent.ConcurrentMapCacheManager; import org.springframework.cache.interceptor.CacheResolver; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -24,7 +24,7 @@ public CacheConfiguration(CacheConfigurationProperties properties) { @Primary @Override public CacheManager cacheManager() { - return new ConcurrentMapCacheManager(properties.getAllCaches().toArray(String[]::new)); + return new WorkerConcurrentCacheManager(properties.getAllCaches().toArray(String[]::new)); } @Bean diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java new file mode 100644 index 0000000000..e6c776944d --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java @@ -0,0 +1,5 @@ +package com.netgrif.application.engine.configuration.cache; + +public class CacheMapKeys { + public static final String NAMESPACE_FUNCTIONS = "namespaceFunctionsCache"; +} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/ReadOnlyCache.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/ReadOnlyCache.java new file mode 100644 index 0000000000..10fae378d6 --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/ReadOnlyCache.java @@ -0,0 +1,42 @@ +package com.netgrif.application.engine.configuration.cache; + +import org.springframework.cache.Cache; + +import java.util.concurrent.Callable; + +public class ReadOnlyCache implements Cache { + + private final Cache cacheDelegate; + + public ReadOnlyCache(Cache cacheDelegate) { + this.cacheDelegate = cacheDelegate; + } + + @Override + public String getName() { return cacheDelegate.getName(); } + + @Override + public Object getNativeCache() { return cacheDelegate.getNativeCache(); } + + @Override + public ValueWrapper get(Object key) { return cacheDelegate.get(key); } + + @Override + public T get(Object key, Class type) { return cacheDelegate.get(key, type); } + + @Override + public T get(Object key, Callable loader) { return cacheDelegate.get(key, loader); } + + @Override + public void put(Object key, Object value) { cacheDelegate.put(key, value); } + + @Override + public void evict(Object key) { + throw new UnsupportedOperationException("Evict not allowed on worker for " + getName()); + } + + @Override + public void clear() { + throw new UnsupportedOperationException("Clear not allowed on worker for " + getName()); + } +} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java new file mode 100644 index 0000000000..6b8bd5fc0c --- /dev/null +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java @@ -0,0 +1,23 @@ +package com.netgrif.application.engine.configuration.cache; + +import org.springframework.cache.Cache; +import org.springframework.cache.concurrent.ConcurrentMapCacheManager; + +public class WorkerConcurrentCacheManager extends ConcurrentMapCacheManager { + public WorkerConcurrentCacheManager() { + super(); + } + + public WorkerConcurrentCacheManager(String... cacheNames) { + super(cacheNames); + } + + @Override + protected Cache createConcurrentMapCache(String name) { + Cache base = super.createConcurrentMapCache(name); + if (CacheMapKeys.NAMESPACE_FUNCTIONS.equals(name)) { + return new ReadOnlyCache(base); + } + return base; + } +} \ No newline at end of file diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/properties/CacheConfigurationProperties.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/properties/CacheConfigurationProperties.java index 8050c7ac37..755829b770 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/properties/CacheConfigurationProperties.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/properties/CacheConfigurationProperties.java @@ -41,6 +41,11 @@ public class CacheConfigurationProperties { */ private String loadedModules = "loadedModules"; + /** + * Default cache name for caching namespace functions. + */ + private String namespaceFunctions = "namespaceFunctions"; + /** * A list of additional custom cache names. * Allows users to define their own cache names for specific use cases. @@ -54,7 +59,7 @@ public class CacheConfigurationProperties { * @return a {@link Set} of all cache names. */ public Set getAllCaches() { - Set caches = new LinkedHashSet<>(Arrays.asList(petriNetById, petriNetByIdentifier, petriNetNewest, petriNetCache, loadedModules)); + Set caches = new LinkedHashSet<>(Arrays.asList(petriNetById, petriNetByIdentifier, petriNetNewest, petriNetCache, loadedModules, namespaceFunctions)); caches.addAll(additional); return caches; } From 6e09ba1a543f1929581cf2f18f96f69e701cb6d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Voz=C3=A1r?= Date: Thu, 25 Sep 2025 22:01:48 +0200 Subject: [PATCH 3/7] NAE-2212 - repair of PR, rework to use petriNetService and other --- .../configuration/CacheConfiguration.java | 5 +++- .../configuration/cache/CacheMapKeys.java | 5 ++-- .../cache/WorkerConcurrentCacheManager.java | 16 ++++++++-- .../service/FieldActionsCacheService.java | 29 +++++++++++-------- 4 files changed, 38 insertions(+), 17 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java index 685aab2a96..40ebcaf45d 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java @@ -1,5 +1,6 @@ package com.netgrif.application.engine.configuration; +import com.netgrif.application.engine.configuration.cache.CacheMapKeys; import com.netgrif.application.engine.configuration.cache.WorkerConcurrentCacheManager; import com.netgrif.application.engine.configuration.properties.CacheConfigurationProperties; import org.springframework.cache.CacheManager; @@ -10,6 +11,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import java.util.List; + @Configuration @EnableCaching public class CacheConfiguration extends CachingConfigurerSupport { @@ -24,7 +27,7 @@ public CacheConfiguration(CacheConfigurationProperties properties) { @Primary @Override public CacheManager cacheManager() { - return new WorkerConcurrentCacheManager(properties.getAllCaches().toArray(String[]::new)); + return new WorkerConcurrentCacheManager(List.of(CacheMapKeys.NAMESPACE_FUNCTIONS), properties.getAllCaches().toArray(String[]::new)); } @Bean diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java index e6c776944d..8949eb2bf4 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java @@ -1,5 +1,6 @@ package com.netgrif.application.engine.configuration.cache; -public class CacheMapKeys { - public static final String NAMESPACE_FUNCTIONS = "namespaceFunctionsCache"; +public final class CacheMapKeys { + private CacheMapKeys() {} + public static final String NAMESPACE_FUNCTIONS = "namespaceFunctions"; } diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java index 6b8bd5fc0c..831a1bc7d0 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java @@ -3,19 +3,31 @@ import org.springframework.cache.Cache; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; +import java.util.ArrayList; +import java.util.List; + public class WorkerConcurrentCacheManager extends ConcurrentMapCacheManager { + private List readOnlyCacheNames; + public WorkerConcurrentCacheManager() { super(); + this.readOnlyCacheNames = new ArrayList<>(); + } + + public WorkerConcurrentCacheManager(List readOnlyCacheNames) { + super(); + this.readOnlyCacheNames = readOnlyCacheNames; } - public WorkerConcurrentCacheManager(String... cacheNames) { + public WorkerConcurrentCacheManager(List readOnlyCacheNames, String... cacheNames) { super(cacheNames); + this.readOnlyCacheNames = readOnlyCacheNames; } @Override protected Cache createConcurrentMapCache(String name) { Cache base = super.createConcurrentMapCache(name); - if (CacheMapKeys.NAMESPACE_FUNCTIONS.equals(name)) { + if (readOnlyCacheNames.contains(name)) { return new ReadOnlyCache(base); } return base; diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java index 5f158efb7c..51432b96c8 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/service/FieldActionsCacheService.java @@ -15,8 +15,9 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -24,7 +25,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -import java.util.stream.Stream; @Service @Slf4j @@ -33,15 +33,13 @@ public class FieldActionsCacheService implements IFieldActionsCacheService { private final RunnerConfigurationProperties.FieldRunnerProperties properties; private IPetriNetService petriNetService; - private MongoTemplate mongoTemplate; private Map actionsCache; private Map> namespaceFunctionsCache; private Map functionsCache; private final GroovyShell shell; - public FieldActionsCacheService(RunnerConfigurationProperties.FieldRunnerProperties properties, IGroovyShellFactory shellFactory, MongoTemplate mongoTemplate) { + public FieldActionsCacheService(RunnerConfigurationProperties.FieldRunnerProperties properties, IGroovyShellFactory shellFactory) { this.properties = properties; - this.mongoTemplate = mongoTemplate; this.actionsCache = new MaxSizeHashMap<>(properties.getActionCacheSize()); this.functionsCache = new MaxSizeHashMap<>(properties.getFunctionsCacheSize()); this.namespaceFunctionsCache = new MaxSizeHashMap<>(properties.getNamespaceCacheSize()); @@ -102,16 +100,23 @@ public List getCachedFunctions(List stream = mongoTemplate.query(PetriNet.class).matching(query).stream()) { - stream.forEach(petriNet -> { - if (petriNet == null) return; + Pageable pageable = PageRequest.of(0, 500); + Page page = petriNetService.getAll(pageable); + + while (!page.isEmpty()) { + for (PetriNet petriNet : page) { try { - this.cachePetriNetFunctions(petriNet); + cachePetriNetFunctions(petriNet); } catch (Exception e) { log.warn("Failed to cache functions for PetriNet id={}", petriNet.getStringId(), e); } - }); + } + + if (!page.hasNext()) { + break; + } + pageable = pageable.next(); + page = petriNetService.getAll(pageable); } } From 790659b4887bdf09dca96e3cdfe2704e484c70ce Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 29 Sep 2025 15:46:55 +0200 Subject: [PATCH 4/7] - test fix --- .../configuration/cache/WorkerConcurrentCacheManager.java | 2 +- nae-object-library/src/main/resources/petriflow_schema.xsd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java index 831a1bc7d0..3d43971c51 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java @@ -27,7 +27,7 @@ public WorkerConcurrentCacheManager(List readOnlyCacheNames, String... c @Override protected Cache createConcurrentMapCache(String name) { Cache base = super.createConcurrentMapCache(name); - if (readOnlyCacheNames.contains(name)) { + if (readOnlyCacheNames != null && readOnlyCacheNames.contains(name)) { return new ReadOnlyCache(base); } return base; diff --git a/nae-object-library/src/main/resources/petriflow_schema.xsd b/nae-object-library/src/main/resources/petriflow_schema.xsd index 28e88a26d6..14cd208484 100644 --- a/nae-object-library/src/main/resources/petriflow_schema.xsd +++ b/nae-object-library/src/main/resources/petriflow_schema.xsd @@ -3,6 +3,6 @@ - + \ No newline at end of file From dd80913b657e65ca418f676b36d7fe9cba5cd5bb Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 30 Sep 2025 11:30:36 +0200 Subject: [PATCH 5/7] - test fix --- nae-object-library/src/main/resources/petriflow_schema.xsd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nae-object-library/src/main/resources/petriflow_schema.xsd b/nae-object-library/src/main/resources/petriflow_schema.xsd index 14cd208484..28e88a26d6 100644 --- a/nae-object-library/src/main/resources/petriflow_schema.xsd +++ b/nae-object-library/src/main/resources/petriflow_schema.xsd @@ -3,6 +3,6 @@ - + \ No newline at end of file From 7dc79472f686ed8a24447745a68e0c0afb32bde5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Voz=C3=A1r?= Date: Tue, 30 Sep 2025 11:43:05 +0200 Subject: [PATCH 6/7] [NAE-2212] Change list to set, remove CacheMapKeys, use copyOf for safety --- .../configuration/CacheConfiguration.java | 6 +++--- .../configuration/cache/CacheMapKeys.java | 6 ------ .../cache/WorkerConcurrentCacheManager.java | 20 +++++++++++-------- 3 files changed, 15 insertions(+), 17 deletions(-) delete mode 100644 application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java index 40ebcaf45d..7fed1391bb 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/CacheConfiguration.java @@ -1,6 +1,5 @@ package com.netgrif.application.engine.configuration; -import com.netgrif.application.engine.configuration.cache.CacheMapKeys; import com.netgrif.application.engine.configuration.cache.WorkerConcurrentCacheManager; import com.netgrif.application.engine.configuration.properties.CacheConfigurationProperties; import org.springframework.cache.CacheManager; @@ -11,7 +10,8 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; -import java.util.List; +import java.util.Set; + @Configuration @EnableCaching @@ -27,7 +27,7 @@ public CacheConfiguration(CacheConfigurationProperties properties) { @Primary @Override public CacheManager cacheManager() { - return new WorkerConcurrentCacheManager(List.of(CacheMapKeys.NAMESPACE_FUNCTIONS), properties.getAllCaches().toArray(String[]::new)); + return new WorkerConcurrentCacheManager(Set.of(properties.getNamespaceFunctions()), properties.getAllCaches().toArray(String[]::new)); } @Bean diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java deleted file mode 100644 index 8949eb2bf4..0000000000 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/CacheMapKeys.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.netgrif.application.engine.configuration.cache; - -public final class CacheMapKeys { - private CacheMapKeys() {} - public static final String NAMESPACE_FUNCTIONS = "namespaceFunctions"; -} diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java index 3d43971c51..ffa8cd3c30 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/cache/WorkerConcurrentCacheManager.java @@ -3,25 +3,29 @@ import org.springframework.cache.Cache; import org.springframework.cache.concurrent.ConcurrentMapCacheManager; -import java.util.ArrayList; -import java.util.List; +import java.util.Objects; +import java.util.Set; public class WorkerConcurrentCacheManager extends ConcurrentMapCacheManager { - private List readOnlyCacheNames; + private final Set readOnlyCacheNames; public WorkerConcurrentCacheManager() { super(); - this.readOnlyCacheNames = new ArrayList<>(); + this.readOnlyCacheNames = Set.of(); } - public WorkerConcurrentCacheManager(List readOnlyCacheNames) { + public WorkerConcurrentCacheManager(Set readOnlyCacheNames) { super(); - this.readOnlyCacheNames = readOnlyCacheNames; + this.readOnlyCacheNames = Set.copyOf( + Objects.requireNonNull(readOnlyCacheNames, "readOnlyCacheNames must not be null.") + ); } - public WorkerConcurrentCacheManager(List readOnlyCacheNames, String... cacheNames) { + public WorkerConcurrentCacheManager(Set readOnlyCacheNames, String... cacheNames) { super(cacheNames); - this.readOnlyCacheNames = readOnlyCacheNames; + this.readOnlyCacheNames = Set.copyOf( + Objects.requireNonNull(readOnlyCacheNames, "readOnlyCacheNames must not be null.") + ); } @Override From 93921f92e182d4e5305387c6c0235087742228b2 Mon Sep 17 00:00:00 2001 From: Machac Date: Tue, 30 Sep 2025 18:09:15 +0200 Subject: [PATCH 7/7] fix --- .github/workflows/pr-build.yml | 2 +- application-engine/docker-compose.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index ee7b621b30..f03f97497a 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -52,7 +52,7 @@ jobs: options: -e="discovery.type=single-node" -e="xpack.security.enabled=false" --health-cmd="curl http://localhost:9200/_cluster/health" --health-interval=10s --health-timeout=5s --health-retries=10 minio: - image: minio/minio:RELEASE.2022-12-12T19-27-27Z + image: docker.io/bawix/minio:2022 ports: - 9000:9000 - 9001:9001 diff --git a/application-engine/docker-compose.yml b/application-engine/docker-compose.yml index b002ee4b82..3b0d9dc215 100644 --- a/application-engine/docker-compose.yml +++ b/application-engine/docker-compose.yml @@ -43,6 +43,7 @@ services: ports: - '9000:9000' - '9001:9001' + command: server /data --console-address ":9001" networks: - minionetwork volumes: