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

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

> camel-jbang: infra ps shows only one instance per service alias and picks its 
> PID non-deterministically
> -------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24678
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24678
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-jbang
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 4.23.0
>
>
> {{camel infra ps}} renders a PID column, but it can only ever show one 
> instance per service alias. When the same service is started twice, the 
> second instance is invisible and the PID shown for the first is picked 
> non-deterministically.
> h3. Cause
> {{InfraBaseCommand.listServices()}} builds its rows from a {{Map<String, 
> InfraServiceAlias>}} keyed by *alias*, so there is exactly one {{Row}} per 
> alias. The PID for that row comes from {{findPid(alias)}}, which returns the 
> first {{~/.camel/infra-<alias>-<pid>.json}} file that {{File.list()}} happens 
> to return:
> {code:java}
> private String findPid(String key) {
>     for (String s : Objects.requireNonNull(p.toFile().list())) {
>         if (s.startsWith("infra-" + key + "-") && s.endsWith(".json")) {
>             return pidFromPidFile(s);
>         }
>     }
>     return null;
> }
> {code}
> {{File.list()}} order is filesystem-dependent, so with two 
> {{infra-ftp-*.json}} files present it is not defined which PID is reported. 
> {{getServiceData(alias, pid)}} then renders the service data of that same 
> arbitrary instance, so the connection details shown can belong to a different 
> process than the user expects.
> {{infra stop <alias>}} is not affected -- it goes through {{findPids(name)}} 
> and stops every matching instance.
> h3. Impact
> * A second instance of an already-running service cannot be seen in {{infra 
> ps}} at all.
> * The PID and SERVICE_DATA columns may describe a stale instance, which is 
> misleading when connecting to the service.
> * Anything that keys off the reported PID is unreliable. This surfaced 
> concretely in {{InfrastructureITCase}}: a leaked ftp instance made {{infra 
> ps}} keep reporting the old PID, so assertions on the newly started PID could 
> never match (fixed on the test side in commit f2cc9f8767b3, but the 
> underlying {{infra ps}} behaviour remains).
> h3. Suggested fix
> Emit one row per running instance rather than one row per alias, so duplicate 
> aliases each get their own PID and SERVICE_DATA. {{infra list}} (which has no 
> PID column and describes the catalog rather than running processes) should 
> keep its current one-row-per-alias shape.
> ----
> _Reported by Claude Code on behalf of davsclaus_



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to