Uploaded image for project: 'Stratos'
  1. Stratos
  2. STRATOS-939

CEP sends very large values for gradient and second derivative of load average

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Critical
    • Resolution: Fixed
    • Affects Version/s: 4.1.0 M3
    • Fix Version/s: 4.1.0 RC3
    • Component/s: CEP
    • Labels:
      None

      Description

      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.

        Attachments

        1. STRATOS-939.diff
          3 kB
          Nirmal Fernando

          Activity

            People

            • Assignee:
              nirmal Nirmal Fernando
              Reporter:
              nirmal Nirmal Fernando
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: