You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by ca...@apache.org on 2022/01/12 12:54:40 UTC
[dolphinscheduler] branch 2.0.3-prepare updated: Fix global params cannot transport into sub_process (#7969)
This is an automated email from the ASF dual-hosted git repository.
caishunfeng pushed a commit to branch 2.0.3-prepare
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/2.0.3-prepare by this push:
new 584ad1c Fix global params cannot transport into sub_process (#7969)
584ad1c is described below
commit 584ad1cd173b870ec4658767e648cf982a9acc58
Author: Wenjun Ruan <we...@apache.org>
AuthorDate: Wed Jan 12 20:54:29 2022 +0800
Fix global params cannot transport into sub_process (#7969)
---
.../service/process/ProcessService.java | 29 ++++++++++++----------
1 file changed, 16 insertions(+), 13 deletions(-)
diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
index f421d88..270604a 100644
--- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
+++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java
@@ -17,6 +17,7 @@
package org.apache.dolphinscheduler.service.process;
+import static java.util.stream.Collectors.toSet;
import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_COMPLEMENT_DATA_END_DATE;
import static org.apache.dolphinscheduler.common.Constants.CMDPARAM_COMPLEMENT_DATA_START_DATE;
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_EMPTY_SUB_PROCESS;
@@ -27,8 +28,6 @@ import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS
import static org.apache.dolphinscheduler.common.Constants.CMD_PARAM_SUB_PROCESS_PARENT_INSTANCE_ID;
import static org.apache.dolphinscheduler.common.Constants.LOCAL_PARAMS;
-import static java.util.stream.Collectors.toSet;
-
import org.apache.dolphinscheduler.common.Constants;
import org.apache.dolphinscheduler.common.enums.AuthorizationType;
import org.apache.dolphinscheduler.common.enums.CommandType;
@@ -1002,17 +1001,21 @@ public class ProcessService {
*/
private String joinGlobalParams(String parentGlobalParams, String subGlobalParams) {
- List<Property> parentPropertyList = JSONUtils.toList(parentGlobalParams, Property.class);
- List<Property> subPropertyList = JSONUtils.toList(subGlobalParams, Property.class);
-
- Map<String, String> subMap = subPropertyList.stream().collect(Collectors.toMap(Property::getProp, Property::getValue));
-
- for (Property parent : parentPropertyList) {
- if (!subMap.containsKey(parent.getProp())) {
- subPropertyList.add(parent);
- }
- }
- return JSONUtils.toJsonString(subPropertyList);
+ // Since JSONUtils.toList return unmodified list, we need to creat a new List here.
+ List<Property> parentParams = Lists.newArrayList(JSONUtils.toList(parentGlobalParams, Property.class));
+ List<Property> subParams = JSONUtils.toList(subGlobalParams, Property.class);
+
+ Set<String> parentParamKeys = parentParams.stream().map(Property::getProp).collect(toSet());
+
+ // We will combine the params of parent workflow and sub workflow
+ // If the params are defined in both, we will use parent's params to override the sub workflow(ISSUE-7962)
+ // todo: Do we need to consider the other attribute of Property?
+ // e.g. the subProp's type is not equals with parent, or subProp's direct is not equals with parent
+ // It's suggested to add node name in property, this kind of problem can be solved.
+ List<Property> extraSubParams = subParams.stream()
+ .filter(subProp -> !parentParamKeys.contains(subProp.getProp())).collect(Collectors.toList());
+ parentParams.addAll(extraSubParams);
+ return JSONUtils.toJsonString(parentParams);
}
/**