Otavio,

So sorry..

Apparently postman automatically assume context-type 'text/plain' whereas
curl assumes application/x-www-form-urlencoded
https://stackoverflow.com/questions/43054195/how-to-post-raw-body-data-with-curl

This works locally for me if I specify the content-type..

curl -X POST -d "--id e70c0565 --dhInitialize"
localhost:8080/camel/dialcommand/ -H "Content-Type: text/plain"


On Wed, Aug 30, 2023 at 12:22 PM Otavio Rodolfo Piske <angusyo...@gmail.com>
wrote:

> I tried running the example, but when I post data to service like this:
>
> curl -X POST -d "--id e70c0565 --dhInitialize"
>  localhost:8080/camel/dialcommand/ ; curl -X POST -d "--id e70c0565
> --dhKill" localhost:8080/camel/dialcommand
>
> If fails with:
>
> {"timestamp":"2023-08-30T16:12:25.880+00:00","status":500,"error":"Internal
> Server
>
> Error","path":"/camel/dialcommand/"}{"timestamp":"2023-08-30T16:12:25.909+00:00","status":500,"error":"Internal
> Server Error","path":"/camel/dialcommand"}
>
> Full logs:
> https://pastebin.com/gApaHLvn
>
> Kind regards
>
> On Wed, Aug 30, 2023 at 5:48 PM Otavio Rodolfo Piske <angusyo...@gmail.com
> >
> wrote:
>
> > Thanks Tim. That way is fine for me.
> >
> > Kind regards
> >
> > On Tue, Aug 29, 2023 at 10:14 PM Tim Janusz <tjan...@guidewire.com>
> wrote:
> >
> >> Otavio,
> >>
> >> I was able to create a small spring boot web application that
> demonstrates
> >> the issue..
> >>
> >> Hopefully you can check it out and see what could be possibly wrong..
> This
> >> app is super slimmed down version of what our real application does but
> it
> >> demonstrates the same issue.
> >>
> >> I created it in my public github account (see below). Not sure what's
> the
> >> proper way to do this honestly.
> >>
> >>
> https://github.com/tjanusz-personal/camelseda/tree/main
> >>
> >> Hopefully this helps! Thanks in advance for any input you could provide.
> >> This issue has us stumped!
> >>
> >>
> >> On Mon, Aug 28, 2023 at 5:19 PM Tim Janusz <tjan...@guidewire.com>
> wrote:
> >>
> >> > Thanks so much..
> >> >
> >> > Give me a little time and I'll create a smaller app to demonstrate
> what
> >> > we're seeing..
> >> >
> >> > I'll reply once I have something available.
> >> >
> >> >
> >> > On Mon, Aug 28, 2023 at 4:30 PM Otavio Rodolfo Piske <
> >> angusyo...@gmail.com>
> >> > wrote:
> >> >
> >> >> Hi, I'd like to investigate ... but for that I need a full
> reproducer.
> >> Can
> >> >> you provide* one, please?
> >> >>
> >> >> * Either as a test in the Camel Core code base or one that I can
> >> quickly
> >> >> clone and run.
> >> >>
> >> >> Thanks
> >> >>
> >> >> On Thu, Aug 24, 2023 at 6:54 PM Tim Janusz <tjan...@guidewire.com>
> >> wrote:
> >> >>
> >> >> > Hi all,
> >> >> >
> >> >> > We're currently trying to upgrade our Camel from 3.20.2, spring
> boot
> >> >> 2.7.12
> >> >> > running on Java 11 to spring.boot.version=3.1.2 and
> >> camel.version=4.0.0
> >> >> > running on Java 17.
> >> >> >
> >> >> > We are seeing weird behaviour in one of our applications where our
> >> SEDA
> >> >> > component just 'hangs' after a specific set of interactions
> involving
> >> >> > dynamically adding/removing routes via the dynamicRouter feature.
> >> >> >
> >> >> > Some notes:
> >> >> >  - We use SEDA component (where things seem to hang)
> >> >> >  - flow is basically:
> >> >> >   initialize camel,
> >> >> >   process msg1 to create dynamic route and process message on it,
> >> >> >   process msg2 which deletes route,
> >> >> >   process msg3 which re-creates route and processes it,
> >> >> >   process msg4 which deletes route,
> >> >> >   process msg5 which re-creates route and HANGS at this point
> >> >> >  - Basically the 2nd time we delete the route and re-create again
> >> (which
> >> >> > has the same name as before) is when we see the 'hang' for
> processing
> >> >> > (super weird)
> >> >> >  - This only happens in version 4.x same code works fine in 3.x
> >> >> >
> >> >> > We're really wondering what could've changed between version 3.x
> and
> >> 4.x
> >> >> > that causes this now to hang?
> >> >> >
> >> >> > I've included some sudo code below with log snippets to help
> clarify
> >> >> >
> >> >> > Our main RouteBuilder creates these two
> >> >> >     from("servlet:dialcommand")
> >> >> >       .routeId("dialCommandServletRoute")
> >> >> >       .convertBodyTo(String::class.java)
> >> >> >       .to("seda:dialcommandqueue?timeout=$commandTimeout")
> >> >> >       .removeHeader("args")
> >> >> >
> >> >> >
> >> >> >
> >> >> >
> >> >>
> >>
> from("seda:dialcommandqueue?concurrentConsumers=$concurrentConsumerCount&timeout=$commandTimeout")
> >> >> >       .setExchangePattern(ExchangePattern.InOut)
> >> >> >       .routeId("dialcommandprocess")
> >> >> >       .dynamicRouter { it: Exchange -> dialDynamicRouting(it) }
> >> >> >
> >> >> > Our dynamic router logic is like this:
> >> >> > fun dialDynamicRouting(exchange: Exchange): String? {
> >> >> >
> >> >> >  // when we need to kill a route
> >> >> >    is KillRoute -> {
> >> >> >      context.routeController.stopRoute(routeId)
> >> >> >      context.removeRoute(routeId)
> >> >> >
> >> >> > exchange.`in`.body = success("OK", exchange.`in`.getHeader("id",
> >> >> > String::class.java))
> >> >> >      return null
> >> >> >
> >> >> >  // when we add a new route dynamically
> >> >> >     val dialCommandRoute = createDialCommandRoute(routeId,
> contextId,
> >> >> > contextKey, concurrency)
> >> >> >     // add to camel context
> >> >> >     context.addRoutes(dialCommandRoute)
> >> >> >     context.getRoute(routeId).properties["contextId"] = contextId
> >> >> > return dialCommandRoute.from
> >> >> >
> >> >> > The "createDialCommandRoute" logic dynamic router created uses this
> >> >> type of
> >> >> > code
> >> >> >     from(from)
> >> >> >       .routeId(routeId)
> >> >> >       .process {
> >> >> >         val message = it.`in`
> >> >> >         val body = message.body
> >> >> >         if (body is DialCommand<*>) {
> >> >> >           body.id = message.getHeader("id", String::class.java) ?:
> >> >> > body.standardOptions.id ?: body.id
> >> >> >           body.configureLogContext()
> >> >> >         }
> >> >> >       }.id("[$routeId] prepare command object")
> >> >> >       .log(LoggingLevel.INFO, "[\${headers.id}]
> \${body.procName}")
> >> >> >       .process { it: Exchange -> it.`in`.body = run(it) }
> >> >> >   }
> >> >> >
> >> >> > With DEBUG level logging enabled we can see where it hangs is
> >> basically
> >> >> > right between when it would normally
> >> >> > process items off that newly created route.
> >> >> >
> >> >> > Log Sample 1: Example logs of a valid run where it creates the new
> >> route
> >> >> > and start processing it
> >> >> > 2023-08-22  INFO 54168 --- [ialcommandqueue]
> >> >> > c.g.dm.automation.etl.route.Operator     : Route
> >> >> dialCommandRoute-6fddd8cf
> >> >> > does not exist. This command (RecoverUnfinishedOperations) will
> >> create
> >> >> the
> >> >> > route.
> >> >> > 2023-08-22  INFO 54168 --- [ialcommandqueue]
> >> >> > c.g.dm.automation.etl.route.Operator     : Creating route:
> >> >> > dialCommandRoute-6fddd8cf
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.impl.engine.AbstractCamelContext   :
> >> >> > seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0
> >> converted to
> >> >> > endpoint:
> >> seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0 by
> >> >> > component: org.apache.camel.component.seda.SedaComponent@4a23350
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Warming up route id:
> >> >> > dialCommandRoute-6fddd8cf having autoStartup=true
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Route:
> >> >> dialCommandRoute-6fddd8cf
> >> >> > >>>
> >> Route[seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0 ->
> >> >> > null]
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Starting consumer
> (order:
> >> >> 1004)
> >> >> > on route: dialCommandRoute-6fddd8cf
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.BaseExecutorServiceManager     : Created new ThreadPool
> for
> >> >> > source:
> >> >> >
> Consumer[seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0]
> >> >> with
> >> >> > name: seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0.
> ->
> >> >> >
> >> org.apache.camel.util.concurrent.RejectableThreadPoolExecutor@10881933
> >> >> > [Running,
> >> >> > pool size = 0, active threads = 0, queued tasks = 0, completed
> tasks
> >> =
> >> >> > 0][seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0]
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Route:
> >> >> dialCommandRoute-6fddd8cf
> >> >> > started and consuming from: seda://dialcommand:6fddd8cf
> >> >> >
> >> >> > -- NOTE: this is where we see it now runs our route's process
> method
> >> on
> >> >> > different thread
> >> >> > 2023-08-22  INFO 54168 --- [  e70c0565-main]
> >> dialCommandRoute-6fddd8cf
> >> >> >            : [e70c0565] dhRecoverUnfinishedOperations
> >> >> > 2023-08-22  INFO 54168 --- [  e70c0565-main]
> >> >> > c.g.d.a.etl.cli.command.DialCommand      : Beginning
> >> >> > dhRecoverUnfinishedOperations
> >> >> > 2023-08-22  INFO 54168 --- [  e70c0565-main]
> >> >> > c.g.d.a.etl.cli.command.DialCommand      : Completed
> >> >> > dhRecoverUnfinishedOperations
> >> >> > 2023-08-22  INFO 54168 --- [ialcommandqueue] dialcommandprocess
> >> >> >           : [e70c0565] {"id":"e70c0565","status":"OK"}
> >> >> >
> >> >> > Log Sample 2: Example logs snippet of where it creates the new
> route
> >> but
> >> >> > just hangs on us after creation is complete
> >> >> > 2023-08-22  INFO 54168 --- [ialcommandqueue]
> >> >> > c.g.dm.automation.etl.route.Operator     : Route
> >> >> dialCommandRoute-6fddd8cf
> >> >> > does not exist. This command (RecoverUnfinishedOperations) will
> >> create
> >> >> the
> >> >> > route.
> >> >> > 2023-08-22  INFO 54168 --- [ialcommandqueue]
> >> >> > c.g.dm.automation.etl.route.Operator     : Creating route:
> >> >> > dialCommandRoute-6fddd8cf
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.impl.engine.AbstractCamelContext   :
> >> >> > seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0
> >> converted to
> >> >> > endpoint:
> >> seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0 by
> >> >> > component: org.apache.camel.component.seda.SedaComponent@4a23350
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Warming up route id:
> >> >> > dialCommandRoute-6fddd8cf having autoStartup=true
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Route:
> >> >> dialCommandRoute-6fddd8cf
> >> >> > >>>
> >> Route[seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0 ->
> >> >> > null]
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Starting consumer
> (order:
> >> >> 1005)
> >> >> > on route: dialCommandRoute-6fddd8cf
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.BaseExecutorServiceManager     : Created new ThreadPool
> for
> >> >> > source:
> >> >> >
> Consumer[seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0]
> >> >> with
> >> >> > name: seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0.
> ->
> >> >> >
> >> org.apache.camel.util.concurrent.RejectableThreadPoolExecutor@5c41c3f8
> >> >> > [Running,
> >> >> > pool size = 0, active threads = 0, queued tasks = 0, completed
> tasks
> >> =
> >> >> > 0][seda://dialcommand:6fddd8cf?concurrentConsumers=8&timeout=0]
> >> >> > 2023-08-22 DEBUG 54168 --- [ialcommandqueue]
> >> >> > o.a.c.i.e.InternalRouteStartupManager    : Route:
> >> >> dialCommandRoute-6fddd8cf
> >> >> > started and consuming from: seda://dialcommand:6fddd8cf
> >> >> > -- NOTE here is where we'd normally see the route thread be running
> >> like
> >> >> > above but we don't and it just hangs at this point!
> >> >> >  [  e70c0565-main] dialCommandRoute-6fddd8cf                :
> >> [e70c0565]
> >> >> > dhRecoverUnfinishedOperations (THIS LOG NEVER HAPPENS!!)
> >> >> >
> >> >> > Additionally, we can also tell that our routes/endpoints are being
> >> >> > created/destroyed correctly if we log out context route/endpoint
> info
> >> >> > seda://dialcommandqueue?timeout=0,
> >> >> > seda://dialcommandqueue?concurrentConsumers=20&timeout=0,
> >> >> > seda://dialcommand:9591ba9e?concurrentConsumers=8&timeout=0 (NEW
> >> >> ENDPOINT
> >> >> > EXAMPLE)
> >> >> > servlet://dialcommand, direct://defaultCommand
> >> >> >
> >> >> > Lastly, when it hangs we can see that the SEDA component thinks its
> >> up
> >> >> and
> >> >> > running
> >> >> > INFO 59169 --- [ialcommandqueue]
> c.g.dm.automation.etl.route.Operator
> >> >>    :
> >> >> > ### SEDA info: currQueueSize: 0, endPointSize: 1000, queueSize: 0,
> >> >> > queue.remainCapacity: 1000, stoppingOrStopped: false, suspended:
> >> false,
> >> >> > isRunAllowed: true, isStarted: true, status: Started
> >> >> >
> >> >> > We're totally stumped at this point as to what could be causing
> this
> >> >> issue?
> >> >> >
> >> >>
> >> >>
> >> >> --
> >> >> Otavio R. Piske
> >> >>
> >> >>
> http://orpiske.net
> >> >>
> >> >
> >>
> >
> >
> > --
> > Otavio R. Piske
> >
> http://orpiske.net
> >
>
>
> --
> Otavio R. Piske
> http://orpiske.net
>

Reply via email to