Skip to content

Commit b6721d2

Browse files
committed
Fix Multi-Level Namespace Signing & Add Iceberg Compatibility Tests
This PR fixes a critical SignatureDoesNotMatch (403) error for multi-level namespace operations and adds comprehensive Iceberg REST Compatibility Kit (RCK) test coverage. Changes Bug Fixes 1. Multi-Level Namespace Signature Mismatch Problem: All operations on multi-level namespaces (e.g., ["parent", "child"]) failed with SignatureDoesNotMatch (403). Root Cause: The Iceberg REST Catalog spec uses \u{001F} (unit separator) to join namespace levels. When URL-encoded, this becomes %1F. However, AWS SigV4 requires the canonical URI to be fully URI-encoded, meaning % must be encoded as %25 (so %1F becomes %251F). The client was signing with %1F, but MinIO server's signature-v4.go:96 calls s3utils.EncodePath() which produces %251F. 2. DataFusion ETag Type Mismatch Fixed type error in src/s3tables/datafusion/object_store.rs where PartInfo::new() received String instead of ETag. 3. Removed Unsupported Scan Planning Test Removed test_server_accepts_filter_json_format from datafusion_full_integration.rs as MinIO server does not support the scan planning API (returns 400 "unsupported API call"). New Test Coverage - iceberg_catalog_compat.rs - 15 tests for namespace/table properties, schema management - iceberg_view_compat.rs - 20 tests for view properties, versions, SQL dialects - iceberg_transactions_compat.rs - 19 tests for data append, concurrent operations - catalog_api_compliance.rs - 26 tests for HTTP headers, edge cases, error responses - Total: 80 new tests for full Iceberg RCK coverage Documentation Added tests/s3tables/README.md with: - Test categories and how to run them - Multi-level namespace compliance explanation - RCK test alignment details - Troubleshooting guide CI/CD Added .github/workflows/s3tables-integration.yml with jobs for: - Basic S3 Tables integration tests - Iceberg compatibility tests (Phases 1-4) - Advanced/concurrent operations - DataFusion integration - Stress tests (manual trigger) How to Test 1. Start MinIO Server MINIO_ROOT_USER=minioadmin \ MINIO_ROOT_PASSWORD=minioadmin \ MINIO_SITE_REGION=us-east-1 \ ./minio server /tmp/minio-data --console-address ":9001" 2. Set Environment Variables export SERVER_ENDPOINT=localhost:9000 export ACCESS_KEY=minioadmin export SECRET_KEY=minioadmin export SERVER_REGION=us-east-1 export TABLES_ENDPOINT=http://localhost:9000 3. Run the tests cargo test -p minio s3tables:: -- --test-threads=4 cargo test -p minio iceberg_catalog_compat -- --nocapture cargo test -p minio iceberg_view_compat -- --nocapture cargo test -p minio iceberg_transactions_compat -- --nocapture cargo test -p minio rck_conformance::nested -- --nocapture Signed-off-by: Shubhendu Ram Tripathi <shubhendu@minio.io>
1 parent 10dcc20 commit b6721d2

21 files changed

+6583
-185
lines changed

.github/workflows/rust-clippy.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ jobs:
3030
- name: Checkout code
3131
uses: actions/checkout@v4
3232

33+
- name: Install system dependencies
34+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
35+
3336
- name: Install Rust toolchain
3437
uses: actions-rs/toolchain@v1
3538
with:

.github/workflows/rust.yml

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@ jobs:
2323
runs-on: ubuntu-latest
2424
steps:
2525
- uses: actions/checkout@v4
26+
- name: Install system dependencies
27+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
2628
- name: clippy
2729
run: cargo clippy --all-targets --all-features --workspace -- -D warnings
2830
test-multi-thread:
2931
runs-on: ubuntu-latest
3032
steps:
3133
- uses: actions/checkout@v4
34+
- name: Install system dependencies
35+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
3236
- name: Run tests
3337
run: |
3438
./tests/start-server.sh
@@ -38,11 +42,14 @@ jobs:
3842
export ENABLE_HTTPS=1
3943
export SERVER_REGION=us-east-1
4044
export MINIO_SSL_CERT_FILE=./tests/public.crt
41-
MINIO_TEST_TOKIO_RUNTIME_FLAVOR="multi_thread" cargo test -- --nocapture
45+
# Exclude s3tables tests - they have their own workflow (s3tables-integration.yml)
46+
MINIO_TEST_TOKIO_RUNTIME_FLAVOR="multi_thread" cargo test -- --nocapture --skip s3tables
4247
test-current-thread:
4348
runs-on: ubuntu-latest
4449
steps:
4550
- uses: actions/checkout@v4
51+
- name: Install system dependencies
52+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
4653
- name: Run tests
4754
run: |
4855
./tests/start-server.sh
@@ -52,13 +59,16 @@ jobs:
5259
export ENABLE_HTTPS=1
5360
export SERVER_REGION=us-east-1
5461
export MINIO_SSL_CERT_FILE=./tests/public.crt
55-
MINIO_TEST_TOKIO_RUNTIME_FLAVOR="current_thread" cargo test -- --nocapture
62+
# Exclude s3tables tests - they have their own workflow (s3tables-integration.yml)
63+
MINIO_TEST_TOKIO_RUNTIME_FLAVOR="current_thread" cargo test -- --nocapture --skip s3tables
5664
5765
build:
5866
runs-on: ubuntu-latest
59-
timeout-minutes: 5
67+
timeout-minutes: 10
6068
steps:
6169
- uses: actions/checkout@v4
70+
- name: Install system dependencies
71+
run: sudo apt-get update && sudo apt-get install -y libfontconfig1-dev
6272
- name: Build
6373
run: |
6474
cargo --version

0 commit comments

Comments
 (0)