[ 
https://issues.apache.org/jira/browse/CAMEL-26191?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-26191.
---------------------------------
    Resolution: Fixed

Fixed by https://github.com/apache/camel/pull/29021 (merged to main as 
5bc24e361bf3b0f6645e3debc916539b911dd7c9).

_Claude Code on behalf of Claus Ibsen (davsclaus)_

> camel-docker - imagebuild with a String body logs an error and succeeds, and 
> the output of containerlog, attach and execstart is lost
> -------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26191
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26191
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-docker
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of docker (CAMEL-24961, PR #28414).
> h4. 1. imagebuild with a String or byte[] body succeeds with the body 
> unchanged
> {{AsyncDockerProducer.executeBuildImageRequest}} (main 2a465aa4814c, line 239 
> to 252) accepts only an InputStream or File body and throws a DockerException 
> "Unable to location source Image" (sic) otherwise. 
> {{AsyncDockerProducer.process}} catches the DockerException at line 122, only 
> logs it, and completes the exchange: the build did not run, and the exchange 
> succeeds with the body unchanged. Checked on 4.24.0-SNAPSHOT with a mocked 
> DockerClient.
> Proposed: set the exception on the exchange instead of logging it (all 
> operations of the async producer), and convert text/byte[] to an InputStream 
> or fix the message.
> h4. 2. imagebuild with a stream body ends with each item's image id, null for 
> a tagged build
> The {{BuildImageResultCallback.onNext}} (line 142) sets the body to 
> {{item.getImageId()}} for each build item, so the last item wins; for a 
> tagged build the last item has no image id and the body ends null. Checked on 
> 4.24.0-SNAPSHOT with a mocked DockerClient.
> Proposed: set the body once to {{awaitImageId()}} of the callback after the 
> build completed.
> h4. 3. The output of containerlog, attach and execstart is lost, and 
> imagepull, imagepush and containerwait give the callback
> {{AsyncDockerProducer.runAsyncWithFrameResponse}} (line 150 to 159) only logs 
> each {{Frame}} at TRACE, and {{setResponse}} (line 185 to 189) sets the 
> callback object as the body. The log lines or the command output are never 
> available to the route. imagepull, imagepush and containerwait also give the 
> callback object as the body, not the result (the exit code of containerwait). 
> Checked on 4.24.0-SNAPSHOT with a mocked DockerClient.
> Proposed: collect the frames (as text or a List) and set them as the body, 
> and set the result of the callback (for example the status code of 
> containerwait) instead of the callback object.
> h4. 4. The default cmdExecFactory fails on macOS
> The default {{cmdExecFactory}} is {{NettyDockerCmdExecFactory}} 
> ({{DockerConfiguration}} line 68 to 69), while 
> {{DockerConstants.DEFAULT_CMD_EXEC_FACTORY}} (line 36) names the Jersey 
> factory. On macOS the Netty factory fails on the unix socket with an 
> UnsatisfiedLinkError (kqueue); with 
> {{cmdExecFactory=com.github.dockerjava.jaxrs.JerseyDockerCmdExecFactory}} the 
> same calls work. Checked on 4.24.0-SNAPSHOT with a local docker daemon on 
> macOS (read-only calls).
> Proposed: make the Jersey factory the default (as the constant says), or add 
> the Netty kqueue native dependency for macOS.
> h4. 5. The events consumer may pass the since time in milliseconds
> {{DockerEventsConsumer.processInitialEvent}} (line 81 to 90) computes the 
> start of the event stream from {{System.currentTimeMillis()}}, and the value 
> is passed to {{withSince}} (line 135); the Docker API expects seconds. Not 
> verified against a daemon. Read in the code, not run.
> Proposed: check what docker-java expects for {{withSince}} and convert to 
> seconds if needed.
> _Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to