ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lorenzo Bolzani <l.bolz...@gmail.com>
Subject Duplicate channel id: concurrency problem?
Date Fri, 05 Aug 2011 15:30:15 GMT
Hi,
I keep finding this error with ode 1.3.5 running inside servicemix 3.3.2,
with mysql 5.1.54.

java.lang.IllegalArgumentException: No such channel; id=20
at
org.apache.ode.jacob.vpu.ExecutionQueueImpl.findChannelFrame(ExecutionQueueImpl.java:205)
at
org.apache.ode.jacob.vpu.ExecutionQueueImpl.consumeExport(ExecutionQueueImpl.java:232)
at
org.apache.ode.jacob.vpu.JacobVPU$JacobThreadImpl.importChannel(JacobVPU.java:369)
at org.apache.ode.jacob.JacobObject.importChannel(JacobObject.java:47)
at
org.apache.ode.bpel.engine.BpelRuntimeContextImpl$7.run(BpelRuntimeContextImpl.java:1094)
at sun.reflect.GeneratedMethodAccessor160.invoke(Unknown Source)

Inside the ODE_JOBS table I can find a row referencing the channel 20.

After some debugging I could reproduce, by chance, a situation with to
different jobs with the same channel id 20. Is this correct?
Then the first job completed correctly and the other remained stuck forever.

I traced the problema back to ExecutionQueueImpl, line: 124 where
_objIdCounter is used to assign the channel number.
>From the eclipse debugger stack trace, below, I see that no monitors are
held inside this method and, on first sight, looks like the _objIdCounter
variable is "not protected".
Is this intended?

If so, is the problem due to running multiple instances of SimpleScheduler
with a servicemix ThreadPoolExecutor?

Thread [pool-5-thread-1] (Suspended (breakpoint at line 124 in
ExecutionQueueImpl))
    ExecutionQueueImpl.add(CommChannel) line: 124
    JacobVPU$JacobThreadImpl.newChannel(Class, String, String) line: 350
    PROCESS(JacobObject).newChannel(Class<T>, String) line: 74
    PROCESS(JacobObject).newChannel(Class<T>) line: 63
    PROCESS.run() line: 51
    NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not
available [native method]
    NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
    Method.invoke(Object, Object...) line: 592
    JacobVPU$JacobThreadImpl.run() line: 451
    JacobVPU.execute() line: 139
    BpelRuntimeContextImpl.execute() line: 968
    PartnerLinkMyRoleImpl.invokeNewInstance(MyRoleMessageExchangeImpl,
PartnerLinkMyRoleImpl$RoutingInfo) line: 208
    BpelProcess$1.invoke(PartnerLinkMyRoleImpl,
PartnerLinkMyRoleImpl$RoutingInfo, boolean) line: 283
    BpelProcess.invokeProcess(MyRoleMessageExchangeImpl,
BpelProcess$InvokeHandler) line: 238
    BpelProcess.invokeProcess(MyRoleMessageExchangeImpl) line: 279
    BpelProcess.handleJobDetails(Scheduler$JobDetails) line: 426
    BpelEngineImpl.onScheduledJob(Scheduler$JobInfo) line: 460
    BpelServerImpl.onScheduledJob(Scheduler$JobInfo) line: 450
    SimpleScheduler$RunJob$1.call() line: 518
    SimpleScheduler$RunJob$1.call() line: 512
    SimpleScheduler.execTransaction(Callable<T>, int) line: 284
    SimpleScheduler.execTransaction(Callable<T>) line: 239
    SimpleScheduler$RunJob.call() line: 512 [local variables unavailable]

    SimpleScheduler$RunJob.call() line: 496 [local variables unavailable]

    FutureTask$Sync.innerRun() line: 269
    FutureTask<V>.run() line: 123
    ThreadPoolExecutor$Worker.runTask(Runnable) line: 651
    ThreadPoolExecutor$Worker.run() line: 676 [local variables
unavailable]
    Thread.run() line: 595

Invoking the bpel process with multiple client threads fill up the ode_jobs
table with "broken" jobs and servicemix stops responding.


Thanks, for any suggestion.

Bye

Lorenzo

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message