You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hop.apache.org by ha...@apache.org on 2026/08/07 09:11:47 UTC

(hop) branch main updated: Improve performance logging hot path, fixes #7823 (#7824)

This is an automated email from the ASF dual-hosted git repository.

hansva pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/hop.git


The following commit(s) were added to refs/heads/main by this push:
     new c2832e1e7e Improve performance logging hot path, fixes #7823 (#7824)
c2832e1e7e is described below

commit c2832e1e7e8b9842c068d1710ff560e9d3c8b130
Author: Hans Van Akelyen <ha...@gmail.com>
AuthorDate: Fri Aug 7 11:11:41 2026 +0200

    Improve performance logging hot path, fixes #7823 (#7824)
---
 .../org/apache/hop/core/config/plugin/ConfigFile.java  | 18 ++++++++++++++++--
 .../java/org/apache/hop/core/logging/LogMessage.java   |  2 +-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/core/src/main/java/org/apache/hop/core/config/plugin/ConfigFile.java b/core/src/main/java/org/apache/hop/core/config/plugin/ConfigFile.java
index 00c81905c6..b42bd6963e 100644
--- a/core/src/main/java/org/apache/hop/core/config/plugin/ConfigFile.java
+++ b/core/src/main/java/org/apache/hop/core/config/plugin/ConfigFile.java
@@ -91,7 +91,7 @@ public abstract class ConfigFile implements IConfigFile {
   public ConfigFile(String filename, List<DescribedVariable> describedVariables) {
     this();
     setConfigFilename(filename);
-    configMap.put(HOP_VARIABLES_KEY, describedVariables);
+    setDescribedVariables(describedVariables);
   }
 
   @JsonIgnore
@@ -105,6 +105,16 @@ public abstract class ConfigFile implements IConfigFile {
     }
 
     Object variablesObject = configMap.get(HOP_VARIABLES_KEY);
+
+    // The list is stored back below, so from the second call onwards it already holds
+    // DescribedVariable objects. Serialising those to JSON only to parse them straight back would
+    // be pure overhead, and this method sits on the path of every single log message.
+    //
+    if (variablesObject instanceof List<?> describedList
+        && (describedList.isEmpty() || describedList.get(0) instanceof DescribedVariable)) {
+      return (List<DescribedVariable>) variablesObject;
+    }
+
     if (variablesObject != null) {
       try {
         for (Object dvObject : (List) variablesObject) {
@@ -165,6 +175,10 @@ public abstract class ConfigFile implements IConfigFile {
 
   @Override
   public void setDescribedVariables(List<DescribedVariable> describedVariables) {
-    configMap.put(HOP_VARIABLES_KEY, describedVariables);
+    // Kept mutable: getDescribedVariables() hands this very list out and setDescribedVariable()
+    // adds to it.
+    configMap.put(
+        HOP_VARIABLES_KEY,
+        describedVariables == null ? new ArrayList<>() : new ArrayList<>(describedVariables));
   }
 }
diff --git a/core/src/main/java/org/apache/hop/core/logging/LogMessage.java b/core/src/main/java/org/apache/hop/core/logging/LogMessage.java
index e4852d45e7..d4689ef9ab 100644
--- a/core/src/main/java/org/apache/hop/core/logging/LogMessage.java
+++ b/core/src/main/java/org/apache/hop/core/logging/LogMessage.java
@@ -72,7 +72,7 @@ public class LogMessage implements ILogMessage {
     ILoggingObject loggingObject = LoggingRegistry.getInstance().getLoggingObject(logChannelId);
 
     boolean detailedLogTurnOn =
-        "Y".equals(HopConfig.readStringVariable(Const.HOP_LOG_MARK_MAPPINGS, "N")) ? true : false;
+        "Y".equals(HopConfig.readStringVariable(Const.HOP_LOG_MARK_MAPPINGS, "N"));
     if (loggingObject != null) {
       if (!detailedLogTurnOn) {
         subject = loggingObject.getObjectName();