rojones-olympus opened a new issue, #14766:
URL: https://github.com/apache/iceberg/issues/14766

   I am porting an old issue from the tabular repo.
   
   The connecter config is:
   ```
   {
   
       "connector.class": "io.tabular.iceberg.connect.IcebergSinkConnector",
       "errors.deadletterqueue.context.headers.enable": "true",
       "errors.deadletterqueue.topic.name": "the-dlq",
       "errors.deadletterqueue.topic.replication.factor": "3",
       "header.converter": 
"org.apache.kafka.connect.storage.SimpleHeaderConverter",
       "iceberg.catalog": "raw_catalog",
       "iceberg.catalog.catalog-impl": 
"org.apache.iceberg.aws.glue.GlueCatalog",
       "iceberg.catalog.client.assume-role.arn": 
"arn:aws:iam::xxxxxxxxxx:role/xxxxxxxxxxxxx-kafka-s3",
       "iceberg.catalog.client.assume-role.external-id": 
"xxxxxxxxxxxxxxxxxxxxxx",
       "iceberg.catalog.client.assume-role.region": "af-south-1",
       "iceberg.catalog.client.assume-role.tags.LakeFormationAuthorizedCaller": 
"my-iceberg-connector",
       "iceberg.catalog.client.region": "af-south-1",
       "iceberg.catalog.glue.account-id": "............",
       "iceberg.catalog.glue.lakeformation-enabled": "true",
       "iceberg.catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
       "iceberg.catalog.s3.endpoint": "https://s3.af-south-1.amazonaws.com/";,
       "iceberg.catalog.s3.path-style-access": "true",
       "iceberg.catalog.s3.region": "af-south-1",
       "iceberg.catalog.s3.sse.key": 
"arn:aws:kms:af-south-1:xxxxxxxxxxxx:key/...-.........",
       "iceberg.catalog.s3.sse.type": "kms",
       "iceberg.catalog.warehouse": 
"s3://xxxxxxxxxxxx-af-south-1-data-raw/warehouse/10x",
       "iceberg.control.topic": 
"icc-10x-client-general-ledger-posting-event-v002",
       "iceberg.tables": 
"raw_redpanda.10x_client_general_ledger_posting_event_v002",
       "iceberg.tables.auto-create-enabled": "true",
       "iceberg.tables.dynamic-enabled": "false",
       "iceberg.tables.evolve-schema-enabled": "true",
       "iceberg.tables.upsert-mode-enabled": "false",
       "key.converter": "org.apache.kafka.connect.storage.StringConverter",
       "key.converter.schemas.enable": "false",
       "name": "iceberg-connector-name",
       "tasks.max": "1",
       "topics": "the-topic-name",
       "value.converter": "io.confluent.connect.avro.AvroConverter",
       "value.converter.schemas.enable": "true"
   }
   ```
   
   and the exception is:
   ```
   org.apache.kafka.connect.errors.ConnectException: Exiting WorkerSinkTask due 
to unrecoverable exception.
       at 
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:632)
       at 
org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:350)
       at 
org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:250)
       at 
org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:219)
       at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:204)
       at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:259)
       at 
org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:236)
       at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
       at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
       at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
       at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
       at java.base/java.lang.Thread.run(Thread.java:840)
   Caused by: 
software.amazon.awssdk.services.glue.model.EntityNotFoundException: Entity Not 
Found (Service: Glue, Status Code: 400, Request ID: 
0a8ff12d-d26c-429a-8032-81664a81f9ac)
       at 
software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleErrorResponse(CombinedResponseHandler.java:125)
       at 
software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handleResponse(CombinedResponseHandler.java:82)
       at 
software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:60)
       at 
software.amazon.awssdk.core.internal.http.CombinedResponseHandler.handle(CombinedResponseHandler.java:41)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:40)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.HandleResponseStage.execute(HandleResponseStage.java:30)
       at 
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:72)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptTimeoutTrackingStage.execute(ApiCallAttemptTimeoutTrackingStage.java:42)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:78)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.TimeoutExceptionHandlingStage.execute(TimeoutExceptionHandlingStage.java:40)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:52)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallAttemptMetricCollectionStage.execute(ApiCallAttemptMetricCollectionStage.java:37)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:81)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.RetryableStage.execute(RetryableStage.java:36)
       at 
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
       at 
software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:56)
       at 
software.amazon.awssdk.core.internal.http.StreamManagingStage.execute(StreamManagingStage.java:36)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.executeWithTimer(ApiCallTimeoutTrackingStage.java:80)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:60)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallTimeoutTrackingStage.execute(ApiCallTimeoutTrackingStage.java:42)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:50)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ApiCallMetricCollectionStage.execute(ApiCallMetricCollectionStage.java:32)
       at 
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
       at 
software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:37)
       at 
software.amazon.awssdk.core.internal.http.pipeline.stages.ExecutionFailureExceptionReportingStage.execute(ExecutionFailureExceptionReportingStage.java:26)
       at 
software.amazon.awssdk.core.internal.http.AmazonSyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonSyncHttpClient.java:196)
       at 
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.invoke(BaseSyncClientHandler.java:103)
       at 
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:171)
       at 
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82)
       at 
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:179)
       at 
software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76)
       at 
software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45)
       at 
software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56)
       at 
software.amazon.awssdk.services.glue.DefaultGlueClient.getTable(DefaultGlueClient.java:7575)
       at 
org.apache.iceberg.aws.lakeformation.LakeFormationAwsClientFactory.isTableRegisteredWithLakeFormation(LakeFormationAwsClientFactory.java:115)
       at 
org.apache.iceberg.aws.lakeformation.LakeFormationAwsClientFactory.s3(LakeFormationAwsClientFactory.java:79)
       at org.apache.iceberg.aws.s3.S3FileIO.client(S3FileIO.java:327)
       at org.apache.iceberg.aws.s3.S3FileIO.initialize(S3FileIO.java:375)
       at org.apache.iceberg.CatalogUtil.loadFileIO(CatalogUtil.java:325)
       at 
org.apache.iceberg.aws.glue.GlueTableOperations.initializeFileIO(GlueTableOperations.java:223)
       at 
org.apache.iceberg.aws.glue.GlueTableOperations.io(GlueTableOperations.java:115)
       at 
org.apache.iceberg.aws.glue.GlueCatalog.newTableOps(GlueCatalog.java:246)
       at 
org.apache.iceberg.BaseMetastoreCatalog.loadTable(BaseMetastoreCatalog.java:46)
       at 
io.tabular.iceberg.connect.data.IcebergWriterFactory.createWriter(IcebergWriterFactory.java:54)
       at 
io.tabular.iceberg.connect.channel.Worker.lambda$writerForTable$8(Worker.java:242)
       at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1220)
       at 
io.tabular.iceberg.connect.channel.Worker.writerForTable(Worker.java:241)
       at 
io.tabular.iceberg.connect.channel.Worker.lambda$routeRecordStatically$5(Worker.java:197)
       at java.base/java.util.Arrays$ArrayList.forEach(Arrays.java:4204)
       at 
io.tabular.iceberg.connect.channel.Worker.routeRecordStatically(Worker.java:195)
       at io.tabular.iceberg.connect.channel.Worker.save(Worker.java:184)
       at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
       at io.tabular.iceberg.connect.channel.Worker.save(Worker.java:171)
       at 
io.tabular.iceberg.connect.IcebergSinkTask.put(IcebergSinkTask.java:150)
       at 
org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:601)
       ... 11 more
   ```
   
   Even though the setting `"iceberg.tables.auto-create-enabled": "true"`
   
   This is because in 
https://github.com/apache/iceberg/blob/ba983470e7caf03290933402cdc6f15d883e1073/kafka-connect/kafka-connect/src/main/java/org/apache/iceberg/connect/data/IcebergWriterFactory.java#L60
 there is an error flow used to prompt the creation of a table in the catalog 
but the GlueCatalog implementation does not wrap the exception into a 
`org.apache.iceberg.exceptions.NoSuchTableException`
   
   I'm happy to contribute back 


-- 
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