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

Claus Ibsen reassigned CAMEL-26270:
-----------------------------------

    Assignee: Claus Ibsen

> camel-openstack - a producer only works on the thread that created it, so a 
> route from a file consumer to swift fails with Unable to retrieve current 
> session
> -------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-26270
>                 URL: https://issues.apache.org/jira/browse/CAMEL-26270
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-openstack
>            Reporter: Claus Ibsen
>            Assignee: Claus Ibsen
>            Priority: Major
>             Fix For: 4.24.0
>
>
> Found while adding the catalog body types of openstack-cinder, -glance, 
> -keystone, -neutron, -nova and -swift (CAMEL-24961, PR #28406).
> h4. 1. A producer only works on the thread that created it
> Every openstack endpoint builds the {{OSClient}} once in {{createProducer()}} 
> (e.g. {{NovaEndpoint}}, main 2a465aa4814c, lines 75-85, through 
> {{AbstractOpenstackEndpoint.createClient}}) and keeps it in 
> {{AbstractOpenstackProducer}} (line 41). The openstack4j session is per 
> thread ({{OSClientSession}}), so a call from any other thread fails with a 
> NullPointerException "OSClientSession.getCurrent() is null" or "Unable to 
> retrieve current session". A route from a file consumer to swift fails this 
> way, including the example in the openstack-swift doc. All six components 
> share the code. Checked on 4.24.0-SNAPSHOT with the module's in-JVM WireMock.
> Proposed: keep the token and call {{OSFactory.clientFromToken(...)}} on each 
> call (the openstack4j way to use a client from several threads).
> h4. 2. swift and glance: the payload has no type conversion
> {{AbstractOpenstackProducer.createPayload}} (lines 45-64) accepts a 
> {{Payload}}, {{URL}}, {{File}} or {{InputStream}} with {{instanceof}} checks, 
> so a String, byte[], {{Path}} or {{GenericFile}} body fails "You have to set 
> payload. It can be InputStream, File or URL class" (swift object create, 
> glance create/upload). Checked on 4.24.0-SNAPSHOT with WireMock.
> Proposed: convert the body with the type converter (to InputStream) when it 
> is none of these types.
> _Claude Code on behalf of davsclaus_



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

Reply via email to