From eeca96a4a0b4071692fa259a8c8de67fdba27abc Mon Sep 17 00:00:00 2001 From: appunni-m <64424476+appunni-m@users.noreply.github.com> Date: Sun, 3 Dec 2023 16:45:41 +0530 Subject: [PATCH 1/3] Fix: #3876 Update task utils: removeIterationFromTaskRefName Parsing name is not considering task ref name with double underscores - This is not fully fixing the use of this function. There needs to be some kind of validation against the user from setting up the taskRefName with double underscore --- .../java/com/netflix/conductor/common/utils/TaskUtils.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java index 5e83bd73e7..a0521b19f1 100644 --- a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java +++ b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java @@ -26,6 +26,10 @@ public static String getLoopOverTaskRefNameSuffix(int iteration) { public static String removeIterationFromTaskRefName(String referenceTaskName) { String[] tokens = referenceTaskName.split(TaskUtils.LOOP_TASK_DELIMITER); - return tokens.length > 0 ? tokens[0] : referenceTaskName; + int length = tokens.length; + return length > 1 ? String.join( + TaskUtils.LOOP_TASK_DELIMITER, + Arrays.copyOf(tokens, length - 1) + ) : referenceTaskName; } } From 884a9fef88cab08474111e2a5d4a1352734b9fa2 Mon Sep 17 00:00:00 2001 From: appunni-m <64424476+appunni-m@users.noreply.github.com> Date: Mon, 4 Dec 2023 10:58:33 +0530 Subject: [PATCH 2/3] Update TaskUtils.java Added imports as required --- .../main/java/com/netflix/conductor/common/utils/TaskUtils.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java index a0521b19f1..99bd6447ca 100644 --- a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java +++ b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java @@ -12,6 +12,8 @@ */ package com.netflix.conductor.common.utils; +import java.util.Arrays; + public class TaskUtils { private static final String LOOP_TASK_DELIMITER = "__"; From dec43eac8a472c9cef95ca4795efb4d198b9b87d Mon Sep 17 00:00:00 2001 From: appunni-m <64424476+appunni-m@users.noreply.github.com> Date: Mon, 4 Dec 2023 15:23:54 +0530 Subject: [PATCH 3/3] Check for __$i in the reference name --- .../conductor/common/utils/TaskUtils.java | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java index a0521b19f1..d91f77399d 100644 --- a/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java +++ b/common/src/main/java/com/netflix/conductor/common/utils/TaskUtils.java @@ -27,9 +27,24 @@ public static String getLoopOverTaskRefNameSuffix(int iteration) { public static String removeIterationFromTaskRefName(String referenceTaskName) { String[] tokens = referenceTaskName.split(TaskUtils.LOOP_TASK_DELIMITER); int length = tokens.length; - return length > 1 ? String.join( - TaskUtils.LOOP_TASK_DELIMITER, - Arrays.copyOf(tokens, length - 1) - ) : referenceTaskName; + + // Check if the last element is an integer + if (length > 1 && isInteger(tokens[length - 1])) { + // Join all elements except the last one + return String.join(TaskUtils.LOOP_TASK_DELIMITER, Arrays.copyOf(tokens, length - 1)); + } else { + // No integer at the end, return the original string + return referenceTaskName; + } + } + + // Helper method to check if a string is an integer + private static boolean isInteger(String s) { + try { + Integer.parseInt(s); + return true; + } catch (NumberFormatException e) { + return false; + } } }