From 2f558fa3a70f92b062baeb58afe03ec40396e953 Mon Sep 17 00:00:00 2001 From: "priyal.chawda@mendix.com" Date: Mon, 21 Sep 2026 13:32:27 +0530 Subject: [PATCH 1/4] Skip staging SAP HANA client JAR if already present in userlib or vendorlib Checks both model/lib/userlib and model/lib/vendorlib for an existing ngdbc*.jar before downloading. The Mendix runtime scans both directories, so staging a duplicate is unnecessary. Co-Authored-By: Claude Sonnet 4.6 --- buildpack/core/runtime.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/buildpack/core/runtime.py b/buildpack/core/runtime.py index a92971849..7279dd0bc 100644 --- a/buildpack/core/runtime.py +++ b/buildpack/core/runtime.py @@ -9,6 +9,7 @@ import time import backoff +import glob import requests from buildpack import util from lib.m2ee import M2EE as m2ee_class @@ -62,9 +63,19 @@ def _stage_hana_client(build_dir): if not enabled: return + model_lib = os.path.join(build_dir, "model", "lib") + for lib_dir in ("userlib", "vendorlib"): + existing = glob.glob(os.path.join(model_lib, lib_dir, "ngdbc*.jar")) + if existing: + logging.info( + "SAP HANA client JAR already present at [%s], skipping download", + existing[0], + ) + return + cdn_prefix = util.BLOBSTORE_BUILDPACK_DEFAULT_PREFIX + "sap-hana-client" try: - dest = os.path.join(build_dir, "model", "lib", "userlib") + dest = os.path.join(model_lib, "userlib") util.mkdir_p(dest) version_url = util.get_blobstore_url(f"{cdn_prefix}/version.txt") resp = requests.get(version_url, timeout=10) From 9980a7392d271adf103588be1fb104df09f29f50 Mon Sep 17 00:00:00 2001 From: "priyal.chawda@mendix.com" Date: Mon, 21 Sep 2026 14:26:25 +0530 Subject: [PATCH 2/4] Log JAR version when skipping SAP HANA client download Extract version from filename (ngdbc-{version}.jar) when an existing JAR is found in userlib or vendorlib. Falls back to "unknown" if the filename does not include a version (e.g. manually placed jar). Co-Authored-By: Claude Sonnet 4.6 --- buildpack/core/runtime.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/buildpack/core/runtime.py b/buildpack/core/runtime.py index 7279dd0bc..0886fbdc9 100644 --- a/buildpack/core/runtime.py +++ b/buildpack/core/runtime.py @@ -67,8 +67,11 @@ def _stage_hana_client(build_dir): for lib_dir in ("userlib", "vendorlib"): existing = glob.glob(os.path.join(model_lib, lib_dir, "ngdbc*.jar")) if existing: + match = re.search(r"ngdbc-(.+)\.jar", os.path.basename(existing[0])) + version = match.group(1) if match else "unknown" logging.info( - "SAP HANA client JAR already present at [%s], skipping download", + "SAP HANA client JAR version [%s] already present at [%s], skipping download", + version, existing[0], ) return From e8ff80580f421cee38871162cd96e7ad0819a63c Mon Sep 17 00:00:00 2001 From: "priyal.chawda@mendix.com" Date: Mon, 21 Sep 2026 14:47:44 +0530 Subject: [PATCH 3/4] Address review: fix glob pattern and simplify skip log - Use ngdbc-*.jar (with dash) in glob to avoid false matches - Remove version parsing; log just the filename when skipping download Co-Authored-By: Claude Sonnet 4.6 --- buildpack/core/runtime.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/buildpack/core/runtime.py b/buildpack/core/runtime.py index 0886fbdc9..d6ec8b940 100644 --- a/buildpack/core/runtime.py +++ b/buildpack/core/runtime.py @@ -65,14 +65,11 @@ def _stage_hana_client(build_dir): model_lib = os.path.join(build_dir, "model", "lib") for lib_dir in ("userlib", "vendorlib"): - existing = glob.glob(os.path.join(model_lib, lib_dir, "ngdbc*.jar")) + existing = glob.glob(os.path.join(model_lib, lib_dir, "ngdbc-*.jar")) if existing: - match = re.search(r"ngdbc-(.+)\.jar", os.path.basename(existing[0])) - version = match.group(1) if match else "unknown" logging.info( - "SAP HANA client JAR version [%s] already present at [%s], skipping download", - version, - existing[0], + "SAP HANA client JAR [%s] already present, skipping download", + os.path.basename(existing[0]), ) return From a8b32d05d465eb722e974fe4ec3e3484e4ff2268 Mon Sep 17 00:00:00 2001 From: "priyal.chawda@mendix.com" Date: Mon, 21 Sep 2026 14:51:20 +0530 Subject: [PATCH 4/4] Log full JAR path to show whether it came from userlib or vendorlib Co-Authored-By: Claude Sonnet 4.6 --- buildpack/core/runtime.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/buildpack/core/runtime.py b/buildpack/core/runtime.py index d6ec8b940..b17db959d 100644 --- a/buildpack/core/runtime.py +++ b/buildpack/core/runtime.py @@ -69,7 +69,7 @@ def _stage_hana_client(build_dir): if existing: logging.info( "SAP HANA client JAR [%s] already present, skipping download", - os.path.basename(existing[0]), + existing[0], ) return