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

Aaron Lindsey reassigned GEODE-7184:
------------------------------------

    Assignee: Aaron Lindsey

> Add function executions timer
> -----------------------------
>
>                 Key: GEODE-7184
>                 URL: https://issues.apache.org/jira/browse/GEODE-7184
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Aaron Lindsey
>            Assignee: Aaron Lindsey
>            Priority: Major
>
> Developers oftentimes deploy their own functions to the system to enable 
> decorator pattern for caching to add information to specific key/value pairs. 
> In doing so, they can introduce bottlenecks into the system where server-side 
> functions can cause issues or make things slower than intended. We want a way 
> that users can view functions that they create, and see what the average 
> execution time looks like.
>  * *Meter Type*: Timer
>  * *Name*: geode.function.executions
>  * *Description*: TBD
>  * *Tags*: <common_tags>, function (getId on function, if DNE present 
> getClass.getname of deployed function), succeeded (true/false)
> h3. Acceptance Criteria
> *Meter creation/deletion*: Create meter on function deployment/register, 
> delete on un-deploy/unregister of a function or re-deploy of the same function
>  *Measurement*: On an individual server, start the timer when a **USER** 
> deployed function is invoked, and stop the timer when the user function 
> completes OR errors. If it throws a Function Execution or another error then 
> the tag function.isSuccessful=false
> Details on Functions and their execution: 
> [https://gemfire.docs.pivotal.io/97/geode/developing/function_exec/function_execution.html]
> h3. Scenarios
> *Scenario: The timers are created when the function is deployed*
>  Given a user deployed function with ID functionToTime exists on a cluster 
> with 1 locator/1 server
>  And functionToTime has not been triggered
>  Then the server has the following timer:
>  - name: geode.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = true
>  - count = 0
>  - totalTime = 0
> And the server has the following timer:
>  - name: geode.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = false
>  - count = 0
>  - totalTime = 0
> *Scenario: Successful singular function execution*
>  Given a user deployed function with ID functionToTime (that waits for 5 
> seconds) exists on a cluster with 1 locator/1 server
>  When functionToTime is triggered using gfsh command: "execute function 
> --id=functionToTime"
>  And the function completes without error
>  Then the server has the following timer:
>  - name: geode.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = true
>  - count = 1
>  - totalTime >= 5,000,000,000ns
> *Scenario: Singular function execution with Any Exception*
>  Given a user deployed function with ID functionToTime exists on a cluster 
> with 1 locator /1 server
>  When that function execution is triggered using gfsh command: "execute 
> function --id=functionToTime"
>  And the function exits with a Any exception error after running for 5 seconds
>  Then the server has the following timer:
>  - name: geode.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = false
>  - count = 1
>  - totalTime >= 5,000,000,000ns
> *Scenario: Function execution on multi-servers*
>  Given a user deployed function with ID functionToTime (that waits for 5 
> seconds) is deployed with 'onRegion' to a replicate region named RR1
>  And exists on both servers of a cluster with 1 locator (named L1) as well as 
> 2 servers (named S1,S2)
>  When that function execution is triggered against that replicate region 
> using gfsh command: "execute function --id=functionToTime --region=RR1"
>  Then one server has the following timer:
>  - name: geode.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = true
>  - count = 1
>  - totalTime >= 5,000,000,000ns
> And the other server has the following timer:
>  - name: geode.cache.function.executions
>  - tag: id = functionToTime
>  - tag: succeeded = true
>  - count = 0
>  - totalTime = 0}}
> *Scenario: Function execution multiple times*
>  Given a user deployed function with ID functionToTime (that waits for 5 
> seconds) is deployed with 'onRegion' to a replicate region
>  And exists on both servers of a cluster with 1 locator (named L1) as well as 
> 2 servers (named S1,S2)
>  When that function execution is triggered 10 times against that replicate 
> region using gfsh command: "execute function --id=functionToTime --region=RR1 
> --members=S1"
>  Then S1 has the following timer:
>  - name: geode.function.executions
>  - tag:id = functionToTime
>  - tag:succeeded = true
>  - count = 10
> And S2 has the following timer:
>  - name: geode.cache.function.executions
>  - tag:id = functionToTime
>  - tag:succeeded = true
>  - count = 0
> *Scenario: The timers are deleted when the function is undeployed*
>  Given a user deployed function with ID functionToTime exists on a cluster 
> with 1 locator/1 server
>  When the user undeploys the function by `undeploy --jar=<tbd>.jar`
>  Then the server does not have any timer with the following name and tag:
>  - name: geode.function.executions
>  - tag: id = functionToTime
> *Scenario: Non-user deployed functions shouldn't count*
>  Given a cluster with 1 locator/1 server
>  When the system starts up the cache with internal functions
>  Then the server does not have any timer with the following name:
>  - name: geode.function.executions



--
This message was sent by Atlassian Jira
(v8.3.2#803003)

Reply via email to