This is an automated email from the ASF dual-hosted git repository. github-merge-queue[bot] pushed a commit to branch gh-readonly-queue/main/pr-6033-2442e8f3ebd12353bd5c9cfa40873a1f980e7011 in repository https://gitbox.apache.org/repos/asf/texera.git
commit 1073b22f8f69d0e44b643047b856efc5f758d665 Author: Meng Wang <[email protected]> AuthorDate: Tue Jun 30 11:28:54 2026 -0700 chore: remove obsolete bin/bootstrap-lakekeeper.sh (#6033) ### What changes were proposed in this PR? `bin/bootstrap-lakekeeper.sh` ran Lakekeeper natively on the host, a workaround from when Docker Lakekeeper wasn't reachable from host-native Texera (the warehouse's S3 endpoint was registered as a Docker-internal hostname the host couldn't resolve, and switching it to `localhost` broke the Lakekeeper-container → MinIO link). `bin/local-dev.sh` (#5961, merged) now runs Lakekeeper in Docker with the S3 endpoint set to the host's LAN IP — reachable from both the host-native Texera and the Lakekeeper container — so the native-bootstrap path is redundant. This PR removes: - `bin/bootstrap-lakekeeper.sh` (the script) - `docs/tutorials/guide-to-launch-lakekeeper.md` (its tutorial — every step documented the now-removed native flow; nothing in it survives) - the `bootstrap-lakekeeper.sh` row in `bin/README.md` Documenting the `local-dev.sh` Lakekeeper flow, if wanted, is a separate follow-up. ### Any related issues, documentation, discussions? Closes #6032. Follows up #5961. ### How was this PR tested? No code change — this removes a host-only bootstrap script and its documentation, neither of which is invoked by CI, the build, containers, or any other script (CI provisions Lakekeeper independently via `docker run` / a native binary in `build.yml`). `grep -rn bootstrap-lakekeeper` over the repo confirms no remaining references after the removal. ### Was this PR authored or co-authored using generative AI tooling? Generated-by: Claude Code (claude-opus-4-7) --- bin/README.md | 1 - bin/bootstrap-lakekeeper.sh | 473 --------------------------- docs/tutorials/guide-to-launch-lakekeeper.md | 119 ------- 3 files changed, 593 deletions(-) diff --git a/bin/README.md b/bin/README.md index 7ffcf0b782..2592cefe38 100644 --- a/bin/README.md +++ b/bin/README.md @@ -62,7 +62,6 @@ binary `NOTICE`/`LICENSE` files (`audit_jar_licenses.py`, | Path | Purpose | | --- | --- | -| `bootstrap-lakekeeper.sh` | Set up a local Lakekeeper (Iceberg REST catalog) instance for Texera. | | `utils/` | Shared shell helpers (`resolve-texera-home.sh`, `texera-logging.sh`) sourced by other scripts. | | `pylsp/` | Dockerized Python language server used by the UDF editor. | | `y-websocket-server/` | Dockerized Yjs websocket server backing collaborative editing. | diff --git a/bin/bootstrap-lakekeeper.sh b/bin/bootstrap-lakekeeper.sh deleted file mode 100755 index 17452e9f7d..0000000000 --- a/bin/bootstrap-lakekeeper.sh +++ /dev/null @@ -1,473 +0,0 @@ -#!/usr/bin/env bash -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. - -# Prerequisites: -# - Already know how to setup Texera -# - macOS or Linux (Lakekeeper does not publish Windows binaries) -# - A running PostgreSQL instance (the same one Texera uses is fine) -# - An accessible S3 bucket -# - The AWS CLI (awscli) installed - -set -e - -# ============================================================================== -# User Configuration - Edit the values below before running this script -# ============================================================================== -# -# IMPORTANT: If you change values in storage.conf, you MUST also update the -# matching defaults here (or export the corresponding STORAGE_* environment -# variables before running this script) -# -# ============================================================================== - -# Storage settings — must stay in sync with storage.conf -# if needed, update the default values after `:-` to match storage.conf -STORAGE_ICEBERG_CATALOG_REST_URI="${STORAGE_ICEBERG_CATALOG_REST_URI:-http://localhost:8181/catalog}" -STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME="${STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME:-texera}" -STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET="${STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET:-texera-iceberg}" -STORAGE_S3_REGION="${STORAGE_S3_REGION:-us-west-2}" -STORAGE_S3_ENDPOINT="${STORAGE_S3_ENDPOINT:-http://localhost:9000}" -STORAGE_S3_AUTH_USERNAME="${STORAGE_S3_AUTH_USERNAME:-texera_minio}" -STORAGE_S3_AUTH_PASSWORD="${STORAGE_S3_AUTH_PASSWORD:-password}" - -# Lakekeeper binary — defaults to `lakekeeper` on $PATH (e.g. after -# `brew install lakekeeper`). Override by exporting LAKEKEEPER_BINARY_PATH -# or by editing the default below. -LAKEKEEPER_BINARY_PATH="${LAKEKEEPER_BINARY_PATH:-lakekeeper}" - -# Lakekeeper PostgreSQL connection URLs -# LAKEKEEPER__PG_DATABASE_URL_READ="postgres://<user>:<urlencoded_password>@<host>:5432/texera_lakekeeper" -# LAKEKEEPER__PG_DATABASE_URL_WRITE="postgres://<user>:<urlencoded_password>@<host>:5432/texera_lakekeeper" -LAKEKEEPER__PG_DATABASE_URL_READ="" -LAKEKEEPER__PG_DATABASE_URL_WRITE="" - -# Lakekeeper encryption key -LAKEKEEPER__PG_ENCRYPTION_KEY="texera_key" - -# Lakekeeper metrics port -LAKEKEEPER__METRICS_PORT="9091" - - -# ============================================================================== -# End of User Configuration -# ============================================================================== - -# Derive bootstrap-internal values from the storage settings above. -LAKEKEEPER_BASE_URI="${STORAGE_ICEBERG_CATALOG_REST_URI%/}" -LAKEKEEPER_BASE_URI="${LAKEKEEPER_BASE_URI%/catalog}" -WAREHOUSE_NAME="$STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME" -S3_REGION="$STORAGE_S3_REGION" -S3_BUCKET="$STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET" -S3_ENDPOINT="$STORAGE_S3_ENDPOINT" -S3_USERNAME="$STORAGE_S3_AUTH_USERNAME" -S3_PASSWORD="$STORAGE_S3_AUTH_PASSWORD" -STORAGE_PATH="s3://${S3_BUCKET}/iceberg/${WAREHOUSE_NAME}" - -echo "==========================================" -echo "Lakekeeper Bootstrap and Warehouse Setup" -echo "==========================================" -echo "Lakekeeper Base URI: $LAKEKEEPER_BASE_URI" -echo "Lakekeeper Binary: $LAKEKEEPER_BINARY_PATH" -echo "Warehouse Name: $WAREHOUSE_NAME" -echo "S3 Endpoint: $S3_ENDPOINT" -echo "S3 Region: $S3_REGION" -echo "S3 Bucket: $S3_BUCKET" -echo "Storage Path: $STORAGE_PATH" -echo "" - -# Function to check if Lakekeeper is running -check_lakekeeper_running() { - local health_url="${LAKEKEEPER_BASE_URI}/health" - if curl -s -f "$health_url" > /dev/null 2>&1; then - return 0 # Running - else - return 1 # Not running - fi -} - -# Function to bootstrap the Lakekeeper server (creates default project). -# This is idempotent - safe to call even if already bootstrapped. -# Returns: 0=success (or already bootstrapped), 1=failure -bootstrap_lakekeeper_server() { - local base_uri="$1" - local bootstrap_url="${base_uri}/management/v1/bootstrap" - - echo "Bootstrapping Lakekeeper server (creating default project)..." - echo " URL: $bootstrap_url" - - local temp_response - temp_response=$(mktemp) || { - echo "✗ Failed to create temporary file" - return 1 - } - - local http_code - http_code=$(curl -s -o "$temp_response" -w "%{http_code}" \ - -X POST \ - -H "Content-Type: application/json" \ - -d '{"accept-terms-of-use": true}' \ - "$bootstrap_url" 2>/dev/null || echo "000") - - echo " HTTP status: $http_code" - - case "$http_code" in - 000) - echo "✗ Failed to connect to Lakekeeper at $bootstrap_url" - rm -f "$temp_response" || true - return 1 - ;; - 2*) - echo "✓ Lakekeeper server bootstrapped successfully (HTTP $http_code)" - rm -f "$temp_response" || true - return 0 - ;; - *) - if grep -q "CatalogAlreadyBootstrapped" "$temp_response" 2>/dev/null; then - echo "✓ Lakekeeper server already bootstrapped (HTTP $http_code), continuing." - rm -f "$temp_response" || true - return 0 - fi - echo "✗ Failed to bootstrap Lakekeeper server (HTTP $http_code)" - echo " Response body:" - cat "$temp_response" | sed 's/^/ /' || true - rm -f "$temp_response" || true - return 1 - ;; - esac -} - -# Function to check if S3 bucket exists (requires AWS CLI) -check_S3_bucket() { - local bucket_name="$1" - local endpoint="$2" - local username="$3" - local password="$4" - local region="$5" - - if ! command -v aws >/dev/null 2>&1; then - echo "✗ Error: AWS CLI is required for S3 bucket operations." - echo " Install it with: pip install awscli" - return 1 - fi - - if AWS_ACCESS_KEY_ID="$username" AWS_SECRET_ACCESS_KEY="$password" AWS_DEFAULT_REGION="$region" \ - aws --endpoint-url="$endpoint" s3 ls "s3://${bucket_name}/" >/dev/null 2>&1; then - return 0 # Bucket exists - else - return 1 # Bucket doesn't exist or error - fi -} - -# Function to create S3 bucket (requires AWS CLI) -create_S3_bucket() { - local bucket_name="$1" - local endpoint="$2" - local username="$3" - local password="$4" - local region="$5" - - if ! command -v aws >/dev/null 2>&1; then - echo "✗ Error: AWS CLI is required for S3 bucket operations." - echo " Install it with: pip install awscli" - return 1 - fi - - if AWS_ACCESS_KEY_ID="$username" AWS_SECRET_ACCESS_KEY="$password" AWS_DEFAULT_REGION="$region" \ - aws --endpoint-url="$endpoint" s3 mb "s3://${bucket_name}" >/dev/null 2>&1; then - return 0 # Success - else - return 1 # Failed - fi -} - -# Function to start Lakekeeper -start_lakekeeper() { - export LAKEKEEPER__METRICS_PORT - export LAKEKEEPER__PG_ENCRYPTION_KEY - - echo "Starting Lakekeeper..." - - # Validate LAKEKEEPER_BINARY_PATH — `command -v` resolves both bare names - # via $PATH lookup and absolute paths. - if ! command -v "$LAKEKEEPER_BINARY_PATH" >/dev/null 2>&1; then - echo "✗ Error: Lakekeeper binary '$LAKEKEEPER_BINARY_PATH' not found." - echo " Install it via 'brew install lakekeeper' (macOS) or set" - echo " LAKEKEEPER_BINARY_PATH to an absolute path / edit the default in this script." - exit 1 - fi - - local binary_path="$LAKEKEEPER_BINARY_PATH" - - # Validate required database URLs - if [ -z "$LAKEKEEPER__PG_DATABASE_URL_READ" ] || [ -z "$LAKEKEEPER__PG_DATABASE_URL_WRITE" ]; then - echo "✗ Error: Database URLs not configured." - echo " Please set LAKEKEEPER__PG_DATABASE_URL_READ and LAKEKEEPER__PG_DATABASE_URL_WRITE" - echo " by exporting them as env vars or editing the User Configuration section in this script." - exit 1 - fi - export LAKEKEEPER__PG_DATABASE_URL_READ - export LAKEKEEPER__PG_DATABASE_URL_WRITE - - # Run migration first - echo "Running Lakekeeper migration..." - if ! "$binary_path" migrate; then - echo "✗ Failed to run Lakekeeper migration" - return 1 - fi - - # Start Lakekeeper in background - echo "Starting Lakekeeper server..." - nohup "$binary_path" serve > /tmp/lakekeeper.log 2>&1 & - local lakekeeper_pid=$! - echo "Lakekeeper started with PID: $lakekeeper_pid" - - # Wait for Lakekeeper to be ready - echo "Waiting for Lakekeeper to be ready..." - local max_attempts=30 - local attempt=1 - while [ $attempt -le $max_attempts ]; do - if check_lakekeeper_running; then - echo "✓ Lakekeeper is ready!" - return 0 - fi - if [ $attempt -eq $max_attempts ]; then - echo "✗ Lakekeeper did not become ready after $max_attempts attempts" - echo " Check logs at /tmp/lakekeeper.log" - return 1 - fi - echo " Waiting for Lakekeeper... ($attempt/$max_attempts)" - sleep 2 - attempt=$((attempt + 1)) - done -} - -# Function to check if warehouse exists -# Returns: 0=exists, 1=not found, 2=connection error -check_warehouse_exists() { - local warehouse_name="$1" - local base_uri="$2" - - local list_url="${base_uri}/management/v1/warehouse" - - echo "Checking if warehouse '$warehouse_name' exists..." - - local temp_response - temp_response=$(mktemp) || { - echo "✗ Failed to create temporary file" - return 2 - } - - local http_code - http_code=$(curl -s -o "$temp_response" -w "%{http_code}" "$list_url" 2>/dev/null || echo "000") - - if [ "$http_code" = "000" ]; then - rm -f "$temp_response" || true - echo "✗ Failed to connect to Lakekeeper at $list_url" - return 2 - fi - - if [ "$http_code" != "200" ]; then - echo "⚠ Warning: Unexpected HTTP status $http_code when listing warehouses" - cat "$temp_response" 2>/dev/null | sed 's/^/ /' || true - rm -f "$temp_response" || true - return 1 - fi - - # Check if warehouse name exists in the response - # Response format: {"warehouses":[{"name":"...",...},...]} - local found=1 - if command -v jq >/dev/null 2>&1; then - if jq -e ".warehouses[] | select(.name == \"$warehouse_name\")" "$temp_response" >/dev/null 2>&1; then - found=0 - fi - else - if grep -q "\"name\"[[:space:]]*:[[:space:]]*\"$warehouse_name\"" "$temp_response" 2>/dev/null; then - found=0 - fi - fi - - rm -f "$temp_response" 2>/dev/null || true - return $found -} - -# Function to create warehouse -# Args: warehouse_name base_uri s3_bucket s3_region s3_endpoint s3_username s3_password -# Returns: 0=success, 1=failure -create_warehouse() { - local warehouse_name="$1" - local base_uri="$2" - local bucket="$3" - local region="$4" - local endpoint="$5" - local username="$6" - local password="$7" - - local create_url="${base_uri}/management/v1/warehouse" - - local create_payload=$(cat <<EOF -{ - "warehouse-name": "$warehouse_name", - "storage-profile": { - "type": "s3", - "bucket": "$bucket", - "region": "$region", - "endpoint": "$endpoint", - "flavor": "s3-compat", - "path-style-access": true, - "sts-enabled": false - }, - "storage-credential": { - "type": "s3", - "credential-type": "access-key", - "aws-access-key-id": "${username}", - "aws-secret-access-key": "${password}" - } -} -EOF -) - - echo "Creating warehouse '$warehouse_name'..." - echo " URL: $create_url" - echo " Bucket: $bucket, Region: $region, Endpoint: $endpoint" - - local temp_response - temp_response=$(mktemp) || { - echo "✗ Failed to create temporary file" - return 1 - } - - local http_code - http_code=$(curl -s -o "$temp_response" -w "%{http_code}" \ - -X POST \ - -H "Content-Type: application/json" \ - -d "$create_payload" \ - "$create_url" || echo "000") - - echo " HTTP status: $http_code" - - case "$http_code" in - 000) - echo "✗ Failed to connect to Lakekeeper at $create_url" - rm -f "$temp_response" || true - return 1 - ;; - 2*) - echo "✓ Warehouse '$warehouse_name' created successfully (HTTP $http_code)" - rm -f "$temp_response" || true - return 0 - ;; - 409) - echo "✓ Warehouse '$warehouse_name' already exists (HTTP 409), treat as success." - rm -f "$temp_response" || true - return 0 - ;; - *) - echo "✗ Failed to create warehouse '$warehouse_name' (HTTP $http_code)" - echo " Response body:" - cat "$temp_response" 2>/dev/null | sed 's/^/ /' || true - rm -f "$temp_response" || true - return 1 - ;; - esac -} - -# Step 1: Check if Lakekeeper is running, start if not -echo "Step 1: Checking Lakekeeper status..." -if check_lakekeeper_running; then - echo "✓ Lakekeeper is already running" -else - echo "Lakekeeper is not running, attempting to start..." - if start_lakekeeper; then - echo "✓ Lakekeeper started successfully" - else - echo "✗ Failed to start Lakekeeper" - exit 1 - fi -fi -echo "" - -# Step 2: Bootstrap the Lakekeeper server (creates default project) -echo "Step 2: Bootstrapping Lakekeeper server..." -if bootstrap_lakekeeper_server "$LAKEKEEPER_BASE_URI"; then - echo "✓ Lakekeeper server bootstrap completed" -else - echo "✗ Failed to bootstrap Lakekeeper server" - echo " Please check that Lakekeeper is running and accessible at $LAKEKEEPER_BASE_URI" - exit 1 -fi -echo "" - -# Step 3: Check and create S3 bucket -echo "Step 3: Checking S3 bucket..." -if check_S3_bucket "$S3_BUCKET" "$S3_ENDPOINT" "$S3_USERNAME" "$S3_PASSWORD" "$S3_REGION"; then - echo "✓ S3 bucket '$S3_BUCKET' already exists" -else - echo "S3 bucket '$S3_BUCKET' does not exist, creating..." - if create_S3_bucket "$S3_BUCKET" "$S3_ENDPOINT" "$S3_USERNAME" "$S3_PASSWORD" "$S3_REGION"; then - echo "✓ S3 bucket '$S3_BUCKET' created successfully" - else - echo "✗ Failed to create S3 bucket '$S3_BUCKET'" - echo " Please ensure S3 is running and accessible at $S3_ENDPOINT" - exit 1 - fi -fi -echo "" - -# Step 4: Check and create warehouse -echo "Step 4: Checking and creating warehouse..." - -set +e # Temporarily disable exit on error to capture function return value -check_warehouse_exists "$WAREHOUSE_NAME" "$LAKEKEEPER_BASE_URI" -check_result=$? -set -e # Re-enable exit on error - -case $check_result in - 0) - echo "✓ Warehouse '$WAREHOUSE_NAME' already exists, skipping creation." - echo "" - echo "==========================================" - echo "✓ Bootstrap completed successfully!" - echo "==========================================" - exit 0 - ;; - 1) - echo "Warehouse '$WAREHOUSE_NAME' does not exist, will create..." - ;; - 2) - exit 1 - ;; - *) - echo "✗ Unexpected error (code: $check_result)" - exit 1 - ;; -esac - -# Create warehouse -if create_warehouse "$WAREHOUSE_NAME" "$LAKEKEEPER_BASE_URI" "$S3_BUCKET" "$S3_REGION" "$S3_ENDPOINT" "$S3_USERNAME" "$S3_PASSWORD"; then - echo "" - echo "==========================================" - echo "✓ Bootstrap completed successfully!" - echo "==========================================" - exit 0 -else - echo "" - echo "==========================================" - echo "✗ Bootstrap failed!" - echo "==========================================" - exit 1 -fi diff --git a/docs/tutorials/guide-to-launch-lakekeeper.md b/docs/tutorials/guide-to-launch-lakekeeper.md deleted file mode 100644 index 82a60e9fa5..0000000000 --- a/docs/tutorials/guide-to-launch-lakekeeper.md +++ /dev/null @@ -1,119 +0,0 @@ ---- -title: "Guide to launch Lakekeeper as the RESTCatalog Service for Texera's workflow result storage" -weight: 50 ---- - -This guide goes through the process of setting up Lakekeeper, which can be used as the REST Catalog service for Texera's workflow result storage. - -For more information of why using RESTCatalog, see [Issue #4126](https://github.com/apache/texera/issues/4126). - - ## Prerequisites - - - **OS: macOS or Linux** - - Already know how to setup Texera - - A running PostgreSQL instance - - An accessible S3 Bucket Endpoint - - [awscli](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html) needs to be installed - - ## Step 1: Install Lakekeeper - - On macOS / Linux, run - - ```bash - brew install lakekeeper - ``` - - Verify the installation by running: - - ```bash - lakekeeper --version - ``` - - > Alternatively, you can download a pre-built binary from the https://github.com/lakekeeper/lakekeeper/releases and place it on your $PATH. - - ## Step 2: Create a Database for Lakekeeper in Postgres - - Create a database using the SQL script in Texera's repository: - - ```bash - psql -f sql/texera_lakekeeper.sql - ``` - - ## Step 3: Configure the Bootstrap Script - - Edit the **User Configuration** section at the top of `bin/bootstrap-lakekeeper.sh`. - - First, set the PostgreSQL connection URLs used by Lakekeeper: - - ```diff - -LAKEKEEPER__PG_DATABASE_URL_READ="" - -LAKEKEEPER__PG_DATABASE_URL_WRITE="" - +LAKEKEEPER__PG_DATABASE_URL_READ="postgres://<user>:<urlencoded_password>@<host>:5432/texera_lakekeeper" - +LAKEKEEPER__PG_DATABASE_URL_WRITE="postgres://<user>:<urlencoded_password>@<host>:5432/texera_lakekeeper" - ``` - - If you have customized storage-related values in `common/config/src/main/resources/storage.conf` (for example, the bucket name, S3 endpoint, or MinIO credentials), check the below environment variables in the script and modify their values accordingly: - -```shell - # Storage settings — must stay in sync with storage.conf - # if needed, update the default values after `:-` to match storage.conf -STORAGE_ICEBERG_CATALOG_REST_URI="${STORAGE_ICEBERG_CATALOG_REST_URI:-http://localhost:8181/catalog}" -STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME="${STORAGE_ICEBERG_CATALOG_REST_WAREHOUSE_NAME:-texera}" -STORAGE_ICEBERG_CATALOG_REST_REGION="${STORAGE_ICEBERG_CATALOG_REST_REGION:-us-west-2}" -STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET="${STORAGE_ICEBERG_CATALOG_REST_S3_BUCKET:-texera-iceberg}" -STORAGE_S3_ENDPOINT="${STORAGE_S3_ENDPOINT:-http://localhost:9000}" -STORAGE_S3_AUTH_USERNAME="${STORAGE_S3_AUTH_USERNAME:-texera_minio}" -STORAGE_S3_AUTH_PASSWORD="${STORAGE_S3_AUTH_PASSWORD:-password}" -``` - - ## Step 4: Run the Bootstrap Script - - Run the following script in Texera repo: - ```bash - bash bin/bootstrap-lakekeeper.sh - ``` - - The script will: - - 1. Start Lakekeeper if it's not already running (on http://localhost:8181) - 2. Bootstrap the Lakekeeper server (creates the default project) - 3. Create the texera-iceberg bucket in MinIO if it doesn't exist - 4. Register the texera warehouse with Lakekeeper, pointing at that bucket - - - ## Step 5: Verify - - Check that Lakekeeper is healthy by running: - - ```bash - curl http://localhost:8181/health - ``` - - You should see a JSON response with `"health":"ok"`. - - Verify that the warehouse has been created by running: - ```bash - curl http://localhost:8181/management/v1/warehouse - ``` - - You should see a warehouse in the response. - - ## Step 6: Switch Texera to use the REST catalog - - To make Texera actually use the Lakekeeper REST catalog you just set up, `edit common/config/src/main/resources/storage.conf`: - - ```diff - storage { - iceberg { - catalog { - - type = postgres - + type = rest - ... - } - } - } - ``` - - ## Done! - - Lakekeeper is now your service of managing Iceberg RESTCatalog. Texera workflows that produce Iceberg results will write to the S3 bucket via the Iceberg RESTCatalog.
