[
https://issues.apache.org/jira/browse/NIFI-16335?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18117225#comment-18117225
]
Lewis J commented on NIFI-16335:
--------------------------------
This is actually the same as #16396.
Bearer auth works in this circumstance, but client/secret credential auth does
not.
Can link them if needed. The putIceberg processor is missing some implemented
methods
> PutIcebergRecord fails with UnsupportedOperationException on every table load
> against a REST catalog (freshness-aware loading not implemented in
> CredentialsRefreshRESTClient)
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: NIFI-16335
> URL: https://issues.apache.org/jira/browse/NIFI-16335
> Project: Apache NiFi
> Issue Type: Bug
> Components: NiFi API
> Affects Versions: 2.11.0
> Environment: NiFi 2.11.0, Java 21 (Oracle JDK 21.0.5), standalone
> (non-clustered)
> REST Catalog: Apache Polaris 1.7.0 (Docker, PostgreSQL 16 persistence backend)
> Storage: AWS S3 via IAM role-based access
> Reporter: Jay Milagroso
> Priority: Major
>
> h3. Summary
> PutIcebergRecord throws UnsupportedOperationException on every attempt
> to load a target table, making the processor entirely unusable against
> a REST Iceberg catalog performing freshness-aware table loading.
>
> h3. Steps to Reproduce
> 1. Configure RESTIcebergCatalog controller service pointing at a working
> Apache Polaris REST catalog endpoint (catalog, namespace, and table
> independently confirmed reachable via direct REST API calls)
> 2. Configure PutIcebergRecord with valid Iceberg Catalog, Iceberg Writer
> (ParquetIcebergWriter), and Record Reader (JsonTreeReader), targeting
> an existing namespace/table
> 3. Feed the processor a valid flowfile matching the target schema
> 4. Start the processor
>
> h3. Expected Result
> Record is written to the Iceberg table; a new snapshot is committed.
>
> h3. Actual Result
> Processing halts immediately with:
> {code}
> java.lang.UnsupportedOperationException: Returning response headers is not
> supported
> at org.apache.iceberg.rest.RESTClient.get(RESTClient.java:131)
> at
> org.apache.iceberg.rest.RESTSessionCatalog.loadInternal(RESTSessionCatalog.java:438)
> at
> org.apache.iceberg.rest.RESTSessionCatalog.loadTable(RESTSessionCatalog.java:468)
> at
> org.apache.iceberg.catalog.BaseSessionCatalog$AsCatalog.loadTable(BaseSessionCatalog.java:105)
> at
> org.apache.nifi.processors.iceberg.PutIcebergRecord.getTable(PutIcebergRecord.java:223)
> at
> org.apache.nifi.processors.iceberg.PutIcebergRecord.processFlowFiles(PutIcebergRecord.java:165)
> at
> org.apache.nifi.processors.iceberg.PutIcebergRecord.onTrigger(PutIcebergRecord.java:157)
> {code}
>
> h3. Root Cause Analysis
> Iceberg core's RESTSessionCatalog.loadInternal() calls RESTClient.get(...)
> using the header-returning overload introduced for freshness-aware /
> ETag-based table loading. NiFi's custom REST client implementation,
> org.apache.nifi.services.iceberg.catalog.CredentialsRefreshRESTClient,
> does not implement this overload and throws UnsupportedOperationException
> instead of returning response headers.
>
> This is reproducible independent of Access Delegation Strategy - confirmed
> with both "Vended Credentials" and "Disabled" settings, ruling out anything
> credential-vending-specific. The failure occurs on the base loadTable call
> itself, before any data or credential handling.
>
> h3. Confirmed NOT the Cause (ruled out during investigation)
> * Catalog/namespace/table configuration - table independently verified
> reachable and writable via direct curl against Polaris's REST API and
> via pyiceberg's RestCatalog
> * IAM/S3 permissions - confirmed working via the same direct tests
> * Access Delegation Strategy - identical failure under both tested settings
>
> h3. Workaround
> Writing to the same table via pyiceberg's RestCatalog.load_table() and
> .append() succeeds without error, confirming the catalog/table/permissions
> are correctly configured and the bug is isolated to
> CredentialsRefreshRESTClient's incomplete RESTClient interface
> implementation.
>
> h3. Suggested Fix
> Implement the header-returning get() overload in CredentialsRefreshRESTClient
> (delegating to the underlying HTTP client's response headers), consistent
> w
--
This message was sent by Atlassian Jira
(v8.20.10#820010)