This is an automated email from the ASF dual-hosted git repository.
capistrant pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 45e4bb219ea bugfix: Fix bug that could lead to illegal k8s label
ending in non-alphanumeric (#18981)
45e4bb219ea is described below
commit 45e4bb219ea6447557f82384b3b1a092643b8887
Author: Lucas Capistrant <[email protected]>
AuthorDate: Tue Feb 3 12:52:37 2026 -0600
bugfix: Fix bug that could lead to illegal k8s label ending in
non-alphanumeric (#18981)
---
.../overlord/common/KubernetesOverlordUtils.java | 4 ++-
.../common/KubernetesOverlordUtilsTest.java | 32 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtils.java
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtils.java
index dc7b8f99136..bd5791c3437 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtils.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/main/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtils.java
@@ -36,7 +36,9 @@ public class KubernetesOverlordUtils
public static String convertStringToK8sLabel(String rawString)
{
String trimmedString = rawString == null ? "" :
RegExUtils.replaceAll(rawString, K8S_LABEL_PATTERN, "");
- return StringUtils.left(StringUtils.strip(trimmedString, "_.-"), 63);
+ String truncated = StringUtils.left(trimmedString, 63);
+ // K8s labels must start and end with an alphanumeric character
+ return StringUtils.strip(truncated, "_.-");
}
diff --git
a/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtilsTest.java
b/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtilsTest.java
index 5254e0fbe69..39331c87707 100644
---
a/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtilsTest.java
+++
b/extensions-core/kubernetes-overlord-extensions/src/test/java/org/apache/druid/k8s/overlord/common/KubernetesOverlordUtilsTest.java
@@ -75,4 +75,36 @@ public class KubernetesOverlordUtilsTest
String jobName2 =
KubernetesOverlordUtils.convertTaskIdToJobName("coordinator-issued_compact_1234_telemetry_wikipedia_geteditfailuresinnorthamerica_agg_summ_117_pcgkebcl_2023-07-19T16:53:11.416Z");
Assert.assertNotEquals(jobName1, jobName2);
}
+
+ @Test
+ public void test_longLabelEndsWithAlphanumeric()
+ {
+ // Test case for bug where truncation at 63 chars could result in a label
ending with a special character
+ // This string is 80 characters and would be truncated at position 63,
landing on a hyphen
+ String longLabelHyphen =
"very-long-datasource-name-with-many-illegal_label_endings-that-exceeds-the--------limit-12345678";
+ String longLabelPeriod =
"very-long-datasource-name-with-many-illegal_label_endings-that-exceeds-the........limit-12345678";
+ String longLabelUnderscore =
"very-long-datasource-name-with-many-illegal_label_endings-that-exceeds-the________limit-12345678";
+
+ for (String longLabel : new String[]{longLabelHyphen, longLabelPeriod,
longLabelUnderscore}) {
+ String result =
KubernetesOverlordUtils.convertStringToK8sLabel(longLabel);
+
+ // Result should not exceed 63 characters
+ Assert.assertTrue("Label should not exceed 63 characters",
result.length() <= 63);
+
+ // Result should not be empty
+ Assert.assertFalse("Label should not be empty", result.isEmpty());
+
+ // Result should not end with a hyphen, underscore, or dot
+ Assert.assertFalse("Label should not end with hyphen",
result.endsWith("-"));
+ Assert.assertFalse("Label should not end with underscore",
result.endsWith("_"));
+ Assert.assertFalse("Label should not end with dot",
result.endsWith("."));
+
+ // Result should end with an alphanumeric character
+ char lastChar = result.charAt(result.length() - 1);
+ Assert.assertTrue(
+ "Label should end with alphanumeric character, but ends with: " +
lastChar,
+ Character.isLetterOrDigit(lastChar)
+ );
+ }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]