[ 
https://issues.apache.org/jira/browse/STRATOS-939?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14199825#comment-14199825
 ] 

Nirmal Fernando commented on STRATOS-939:
-----------------------------------------

(5-1)/2 = 5/2 - 1/2 is the Math I know :-)

It's a time difference, so the value still matters, if it's division of same 
units, then it can be neglected.  
This is not per second value.

So, what I've done here is to put a reasonable constraint on the events saying, 
two events should be at least 1s apart from each other before doing gradient 
(per second) calculation.

And this is the tangent value we're talking about and tangent can span from 0 
to (+/-)infinity.

> CEP sends very large values for gradient and second derivative of load average
> ------------------------------------------------------------------------------
>
>                 Key: STRATOS-939
>                 URL: https://issues.apache.org/jira/browse/STRATOS-939
>             Project: Stratos
>          Issue Type: Bug
>          Components: CEP
>    Affects Versions: 4.1.0 M3
>            Reporter: Nirmal Fernando
>            Assignee: Nirmal Fernando
>            Priority: Critical
>             Fix For: 4.1.0 M4
>
>         Attachments: STRATOS-939.diff
>
>
> How we calculate gradient of two events? 
> Say the events are; e1(t1,v1) and e2(t2,v2) 
> tx - time in milliseconds when xth event occurred
> vx - value (memory, cpu etc.) that xth event carries
> time gap = t(2-1) = t2 -t1 milliseconds
> time gap in seconds = t(2-1) = (t2 - t1)/1000 seconds
> Hence,
> Gradient = (v2 - v1)  / t(2-1)  = ( (v2 - v1) * 1000 ) / (t2 - t1)
> I've enabled debug logs for CEP extension;
> log4j.logger.org.apache.stratos.cep.extension=DEBUG
> Please find the following 3 logs extracted from the debug logs;
> ===================================================================
> TID: [0] [STRATOS] [2014-11-05 19:47:27,073] DEBUG 
> {org.apache.stratos.cep.extension.SecondDerivativeFinderWindowProcessor} -  
> Gradient: -0.1996007984031936 Last val: 9.0 First val: 12.0 Time Gap: 15030 
> t1: 1415213202095 t2: 1415213217125 hash: 155426542
> TID: [0] [STRATOS] [2014-11-05 19:47:27,073] DEBUG 
> {org.apache.stratos.cep.extension.SecondDerivativeFinderWindowProcessor} -  
> Gradient: -999.9999999999998 Last val: 7.000000000000001 First val: 12.0 Time 
> Gap: 5 t1: 1415213232152 t2: 1415213232157 hash: 155426542
> TID: [0] [STRATOS] [2014-11-05 19:47:27,074] DEBUG 
> {org.apache.stratos.cep.extension.SecondDerivativeFinderWindowProcessor} -  
> Gradient: -44.34884666437174 Last val: -999.9999999999998 First val: 
> -0.1996007984031936 Time Gap: 22544 t1: 1415213209610 t2: 1415213232154 hash: 
> 155426542
> ===================================================================
> So, as you can see the reason behind a large value is when the time gap 
> between two subjected events is less than 1 second. This could happen since 
> events are coming from different asynchronous agents and also when there are 
> less number of events.
> FIX
> ====
> So, the fix I propose is a very simple one and it will not compromise 
> anything AFAIS.
> Fix is to calculate time gap as follows;
>                                                        
>                                                       
> time gap = t(2-1) } t2 -t1 > 1000  -----> t2 - t1
>                               t2 - t1 <= 1000 ----> 1000
> I have tested this and works fine.



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

Reply via email to