Hello all,

We have a few very busy routes that are throwing FileNotFoundExceptions when 
processing files (full stacktrace below). Searching for those filenames in the 
log it is very clear that those files have already been processed in the past 
minute and thus are not there.
After removing the 1 minute schedule and adding a 1 minute delay the problems 
have disappeared.

After testing it looks like a cron scheduler can only start 1 thread/worker per 
route and a next scheduler ping will wait for the previous one to be finished. 
Even if we manually trigger the route by its triggerId. This was tested by 
holding a thread in a debugger for a few minutes, no new threads passed the 
breakpoint until we let the first thread go. Still we are seeing what we are 
seeing but I cannot create the volume of messages and routes in a test/develop 
environment.

During low volume processing we can see multiple workers busy, but always in a 
different minute then the other. So 1 thread/worker is busy per minute but the 
worker name can differ.
During high volume processing at some point multiple workers will be 
processing, the same route, in the same second. Also there have been moments we 
can find 5 camellock files at the same time, in the same directory. There is 
only 1 route per directory so there should not be more than 1 camellock, I 
think.

Example from log (all the same routeId):
2016-03-14 23:35:38,783 [DefaultQuartzScheduler-esbContext-1_Worker-1]
2016-03-14 23:35:40,385 [DefaultQuartzScheduler-esbContext-1_Worker-7]
2016-03-14 23:35:40,620 [DefaultQuartzScheduler-esbContext-1_Worker-6]
2016-03-14 23:35:40,843 [DefaultQuartzScheduler-esbContext-1_Worker-8]
2016-03-14 23:35:41,262 [DefaultQuartzScheduler-esbContext-1_Worker-1]
2016-03-14 23:35:41,529 [DefaultQuartzScheduler-esbContext-1_Worker-2]
2016-03-14 23:35:43,200 [DefaultQuartzScheduler-esbContext-1_Worker-7]
2016-03-14 23:35:43,205 [DefaultQuartzScheduler-esbContext-1_Worker-6]
2016-03-14 23:35:44,470 [DefaultQuartzScheduler-esbContext-1_Worker-8]
2016-03-14 23:35:44,665 [DefaultQuartzScheduler-esbContext-1_Worker-1]
2016-03-14 23:35:45,503 [DefaultQuartzScheduler-esbContext-1_Worker-2]
2016-03-14 23:35:46,393 [DefaultQuartzScheduler-esbContext-1_Worker-7]
2016-03-14 23:35:47,051 [DefaultQuartzScheduler-esbContext-1_Worker-6]

The routes are very simple, from a mounted folder to a local directory with 
nothing in between except for some onException handling for retrying and 
sending to an error route (direct). Lowering maxMessagesPerPoll (250) did seem 
to decrease the problem a bit but I am not convinced yet. This should be tested 
with a number lower than 100.

from(file:///mnt/sl-nl/bij/outbox/?sortBy=ignoreCase:file:name&filter=#fileFilter&recursive=false&move=processed&moveFailed=failed&scheduler.cron=0+/1+0-23+?+*+1,2,3,4,5,6,7&scheduler=quartz2&scheduler.triggerId=nl_bij-export-to-archive-276)
to(file:///data/work/sl/work-archive/work/276/)

Is there anything we can change to make sure we have only one worker processing 
at a time, per route? We seem to have 10 workers total that are divided amongst 
the routes with schedulers. We have 250 routes total with a schedule. Most 
schedules are every minute. Also there are 250 routes with delay=5s, but they 
do not use those workers.

org.quartz.threadPool.threadCount is now at 1. We might need to increase this 
number as we have 250 routes with a 1 minute schedule. But the issue we have is 
quite the opposite of what to expect if quartz cannot trigger all jobs it 
should trigger.

-----------------------------------------
version.camel   2.16.2

file:quartz.properties
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.threadsInheritContextClassLoaderOfInitializer = true
org.quartz.scheduler.skipUpdateCheck = true
org.quartz.scheduler.jmx.export = true
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 1
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

server.info
Tomcat Version                               Apache Tomcat/8.0.26
JVM Version                                     1.8.0_60-b27
JVM Vendor                                     Oracle Corporation
OS Name                                            Linux
OS Version                                        3.8.13-98.2.2.el6uek.x86_64
OS Architecture                               amd64

2016-03-14 22:29:02,485 [DefaultQuartzScheduler-esbContext-1_Worker-10] errors 
- WARN - Error stacktrace: 
org.apache.camel.component.file.GenericFileOperationFailedException: Cannot 
store file: /data/work/sl/work-archive/work/276/DD_SOS2016031422110816.xml
        at 
org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:292)
        at 
org.apache.camel.component.file.GenericFileProducer.writeFile(GenericFileProducer.java:277)
        at 
org.apache.camel.component.file.GenericFileProducer.processExchange(GenericFileProducer.java:165)
        at 
org.apache.camel.component.file.GenericFileProducer.process(GenericFileProducer.java:79)
        at 
org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61)
        at 
org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141)
        at 
org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77)
        at 
org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
        at 
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:121)
        at org.apache.camel.processor.Pipeline.process(Pipeline.java:83)
       at 
org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
        at 
org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:442)
        at 
org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:214)
        at 
org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:178)
        at 
org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174)
        at 
org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101)
        at 
org.apache.camel.pollconsumer.quartz2.QuartzScheduledPollConsumerJob.execute(QuartzScheduledPollConsumerJob.java:59)
        at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        at 
org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: 
java.io.InputStream but has value: 
GenericFile[/mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml] of type: 
org.apache.camel.component.file.GenericFile on: DD_SOS2016031422110816.xml. 
Caused by: Error during type conversion from type: java.lang.String to the 
required type: byte[] with value [Body is file based: 
GenericFile[/mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml]] due 
java.io.FileNotFoundException: /mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml 
(No such file or directory). 
Exchange[ID-slesb101-60348-1457682250340-0-642502][DD_SOS2016031422110816.xml]. 
Caused by: [org.apache.camel.TypeConversionException - Error during type 
conversion from type: java.lang.String to the required type: byte[] with value 
[Body is file based: 
GenericFile[/mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml]] due 
java.io.FileNotFoundException: /mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml 
(No such file or directory)]
        at 
org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:101)
        at 
org.apache.camel.component.file.FileOperations.storeFile(FileOperations.java:273)
        ... 19 more
Caused by: org.apache.camel.TypeConversionException: Error during type 
conversion from type: java.lang.String to the required type: byte[] with value 
[Body is file based: 
GenericFile[/mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml]] due 
java.io.FileNotFoundException: /mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml 
(No such file or directory)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.createTypeConversionException(BaseTypeConverterRegistry.java:610)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:177)
        at 
org.apache.camel.component.file.FileBinding.loadContent(FileBinding.java:57)
        at 
org.apache.camel.component.file.GenericFileConverter.genericFileToInputStream(GenericFileConverter.java:123)
        at sun.reflect.GeneratedMethodAccessor559.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at 
org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1243)
        at 
org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:293)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:168)
        at 
org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
        ... 20 more
Caused by: org.apache.camel.RuntimeCamelException: 
java.io.FileNotFoundException: /mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml 
(No such file or directory)
        at 
org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1642)
        at 
org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1247)
        at 
org.apache.camel.impl.converter.StaticMethodTypeConverter.convertTo(StaticMethodTypeConverter.java:59)
        at 
org.apache.camel.component.file.GenericFileConverter.convertTo(GenericFileConverter.java:97)
        at sun.reflect.GeneratedMethodAccessor555.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at 
org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1243)
        at 
org.apache.camel.impl.converter.StaticMethodFallbackTypeConverter.convertTo(StaticMethodFallbackTypeConverter.java:62)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.doConvertTo(BaseTypeConverterRegistry.java:333)
        at 
org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:168)
        ... 30 more
Caused by: java.io.FileNotFoundException: 
/mnt/sl-nl/bij/outbox/DD_SOS2016031422110816.xml (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at 
org.apache.camel.converter.IOConverter.toInputStream(IOConverter.java:78)
        at 
org.apache.camel.converter.IOConverter.toByteArray(IOConverter.java:266)
        at sun.reflect.GeneratedMethodAccessor604.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
       at java.lang.reflect.Method.invoke(Method.java:497)
        at 
org.apache.camel.util.ObjectHelper.invokeMethod(ObjectHelper.java:1243)
        ... 39 more

Reply via email to