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

Claus Ibsen resolved CAMEL-9288.
--------------------------------
       Resolution: Duplicate
         Assignee: Claus Ibsen
    Fix Version/s: 2.16.0

See CAMEL-9184

> Apache Camel Throttler component keeps rejecting trafffic in next slot if 
> current slot threshold is reached and more requests received in current slot
> ------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-9288
>                 URL: https://issues.apache.org/jira/browse/CAMEL-9288
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.14.0, 2.14.1, 2.14.2, 2.14.3
>            Reporter: Devendra Pratap Singh
>            Assignee: Claus Ibsen
>             Fix For: 2.16.0
>
>
> I have observed that apache-camel doesn't throttle the requests as expected 
> when the rejectExecution(see below) is true
> <throttle timePeriodMillis="10000" rejectExecution="true">
>     <constant>4</constant>
>     <to uri="mock:result"/>
> </throttle>
> Following is code snippet from org.apache.camel.processor.Throttle class
>     protected long calculateDelay(Exchange exchange) {
>     ......
>     TimeSlot slot = nextSlot();
>             if (!slot.isActive()) {
>                 long delay = slot.startTime - currentSystemTime();
>                 return delay;
>             } else {
>                 return 0;
>             }
>     }
> /*
>  *Determine what the next available time slot is for handling an Exchange
>  */
> protected synchronized TimeSlot nextSlot() {
>     if (slot == null) {
>         slot = new TimeSlot();
>     }
>     if (slot.isFull() || !slot.isPast()) {
>         slot = slot.next();
>     }
>     slot.assign();
>     return slot;
> }
> As per above snippet whenever a slot is full and a new request arrives, then 
> a new slot beginning after the current slot is created and slot.assign() is 
> invoked to reduce the capacity of this newly created slot to accommodate 
> current request which according to me is faulty as there will be a delay in 
> processing this new request and as per the Throttler code whenever there is a 
> delay and rejectExecution = true a 
> org.apache.camel.processor.ThrottlerRejectedExecutionException is thrown. 
> It's obvious that even though the Throttler component is rejecting the new 
> request after the threshold is reached still it is reducing the capacity of 
> the next slot which will allow one less request to be processed in the next 
> slot rather than the same number as of previous slot.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to