You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by zj...@apache.org on 2020/03/09 09:42:15 UTC

[zeppelin] branch master updated: [ZEPPELIN-4671]. Interpreter properties is still not in order when interpreter.json exist

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

zjffdu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/zeppelin.git


The following commit(s) were added to refs/heads/master by this push:
     new 77e7339  [ZEPPELIN-4671]. Interpreter properties is still not in order when interpreter.json exist
77e7339 is described below

commit 77e733914026b40af9adeed0ee58dd97fe3d0966
Author: Jeff Zhang <zj...@apache.org>
AuthorDate: Sun Mar 8 16:43:58 2020 +0800

    [ZEPPELIN-4671]. Interpreter properties is still not in order when interpreter.json exist
    
    ### What is this PR for?
    This is a followup of ZEPPELIN-4467. This issue happens when interpreter.json exist. That means this is an issue for upgrade scenario.  This PR will sort the properties by the order in interpreter template.
    
    ### What type of PR is it?
    [ Improvement ]
    
    ### Todos
    * [ ] - Task
    
    ### What is the Jira issue?
    * https://issues.apache.org/jira/browse/ZEPPELIN-4671
    
    ### How should this be tested?
    * Manually tested
    
    ### Screenshots (if appropriate)
    
    ### Questions:
    * Does the licenses files need update? No
    * Is there breaking changes for older versions? No
    * Does this needs documentation? No
    
    Author: Jeff Zhang <zj...@apache.org>
    
    Closes #3682 from zjffdu/ZEPPELIN-4671 and squashes the following commits:
    
    9e2925a9a [Jeff Zhang] [ZEPPELIN-4671]. Interpreter properties is still not in order when interpreter.json exist
---
 .../src/app/interpreter/interpreter.controller.js  |  2 +-
 .../zeppelin/interpreter/InterpreterSetting.java   | 33 ++++++++++++++++++++++
 .../interpreter/InterpreterSettingManager.java     |  1 +
 3 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/zeppelin-web/src/app/interpreter/interpreter.controller.js b/zeppelin-web/src/app/interpreter/interpreter.controller.js
index 2fa2f3b..97571a1 100644
--- a/zeppelin-web/src/app/interpreter/interpreter.controller.js
+++ b/zeppelin-web/src/app/interpreter/interpreter.controller.js
@@ -624,7 +624,7 @@ function InterpreterCtrl($rootScope, $scope, $http, baseUrlSrv, ngToast, $timeou
       }
 
       setting.properties[setting.propertyKey] =
-        {value: setting.propertyValue, type: setting.propertyType};
+        {name: setting.propertyKey, value: setting.propertyValue, type: setting.propertyType};
 
       emptyNewProperty(setting);
     }
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
index 9d898a3..1d19214 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSetting.java
@@ -145,6 +145,7 @@ public class InterpreterSetting {
   private transient RemoteInterpreterEventServer interpreterEventServer;
 
   public static final String CLUSTER_INTERPRETER_LAUNCHER_NAME = "ClusterInterpreterLauncher";
+
   ///////////////////////////////////////////////////////////////////////////////////////////
 
   /**
@@ -558,6 +559,38 @@ public class InterpreterSetting {
     }
   }
 
+  /**
+   * This method will sort the properties by the order defined in template.
+   * It is because when interpreter setting is loaded in interpreter-setting.json, it is
+   * still not in correct order.
+   * @param propertiesInTemplate
+   */
+  public void sortPropertiesByTemplate(Object propertiesInTemplate) {
+    if (propertiesInTemplate instanceof LinkedHashMap) {
+      List<String> sortedKeys = new ArrayList(((LinkedHashMap) propertiesInTemplate).keySet());
+      if (this.properties instanceof LinkedHashMap) {
+        LinkedHashMap<String, InterpreterProperty> unSortedProperties = (LinkedHashMap) this.properties;
+        List<String> keys = new ArrayList(unSortedProperties.keySet());
+        keys.sort((o1, o2) -> {
+          int i1 = sortedKeys.indexOf(o1);
+          int i2 = sortedKeys.indexOf(o2);
+          if (i1 < i2) {
+            return -1;
+          } else if (i1 > i2) {
+            return 1;
+          } else {
+            return 0;
+          }
+        });
+
+        LinkedHashMap<String, InterpreterProperty> sortedProperties = new LinkedHashMap<>();
+        for (String key : keys) {
+          sortedProperties.put(key, unSortedProperties.get(key));
+        }
+        this.properties = sortedProperties;
+      }
+    }
+  }
 
   public Object getProperties() {
     return properties;
diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
index 69051cd..7ea1f34 100644
--- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
+++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterSettingManager.java
@@ -257,6 +257,7 @@ public class InterpreterSettingManager implements NoteEventListener, ClusterEven
       // InterpreterSetting, while InterpreterSetting is from interpreter.json which represent
       // the user saved interpreter setting
       if (interpreterSettingTemplate != null) {
+        savedInterpreterSetting.sortPropertiesByTemplate(interpreterSettingTemplate.getProperties());
         // merge InterpreterDir, InterpreterInfo & InterpreterRunner
         savedInterpreterSetting.setInterpreterDir(
             interpreterSettingTemplate.getInterpreterDir());