From 56afb709f9b31086975acb1a23e373b07f1a7f5e Mon Sep 17 00:00:00 2001 From: heesung-sohn Date: Fri, 31 Oct 2025 14:42:33 -0700 Subject: [PATCH] Added entry_location_rocksdb.conf --- .../controllers/BaseResourcesFactory.java | 32 +++++++++++++++++++ .../AutorecoveryResourcesFactory.java | 10 +++++- .../BookKeeperResourcesFactory.java | 9 ++++++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/operator/src/main/java/com/datastax/oss/kaap/controllers/BaseResourcesFactory.java b/operator/src/main/java/com/datastax/oss/kaap/controllers/BaseResourcesFactory.java index 9cd61e05..475d868a 100644 --- a/operator/src/main/java/com/datastax/oss/kaap/controllers/BaseResourcesFactory.java +++ b/operator/src/main/java/com/datastax/oss/kaap/controllers/BaseResourcesFactory.java @@ -79,6 +79,8 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import java.util.stream.Collectors; import lombok.extern.jbosslog.JBossLog; import org.apache.commons.codec.digest.DigestUtils; @@ -88,6 +90,15 @@ @JBossLog public abstract class BaseResourcesFactory { + // Regex to capture the version string after a colon and optionally extract major version + // This pattern looks for a colon, then captures the entire version string + // The first group (\\d+) specifically captures the major version + public static final Pattern IMAGE_STRING_PATTERN = Pattern.compile( + ":(?(\\d+)(?:\\.\\d+){0,2}(?:[\\-][a-zA-Z0-9\\.]+)?)"); + + public static final Pattern MAJOR_VERSION_PATTERN = Pattern.compile("^(\\d+)"); + + public static final String CONFIG_PULSAR_PREFIX = "PULSAR_PREFIX_"; public static final String DEPLOYMENT_REVISION_ANNOTATION = "deployment.kubernetes.io/revision"; protected final KubernetesClient client; @@ -1137,4 +1148,25 @@ protected static List getSidecars(List containers) { } return containers; } + + public int getPulsarMajorVersion(String imageString) { + int pulsarMajorVersion = 2; + if (imageString == null) { + return pulsarMajorVersion; + } + Matcher imageStringMatcher = IMAGE_STRING_PATTERN.matcher(imageString); + + if (imageStringMatcher.find()) { + String fullVersion = imageStringMatcher.group("fullVersion"); + System.out.println("Full Version: " + fullVersion); + // Extract the major version specifically from the fullVersion string + Matcher majorVersionMatcher = MAJOR_VERSION_PATTERN.matcher(fullVersion); + if (majorVersionMatcher.find()) { + String majorVersionStr = majorVersionMatcher.group(1); + System.out.println("Major Version: " + majorVersionStr); + pulsarMajorVersion = Integer.parseInt(majorVersionStr); + } + } + return pulsarMajorVersion; + } } diff --git a/operator/src/main/java/com/datastax/oss/kaap/controllers/autorecovery/AutorecoveryResourcesFactory.java b/operator/src/main/java/com/datastax/oss/kaap/controllers/autorecovery/AutorecoveryResourcesFactory.java index c02fb7c4..0ce01c59 100644 --- a/operator/src/main/java/com/datastax/oss/kaap/controllers/autorecovery/AutorecoveryResourcesFactory.java +++ b/operator/src/main/java/com/datastax/oss/kaap/controllers/autorecovery/AutorecoveryResourcesFactory.java @@ -140,7 +140,15 @@ public void patchDeployment() { addTlsVolumes(volumeMounts, volumes, getTlsSecretNameForAutorecovery()); } String mainArg = "bin/apply-config-from-env.py conf/bookkeeper.conf && "; - if (tlsEnabledOnBookKeeper) { + + int pulsarMajorVersion = getPulsarMajorVersion(spec.getImage()); + if (pulsarMajorVersion >= 4) { + mainArg += "bin/update-ini-from-env.py conf/entry_location_rocksdb.conf PULSAR_PREFIX_entry_location_rocksdb_ && "; + } else if (pulsarMajorVersion >= 3) { + mainArg += "bin/apply-config-from-env.py conf/entry_location_rocksdb.conf --prefix PULSAR_PREFIX_entry_location_rocksdb_TableOptions_ && "; + } + + if (tlsEnabledOnBookKeeper) { mainArg += "openssl pkcs8 -topk8 -inform PEM -outform PEM -in /pulsar/certs/tls.key " + "-out /pulsar/tls-pk8.key -nocrypt && "; } diff --git a/operator/src/main/java/com/datastax/oss/kaap/controllers/bookkeeper/BookKeeperResourcesFactory.java b/operator/src/main/java/com/datastax/oss/kaap/controllers/bookkeeper/BookKeeperResourcesFactory.java index dda0668a..6ab13acd 100644 --- a/operator/src/main/java/com/datastax/oss/kaap/controllers/bookkeeper/BookKeeperResourcesFactory.java +++ b/operator/src/main/java/com/datastax/oss/kaap/controllers/bookkeeper/BookKeeperResourcesFactory.java @@ -59,6 +59,7 @@ public class BookKeeperResourcesFactory extends BaseResourcesFactory getInitContainerNames(String clusterName, String baseName) { return List.of(getMainContainerName(clusterName, baseName)); } @@ -247,6 +248,14 @@ public StatefulSet generateStatefulSet() { ); String mainArg = "bin/apply-config-from-env.py conf/bookkeeper.conf && "; + + int pulsarMajorVersion = getPulsarMajorVersion(spec.getImage()); + if (pulsarMajorVersion >= 4) { + mainArg += "bin/update-ini-from-env.py conf/entry_location_rocksdb.conf PULSAR_PREFIX_entry_location_rocksdb_ && "; + } else if (pulsarMajorVersion >= 3) { + mainArg += "bin/apply-config-from-env.py conf/entry_location_rocksdb.conf --prefix PULSAR_PREFIX_entry_location_rocksdb_TableOptions_ && "; + } + final boolean tlsEnabledOnBookKeeper = isTlsEnabledOnBookKeeper(); if (tlsEnabledOnBookKeeper) { mainArg +=