You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by mb...@apache.org on 2024/07/05 12:19:27 UTC

(nifi) branch support/nifi-1.x updated: NIFI-13496 Included Hadoop configuration file paths in the classloader isolation key of HDFS processors

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

mbathori pushed a commit to branch support/nifi-1.x
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/support/nifi-1.x by this push:
     new 994a4f2c5d NIFI-13496 Included Hadoop configuration file paths in the classloader isolation key of HDFS processors
994a4f2c5d is described below

commit 994a4f2c5d94d51cd579346e50310452d3b02c12
Author: Peter Turcsanyi <tu...@apache.org>
AuthorDate: Fri Jun 21 15:18:45 2024 +0200

    NIFI-13496 Included Hadoop configuration file paths in the classloader isolation key of HDFS processors
    
    Signed-off-by: Mark Bathori <mb...@apache.org>
    
    This closes #9038
---
 .../processors/hadoop/AbstractHadoopProcessor.java | 34 ++++++++++++++++++----
 1 file changed, 29 insertions(+), 5 deletions(-)

diff --git a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
index d2c914eefa..c76de7c881 100644
--- a/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
+++ b/nifi-nar-bundles/nifi-extension-utils/nifi-hadoop-utils/src/main/java/org/apache/nifi/processors/hadoop/AbstractHadoopProcessor.java
@@ -212,9 +212,33 @@ public abstract class AbstractHadoopProcessor extends AbstractProcessor implemen
 
     @Override
     public String getClassloaderIsolationKey(final PropertyContext context) {
+        class ClassloaderIsolationKeyBuilder {
+            private static final String SEPARATOR = "__";
+
+            private final StringBuilder sb = new StringBuilder();
+
+            void add(final String value) {
+                if (value != null) {
+                    if (sb.length() > 0) {
+                        sb.append(SEPARATOR);
+                    }
+                    sb.append(value);
+                }
+            }
+
+            String build() {
+                return sb.length() > 0 ? sb.toString() : null;
+            }
+        }
+
+        final ClassloaderIsolationKeyBuilder builder = new ClassloaderIsolationKeyBuilder();
+
+        builder.add(context.getProperty(HADOOP_CONFIGURATION_RESOURCES).getValue());
+        builder.add(context.getProperty(ADDITIONAL_CLASSPATH_RESOURCES).getValue());
+
         final String explicitKerberosPrincipal = context.getProperty(kerberosProperties.getKerberosPrincipal()).evaluateAttributeExpressions().getValue();
         if (explicitKerberosPrincipal != null) {
-            return explicitKerberosPrincipal;
+            builder.add(explicitKerberosPrincipal);
         }
 
         try {
@@ -222,20 +246,20 @@ public abstract class AbstractHadoopProcessor extends AbstractProcessor implemen
             if (credentialsService != null) {
                 final String credentialsServicePrincipal = credentialsService.getPrincipal();
                 if (credentialsServicePrincipal != null) {
-                    return credentialsServicePrincipal;
+                    builder.add(credentialsServicePrincipal);
                 }
             }
 
             final KerberosUserService kerberosUserService = context.getProperty(KERBEROS_USER_SERVICE).asControllerService(KerberosUserService.class);
             if (kerberosUserService != null) {
                 final KerberosUser kerberosUser = kerberosUserService.createKerberosUser();
-                return kerberosUser.getPrincipal();
+                builder.add(kerberosUser.getPrincipal());
             }
         } catch (IllegalStateException e) {
-            return null;
+            // the Kerberos controller service is disabled, therefore this part of the isolation key cannot be determined yet
         }
 
-        return null;
+        return builder.build();
     }
 
     @Override