Ycallaer opened a new issue, #14811:
URL: https://github.com/apache/iceberg/issues/14811

   ### Apache Iceberg version
   
   1.10.0 (latest release)
   
   ### Query engine
   
   Kafka Connect
   
   ### Please describe the bug 🐞
   
   Hi,
   We are running Kafka Connect with Apache Iceberg 1.10.0 ( but this also 
fails in 1.9.2) and after a while we see the connect instance throwing the 
following error
   `{"debug_level":"WARN","debug_timestamp":"2025-12-10 
11:29:54,670","debug_thread":"task-thread-iceberg-sink-connector-epe-log-topics-v1-2","debug_file":"ErrorHandlers.java",
 "debug_line":"222","debug_message":"Unable to parse error 
response","debug_stacktrace":"java.io.UncheckedIOException: 
com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'Invalid': 
was expecting (JSON String, Number, Array, Object or token 'null', 'true' or 
'false')
    at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` 
disabled); line: 1, column: 8]
        at org.apache.iceberg.util.JsonUtil.parse(JsonUtil.java:106)
        at 
org.apache.iceberg.rest.responses.ErrorResponseParser.fromJson(ErrorResponseParser.java:71)
        at 
org.apache.iceberg.rest.ErrorHandlers$DefaultErrorHandler.parseResponse(ErrorHandlers.java:220)
        at org.apache.iceberg.rest.HTTPClient.throwFailure(HTTPClient.java:210)
        at org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:336)
        at org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:297)
        at org.apache.iceberg.rest.BaseHTTPClient.get(BaseHTTPClient.java:77)
        at 
org.apache.iceberg.rest.RESTSessionCatalog.loadInternal(RESTSessionCatalog.java:375)
        at 
org.apache.iceberg.rest.RESTSessionCatalog.loadTable(RESTSessionCatalog.java:399)
        at 
org.apache.iceberg.catalog.BaseSessionCatalog$AsCatalog.loadTable(BaseSessionCatalog.java:99)
        at org.apache.iceberg.rest.RESTCatalog.loadTable(RESTCatalog.java:106)
        at 
org.apache.iceberg.connect.data.IcebergWriterFactory.createWriter(IcebergWriterFactory.java:59)
        at 
org.apache.iceberg.connect.data.SinkWriter.lambda$writerForTable$3(SinkWriter.java:139)
        at java.base/java.util.HashMap.computeIfAbsent(Unknown Source)
        at 
org.apache.iceberg.connect.data.SinkWriter.writerForTable(SinkWriter.java:138)
        at 
org.apache.iceberg.connect.data.SinkWriter.routeRecordDynamically(SinkWriter.java:124)
        at org.apache.iceberg.connect.data.SinkWriter.save(SinkWriter.java:83)
        at java.base/java.util.ArrayList.forEach(Unknown Source)
        at org.apache.iceberg.connect.data.SinkWriter.save(SinkWriter.java:68)
        at org.apache.iceberg.connect.channel.Worker.save(Worker.java:124)
        at 
org.apache.iceberg.connect.channel.CommitterImpl.save(CommitterImpl.java:163)
        at 
org.apache.iceberg.connect.IcebergSinkTask.put(IcebergSinkTask.java:83)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:624)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:349)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:248)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:217)
        at 
org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:249)
        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:304)
        at 
org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$7(Plugins.java:341)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown 
Source)
        at java.base/java.lang.Thread.run(Unknown Source)
   Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 
'Invalid': was expecting (JSON String, Number, Array, Object or token 'null', 
'true' or 'false')
    at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` 
disabled); line: 1, column: 8]
        at 
com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2596)
        at 
com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2622)
        at 
com.fasterxml.jackson.core.JsonParser._constructReadException(JsonParser.java:2630)
        at 
com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:830)
        at 
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:3017)
        at 
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._reportInvalidToken(ReaderBasedJsonParser.java:2995)
        at 
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._matchToken(ReaderBasedJsonParser.java:2760)
        at 
com.fasterxml.jackson.core.json.ReaderBasedJsonParser._handleOddValue(ReaderBasedJsonParser.java:2035)
        at 
com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:780)
        at 
com.fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:5058)
        at 
com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4961)
        at 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3887)
        at 
com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3855)
        at org.apache.iceberg.util.JsonUtil.parse(JsonUtil.java:104)
        ... 33 more
   "}
   {"debug_level":"ERROR","debug_timestamp":"2025-12-10 
11:29:54,670","debug_thread":"task-thread-iceberg-sink-connector-epe-log-topics-v1-2","debug_file":"WorkerSinkTask.java",
 
"debug_line":"656","debug_message":"WorkerSinkTask{id=iceberg-sink-connector-epe-log-topics-v1-2}
 Task threw an uncaught and unrecoverable exception. Task is being killed and 
will not recover until manually restarted. Error: Forbidden: Invalid 
Token","debug_stacktrace":"org.apache.iceberg.exceptions.ForbiddenException: 
Forbidden: Invalid Token
        at 
org.apache.iceberg.rest.ErrorHandlers$DefaultErrorHandler.accept(ErrorHandlers.java:238)
        at 
org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:124)
        at 
org.apache.iceberg.rest.ErrorHandlers$TableErrorHandler.accept(ErrorHandlers.java:108)
        at org.apache.iceberg.rest.HTTPClient.throwFailure(HTTPClient.java:240)
        at org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:336)
        at org.apache.iceberg.rest.HTTPClient.execute(HTTPClient.java:297)
        at org.apache.iceberg.rest.BaseHTTPClient.get(BaseHTTPClient.java:77)
        at 
org.apache.iceberg.rest.RESTSessionCatalog.loadInternal(RESTSessionCatalog.java:375)
        at 
org.apache.iceberg.rest.RESTSessionCatalog.loadTable(RESTSessionCatalog.java:399)
        at 
org.apache.iceberg.catalog.BaseSessionCatalog$AsCatalog.loadTable(BaseSessionCatalog.java:99)
        at org.apache.iceberg.rest.RESTCatalog.loadTable(RESTCatalog.java:106)
        at 
org.apache.iceberg.connect.data.IcebergWriterFactory.createWriter(IcebergWriterFactory.java:59)
        at 
org.apache.iceberg.connect.data.SinkWriter.lambda$writerForTable$3(SinkWriter.java:139)
        at java.base/java.util.HashMap.computeIfAbsent(Unknown Source)
        at 
org.apache.iceberg.connect.data.SinkWriter.writerForTable(SinkWriter.java:138)
        at 
org.apache.iceberg.connect.data.SinkWriter.routeRecordDynamically(SinkWriter.java:124)
        at org.apache.iceberg.connect.data.SinkWriter.save(SinkWriter.java:83)
        at java.base/java.util.ArrayList.forEach(Unknown Source)
        at org.apache.iceberg.connect.data.SinkWriter.save(SinkWriter.java:68)
        at org.apache.iceberg.connect.channel.Worker.save(Worker.java:124)
        at 
org.apache.iceberg.connect.channel.CommitterImpl.save(CommitterImpl.java:163)
        at 
org.apache.iceberg.connect.IcebergSinkTask.put(IcebergSinkTask.java:83)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:624)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:349)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:248)
        at 
org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:217)
        at 
org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:249)
        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:304)
        at 
org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$7(Plugins.java:341)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
        at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown 
Source)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown 
Source)
        at java.base/java.lang.Thread.run(Unknown Source)
   "}`
   
   This is a partial snippet of our Connect configuration 
   `{
     "connector.class": "org.apache.iceberg.connect.IcebergSinkConnector",
     "iceberg.catalog.scope": "all-apis",
     "errors.log.include.messages": "true",
     "iceberg.tables.evolve-schema-enabled": "true",
     "tasks.max": "6",
     "iceberg.catalog.security": "OAUTH2",
     "iceberg.tables.dynamic-enabled": "true",
     "iceberg.tables.auto-create-enabled": "true",
     "confluent.topic.replication.factor": "1",
     "iceberg.catalog.oauth2-server-uri": 
"https://***.***.azuredatabricks.net/oidc/v1/token";,
     "errors.log.enable": "true",
     "key.converter": "org.apache.kafka.connect.storage.StringConverter",
     "iceberg.kafka.ssl.endpoint.identification.algorithm": "",
     "iceberg.catalog.credential": 
"${file:/tmp/iceberg-connect-catalog-credential/credential:iceberg_secret}",
     "value.converter.enhanced.protobuf.schema.support": "true",
     "iceberg.catalog.uri": 
"https://***.***.azuredatabricks.net/api/2.1/unity-catalog/iceberg-rest";,
     "iceberg.catalog.vended-credentials-enabled": "true",
     "value.converter.schemas.enable": "false",
     "name": "iceberg-sink-connector",
     "errors.tolerance": "all",
     "iceberg.catalog.type": "rest"
   }`
   
   For now our workaround is to periodically restart the connector, which then 
retrieves a valid OAUTH token, which let's the connector continue with 
processing.
   
   Is there a way that the proper authentication flow could be handled in the 
backend.
   
   ### Willingness to contribute
   
   - [ ] I can contribute a fix for this bug independently
   - [ ] I would be willing to contribute a fix for this bug with guidance from 
the Iceberg community
   - [x] I cannot contribute a fix for this bug at this time


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to