Skip to content

Conversation

@geruh
Copy link
Contributor

@geruh geruh commented Dec 20, 2025

closes to #2847

Rationale for this change

This PR adds the server endpoint capabilities support, aligning with the Java implementation. While working on the REST scanning support, we need to know if a server supports specific capabilities before making any calls. So this PR also adds some extra support for the current implementation of PI iceberg REST catalog.

The REST catalog will now parse the endpoints field from the config call to determine server capabilities. When a server doesn't respond, we have fallback logic that matches the behavior of Java's rest catalog. The View endpoints are conditionally added to the default with the config property as well.

Are these changes tested?

Added unit tests and tested with the iceberg rest fixture.

Are there any user-facing changes?

Yes added config and alignment with java impl.

cc: @kevinjqliu @Fokko

@kevinjqliu
Copy link
Contributor

wdyt about adding integration tests against the iceberg-rest-fixture?

Running the integration test infra gives me this response on http://localhost:8181/v1/config

{
  "defaults": {},
  "overrides": { "namespace-separator": "%2E" },
  "endpoints":
    [
      "POST v1/oauth/tokens",
      "POST https://auth-server.com/token",
      "GET v1/config",
      "GET /v1/{prefix}/namespaces",
      "POST /v1/{prefix}/namespaces",
      "HEAD /v1/{prefix}/namespaces/{namespace}",
      "GET /v1/{prefix}/namespaces/{namespace}",
      "DELETE /v1/{prefix}/namespaces/{namespace}",
      "POST /v1/{prefix}/namespaces/{namespace}/properties",
      "GET /v1/{prefix}/namespaces/{namespace}/tables",
      "POST /v1/{prefix}/namespaces/{namespace}/tables",
      "HEAD /v1/{prefix}/namespaces/{namespace}/tables/{table}",
      "GET /v1/{prefix}/namespaces/{namespace}/tables/{table}",
      "POST /v1/{prefix}/namespaces/{namespace}/register",
      "POST /v1/{prefix}/namespaces/{namespace}/tables/{table}",
      "DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}",
      "POST /v1/{prefix}/tables/rename",
      "POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/metrics",
      "POST /v1/{prefix}/transactions/commit",
      "GET /v1/{prefix}/namespaces/{namespace}/views",
      "HEAD /v1/{prefix}/namespaces/{namespace}/views/{view}",
      "GET /v1/{prefix}/namespaces/{namespace}/views/{view}",
      "POST /v1/{prefix}/namespaces/{namespace}/views",
      "POST /v1/{prefix}/namespaces/{namespace}/views/{view}",
      "POST /v1/{prefix}/views/rename",
      "DELETE /v1/{prefix}/namespaces/{namespace}/views/{view}",
      "POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan",
      "GET /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan/{plan-id}",
      "POST /v1/{prefix}/namespaces/{namespace}/tables/{table}/tasks",
      "DELETE /v1/{prefix}/namespaces/{namespace}/tables/{table}/plan/{plan-id}",
    ],
}

Copy link
Contributor

@kevinjqliu kevinjqliu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! Thanks for adding this feature.
The PR looks good and is throughly tested. I just have a few nit comments.
Feel free to address here or as a follow up PR

Copy link
Contributor

@kevinjqliu kevinjqliu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM! One more comment about tests

We should probably test against the IRC server for integration test, maybe in tests/integration/test_rest_catalog.py. Can add to this PR or as a follow up

@kevinjqliu kevinjqliu requested a review from Fokko December 29, 2025 22:44
@kevinjqliu kevinjqliu merged commit a8033c1 into apache:main Dec 29, 2025
8 checks passed
@kevinjqliu
Copy link
Contributor

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants