This is an automated email from the ASF dual-hosted git repository.
xuang7 pushed a commit to branch release/v1.2
in repository https://gitbox.apache.org/repos/asf/texera.git
The following commit(s) were added to refs/heads/release/v1.2 by this push:
new 6e85781e75 fix(local-dev, v1.2): refresh Lakekeeper warehouse S3
endpoint when it already exists (#6999)
6e85781e75 is described below
commit 6e85781e7563a9c26e259717e8f6f21708f3a004
Author: Yicong Huang <[email protected]>
AuthorDate: Wed Jul 29 14:05:40 2026 -0400
fix(local-dev, v1.2): refresh Lakekeeper warehouse S3 endpoint when it
already exists (#6999)
### What changes were proposed in this PR?
Backport of #6197 to `release/v1.2`, cherry-picked from
aaed0857c8a73a4b13fd174417cd9a823f1bab25. The cherry-pick applied
cleanly.
Follows the Direct Backport Push convention; opened as a PR (rather than
a direct push) per a backport-coverage audit.
### Any related issues, documentation, discussions?
Backport of #6197. Originally linked #6195.
### How was this PR tested?
Release-branch CI runs on this PR. Cherry-pick applied cleanly onto
`release/v1.2`; no manual conflict resolution was needed.
### Was this PR authored or co-authored using generative AI tooling?
Yes — backport prepared with Claude Code (mechanical cherry-pick; the
change itself is #6197 by its original author).
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: Jiadong Bai <[email protected]>
---
bin/single-node/docker-compose.yml | 45 +++++++++++++++++++++++++++++++++++++-
1 file changed, 44 insertions(+), 1 deletion(-)
diff --git a/bin/single-node/docker-compose.yml
b/bin/single-node/docker-compose.yml
index a7efb81382..64247d9d66 100644
--- a/bin/single-node/docker-compose.yml
+++ b/bin/single-node/docker-compose.yml
@@ -219,7 +219,50 @@ services:
fi
if jq -e --arg name "$$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME"
'.warehouses[]? | select(.name == $$name)' /tmp/warehouses.txt >/dev/null; then
- echo "Lakekeeper Warehouse
'$$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME' already exists. Skipping
creation."
+ # The warehouse persists its S3 endpoint in Lakekeeper's own DB. The
+ # local-dev launcher sets STORAGE_S3_ENDPOINT to the host LAN IP so
+ # both this container and the host JVMs (Iceberg remote-signing)
reach
+ # the same MinIO — but that IP changes across networks / DHCP leases.
+ # This init is idempotent and would otherwise just skip, leaving a
+ # stale endpoint that breaks workflow execution with an opaque
Iceberg
+ # RESTException. Refresh the stored endpoint on every run (#6195).
+ echo "Lakekeeper Warehouse
'$$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME' already exists. Refreshing its
storage endpoint to '$$STORAGE_S3_ENDPOINT'..."
+ WAREHOUSE_ID=$$(jq -r --arg name
"$$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME" '.warehouses[]? | select(.name
== $$name) | .id' /tmp/warehouses.txt)
+ UPDATE_PAYLOAD=$$(cat <<EOF
+ {
+ "storage-profile": {
+ "type": "s3",
+ "bucket": "$$STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET",
+ "region": "$$STORAGE_S3_REGION",
+ "endpoint": "$$STORAGE_S3_ENDPOINT",
+ "flavor": "s3-compat",
+ "path-style-access": true,
+ "sts-enabled": false
+ },
+ "storage-credential": {
+ "type": "s3",
+ "credential-type": "access-key",
+ "aws-access-key-id": "$$STORAGE_S3_AUTH_USERNAME",
+ "aws-secret-access-key": "$$STORAGE_S3_AUTH_PASSWORD"
+ }
+ }
+ EOF
+ )
+
+ UPDATE_CODE=$$(curl -s -o /tmp/response.txt -w "%{http_code}" \
+ -X POST \
+ -H "Content-Type: application/json" \
+ -d "$$UPDATE_PAYLOAD" \
+
"$$LAKEKEEPER_BASE_URI/management/v1/warehouse/$$WAREHOUSE_ID/storage" || echo
"000")
+
+ if [ "$$UPDATE_CODE" -lt 200 ] || [ "$$UPDATE_CODE" -ge 300 ]; then
+ echo "Failed to refresh Lakekeeper Warehouse storage. HTTP Code:
$$UPDATE_CODE"
+ echo "ERROR RESPONSE:"
+ if [ -f /tmp/response.txt ]; then cat /tmp/response.txt; fi
+ echo ""
+ exit 1
+ fi
+ echo "Refreshed Lakekeeper Warehouse storage endpoint successfully
(HTTP $$UPDATE_CODE)."
else
echo "Warehouse not found. Creating
'$$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME'..."
CREATE_PAYLOAD=$$(cat <<EOF