This is an automated email from the ASF dual-hosted git repository. riemer pushed a commit to branch set-opcua-min-frequency-from-env-variable in repository https://gitbox.apache.org/repos/asf/streampipes.git
commit 92ba15a4f9fe097670fdd8340a3ebd43638a705e Author: Dominik Riemer <[email protected]> AuthorDate: Mon Feb 9 21:54:43 2026 +0100 feat: Add environment variable to require minimum OPC-UA pull frequency --- .../apache/streampipes/commons/constants/Envs.java | 1 + .../commons/environment/DefaultEnvironment.java | 5 +++++ .../commons/environment/Environment.java | 2 ++ .../connectors/opcua/adapter/OpcUaAdapter.java | 22 +++++++++++++++++++++- 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java index c1b04d1193..5974facc9c 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/constants/Envs.java @@ -123,6 +123,7 @@ public enum Envs { SP_ALLOWED_UPLOAD_FILETYPES("SP_ALLOWED_UPLOAD_FILETYPES", "", ""), // OPC-UA security + SP_OPCUA_MIN_PULL_INTERVAL_MS("SP_OPCUA_MIN_PULL_INTERVAL_MS"), SP_OPCUA_SECURITY_DIR("SP_OPCUA_SECURITY_DIR", "/streampipes-security/opcua"), SP_OPCUA_KEYSTORE_FILE("SP_OPCUA_KEYSTORE_FILE", "keystore.pfx"), SP_OPCUA_KEYSTORE_PASSWORD("SP_OPCUA_KEYSTORE_PASSWORD", "password"), diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java index 04d790fee9..dd01aa8af7 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/DefaultEnvironment.java @@ -352,6 +352,11 @@ public class DefaultEnvironment implements Environment { return new StringEnvironmentVariable(Envs.SP_OPCUA_KEYSTORE_ALIAS); } + @Override + public IntEnvironmentVariable getOpcUaMinPullIntervalMs() { + return new IntEnvironmentVariable(Envs.SP_OPCUA_MIN_PULL_INTERVAL_MS); + } + @Override public StringEnvironmentVariable getKeystoreFilename() { return new StringEnvironmentVariable(Envs.SP_SECURITY_KEYSTORE_FILENAME); diff --git a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java index 3f4b6c5291..8949d4663a 100644 --- a/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java +++ b/streampipes-commons/src/main/java/org/apache/streampipes/commons/environment/Environment.java @@ -172,6 +172,8 @@ public interface Environment { StringEnvironmentVariable getOpcUaKeystoreAlias(); + IntEnvironmentVariable getOpcUaMinPullIntervalMs(); + StringEnvironmentVariable getKeystoreFilename(); StringEnvironmentVariable getKeystorePassword(); diff --git a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java index 464f30e95c..79a76aee34 100644 --- a/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java +++ b/streampipes-extensions/streampipes-connectors-opcua/src/main/java/org/apache/streampipes/extensions/connectors/opcua/adapter/OpcUaAdapter.java @@ -18,6 +18,7 @@ package org.apache.streampipes.extensions.connectors.opcua.adapter; +import org.apache.streampipes.commons.environment.Environments; import org.apache.streampipes.commons.exceptions.SpConfigurationException; import org.apache.streampipes.commons.exceptions.connect.AdapterException; import org.apache.streampipes.extensions.api.connect.IAdapterConfiguration; @@ -102,7 +103,26 @@ public class OpcUaAdapter implements StreamPipesAdapter, IPullAdapter, SupportsR this.allNodes = nodeProvider.getNodes(); if (opcUaAdapterConfig.inPullMode()) { - this.pullingIntervalMilliSeconds = opcUaAdapterConfig.getPullIntervalMilliSeconds(); + var configuredIntervalMs = opcUaAdapterConfig.getPullIntervalMilliSeconds(); + var effectiveIntervalMs = configuredIntervalMs; + + var minPullInterval = Environments.getEnvironment().getOpcUaMinPullIntervalMs(); + if (minPullInterval.exists()) { + effectiveIntervalMs = Math.max( + minPullInterval.getValue(), + configuredIntervalMs + ); + + if (!effectiveIntervalMs.equals(configuredIntervalMs)) { + LOG.warn( + "OPC-UA pull interval increased from {} ms to {} ms due to environment variable OPCUA_MIN_PULL_INTERVAL_MS", + configuredIntervalMs, + effectiveIntervalMs + ); + } + } + + this.pullingIntervalMilliSeconds = effectiveIntervalMs; } else { var allNodeIds = this.allNodes.stream() .map(node -> node.nodeInfo().getNodeId()).toList();
