Abhinav Roy created CLOUDSTACK-1851:
---------------------------------------

             Summary: [AWS Style Health Checks] Health Check monitor not 
getting created on Netscaler device in Basic zone setup.
                 Key: CLOUDSTACK-1851
                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-1851
             Project: CloudStack
          Issue Type: Bug
      Security Level: Public (Anyone can view this level - this is the default.)
          Components: Management Server
    Affects Versions: 4.2.0
         Environment: NS : 10.x
CS Basic Zone setup
            Reporter: Abhinav Roy
            Assignee: Rajesh Battala
            Priority: Blocker
             Fix For: 4.2.0


Steps :
====================
1. Deploy CS Basic zone setup with 
DefaultSharedNetscalerEIPandELBNetworkOffering.
2. Create a LB rule, add VMs to the rule.
3. Create a health check policy on that LB rule.


Expected behaviour :
====================
The health check policy should be created on CS and a corresponding monitor 
should be created on Netscaler

Observed Behaviour :
===================
The health check policy gets created on CS side but no monitor is created on NS 
device.

Log snippets :
===================

2013-03-29 15:54:14,409 DEBUG [cloud.api.ApiServlet] (catalina-exec-19:null) 
===START===  10.144.6.19 -- GET  
command=createLBHealthCheckPolicy&response=json&sessionkey=6YwSYX%2BDXUBo2X5oVF8uKA%2BQq1A%3D&lbruleid=6d10728d-ff92-442b-b4dc-1231456a08e2&pingpath=%2F&responsetimeout=2&intervaltime=5&healthythreshold=4&unhealthythreshold=2&_=13645526469682013-03-29
 15:54:14,460 DEBUG [cloud.async.AsyncJobManagerImpl] (catalina-exec-19:null) 
submit async job-18, details: AsyncJobVO {id:18, userId: 2, accountId: 2, 
sessionKey: null, instanceType: null, instanceId: 2, cmd: 
org.apache.cloudstack.api.command.user.loadbalancer.CreateLBHealthCheckPolicyCmd,
 cmdOriginator: null, cmdInfo: 
{"responsetimeout":"2","sessionkey":"6YwSYX+DXUBo2X5oVF8uKA+Qq1A\u003d","ctxUserId":"2","unhealthythreshold":"2","pingpath":"/","response":"json","id":"2","lbruleid":"6d10728d-ff92-442b-b4dc-1231456a08e2","_":"1364552646968","ctxAccountId":"2","ctxStartEventId":"64","healthythreshold":"4","intervaltime":"5"},
 cmdVersion: 0, callbackType: 0, callbackAddress: null, status: 0, 
processStatus: 0, resultCode: 0, result: null, initMsid: 218380783579093, 
completeMsid: null, lastUpdated: null, lastPolled: null, created: 
null}2013-03-29 15:54:14,462 DEBUG [cloud.api.ApiServlet] 
(catalina-exec-19:null) ===END===  10.144.6.19 -- GET  
command=createLBHealthCheckPolicy&response=json&sessionkey=6YwSYX%2BDXUBo2X5oVF8uKA%2BQq1A%3D&lbruleid=6d10728d-ff92-442b-b4dc-1231456a08e2&pingpath=%2F&responsetimeout=2&intervaltime=5&healthythreshold=4&unhealthythreshold=2&_=1364552646968
2013-03-29 15:54:14,463 DEBUG [cloud.async.AsyncJobManagerImpl] 
(Job-Executor-21:job-18) Executing 
org.apache.cloudstack.api.command.user.loadbalancer.CreateLBHealthCheckPolicyCmd
 for job-182013-03-29 15:54:14,523 DEBUG [agent.transport.Request] 
(Job-Executor-21:job-18) Seq 1-1923219481: Sending  { Cmd , MgmtId: 
218380783579093, via: 1, Ver: v1, Flags: 100011, 
[{"routing.LoadBalancerConfigCommand":{"loadBalancers":[{"uuid":"6d10728d-ff92-442b-b4dc-1231456a08e2","srcIp":"10.102.195.14","srcPort":22,"protocol":"tcp","algorithm":"roundrobin","revoked":false,"alreadyAdded":false,"inline":false,"destinations":[{"destIp":"10.102.195.53","destPort":22,"revoked":false,"alreadyAdded":false}]}],"lbStatsVisibility":"guest-network","lbStatsPort":"8081","lbStatsSrcCidrs":"0/0","lbStatsAuth":"admin1:AdMiN123","lbStatsUri":"/admin?stats","accessDetails":{},"wait":0}}]
 }
2013-03-29 15:54:14,523 DEBUG [agent.transport.Request] 
(Job-Executor-21:job-18) Seq 1-1923219481: Executing:  { Cmd , MgmtId: 
218380783579093, via: 1, Ver: v1, Flags: 100011, 
[{"routing.LoadBalancerConfigCommand":{"loadBalancers":[{"uuid":"6d10728d-ff92-442b-b4dc-1231456a08e2","srcIp":"10.102.195.14","srcPort":22,"protocol":"tcp","algorithm":"roundrobin","revoked":false,"alreadyAdded":false,"inline":false,"destinations":[{"destIp":"10.102.195.53","destPort":22,"revoked":false,"alreadyAdded":false}]}],"lbStatsVisibility":"guest-network","lbStatsPort":"8081","lbStatsSrcCidrs":"0/0","lbStatsAuth":"admin1:AdMiN123","lbStatsUri":"/admin?stats","accessDetails":{},"wait":0}}]
 }
2013-03-29 15:54:14,523 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-54:null) Seq 1-1923219481: Executing request
2013-03-29 15:54:14,589 DEBUG [network.resource.NetscalerResource] 
(DirectAgent-54:null) Created load balancing virtual server 
Cloud-VirtualServer-10.102.195.14-22 on the Netscaler device
2013-03-29 15:54:14,589 DEBUG [network.resource.NetscalerResource] 
(DirectAgent-54:null) Created load balancing virtual server 
Cloud-VirtualServer-10.102.195.14-22 on the Netscaler device
2013-03-29 15:54:14,696 DEBUG [network.resource.NetscalerResource] 
(DirectAgent-54:null) Successfully added LB destination: 10.102.195.53:22 to 
load balancer 10.102.195.14:22
2013-03-29 15:54:14,696 INFO  [network.resource.NetscalerResource] 
(DirectAgent-54:null) Successfully executed resource LoadBalancerConfigCommand: 
{"loadBalancers":[{"uuid":"6d10728d-ff92-442b-b4dc-1231456a08e2","srcIp":"10.102.195.14","srcPort":22,"protocol":"tcp","algorithm":"roundrobin","revoked":false,"alreadyAdded":false,"inline":false,"destinations":[{"destIp":"10.102.195.53","destPort":22,"revoked":false,"alreadyAdded":false}]}],"lbStatsVisibility":"guest-network","lbStatsPort":"8081","lbStatsSrcCidrs":"0/0","lbStatsAuth":"admin1:AdMiN123","lbStatsUri":"/admin?stats","accessDetails":{},"wait":0}
2013-03-29 15:54:16,744 DEBUG [agent.manager.AgentManagerImpl] 
(AgentManager-Handler-1:null) Ping from 42013-03-29 15:54:17,501 DEBUG 
[cloud.api.ApiServlet] (catalina-exec-17:null) ===START===  10.144.6.19 -- GET  
command=queryAsyncJobResult&response=json&sessionkey=6YwSYX%2BDXUBo2X5oVF8uKA%2BQq1A%3D&jobid=1fb1b331-89f8-4c7f-9012-cc3948b15c0a&_=13645526500592013-03-29
 15:54:17,522 DEBUG [cloud.api.ApiServlet] (catalina-exec-17:null) ===END===  
10.144.6.19 -- GET  
command=queryAsyncJobResult&response=json&sessionkey=6YwSYX%2BDXUBo2X5oVF8uKA%2BQ
q1A%3D&jobid=1fb1b331-89f8-4c7f-9012-cc3948b15c0a&_=1364552650059
2013-03-29 15:54:17,959 DEBUG [agent.manager.DirectAgentAttache] 
(DirectAgent-54:null) Seq 1-1923219481: Response Received:2013-03-29 
15:54:17,959 DEBUG [agent.transport.Request] (DirectAgent-54:null) Seq 
1-1923219481: Processing:  { Ans: , MgmtId: 218380783579093, via: 1, Ver: v1, 
Flags: 10, [{"Answer":{"result":true,"wait":0}}] }2013-03-29 15:54:17,959 DEBUG 
[agent.transport.Request] (Job-Executor-21:job-18) Seq 1-1923219481: Received:  
{ Ans: , MgmtId: 218380783579093, via: 1, Ver: v1, Flags: 10, { Answer } }
2013-03-29 15:54:17,980 DEBUG [network.lb.LoadBalancingRulesManagerImpl] 
(Job-Executor-21:job-18) LB rule 1 state is set to Active







2013-03-29 16:00:18,225 ERROR 
[cloud.network.ExternalLoadBalancerDeviceManagerImpl] (LBHealthCheck-1:null) 
Exception Occured
java.lang.NumberFormatException: For input string: "untagged"        at 
java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:481)        at 
java.lang.Integer.parseInt(Integer.java:514)
        at 
com.cloud.network.ExternalLoadBalancerDeviceManagerImpl.getLBHealthChecks(ExternalLoadBalancerDeviceManagerImpl.java:1176)
        at 
com.cloud.network.element.NetscalerElement.getLBHealthChecks(NetscalerElement.java:837)
        at 
com.cloud.network.element.NetscalerElement.updateHealthChecks(NetscalerElement.java:824)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
        at 
com.cloud.utils.db.TransactionContextBuilder.AroundAnyMethod(TransactionContextBuilder.java:47)
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy214.updateHealthChecks(Unknown Source)
        at 
com.cloud.network.lb.LoadBalancingRulesManagerImpl.updateLBHealthChecks(LoadBalancingRulesManagerImpl.java:859)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
        at 
com.cloud.utils.db.TransactionContextBuilder.AroundAnyMethod(TransactionContextBuilder.java:41)
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
                at 
com.cloud.network.lb.LBHealthCheckManagerImpl.updateLBHealthCheck(LBHealthCheckManagerImpl.java:103)
        at 
com.cloud.network.lb.LBHealthCheckManagerImpl$UpdateLBHealthCheck.run(LBHealthCheckManagerImpl.java:93)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:165)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:679)
2013-03-29 16:00:18,228 ERROR [network.lb.LBHealthCheckManagerImpl] 
(LBHealthCheck-1:null) Exception in LB HealthCheck Update Checker
java.lang.NullPointerException
        at 
com.cloud.network.ExternalLoadBalancerDeviceManagerImpl.getLBHealthChecks(ExternalLoadBalancerDeviceManagerImpl.java:1184)
        at 
com.cloud.network.element.NetscalerElement.getLBHealthChecks(NetscalerElement.java:837)
        at 
com.cloud.network.element.NetscalerElement.updateHealthChecks(NetscalerElement.java:824)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
        at 
com.cloud.utils.db.TransactionContextBuilder.AroundAnyMethod(TransactionContextBuilder.java:47)
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy214.updateHealthChecks(Unknown Source)
        at 
com.cloud.network.lb.LoadBalancingRulesManagerImpl.updateLBHealthChecks(LoadBalancingRulesManagerImpl.java:859)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
        at 
com.cloud.utils.db.TransactionContextBuilder.AroundAnyMethod(TransactionContextBuilder.java:41)
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
                at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy214.updateHealthChecks(Unknown Source)
        at 
com.cloud.network.lb.LoadBalancingRulesManagerImpl.updateLBHealthChecks(LoadBalancingRulesManagerImpl.java:859)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:319)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)
        at 
com.cloud.utils.db.TransactionContextBuilder.AroundAnyMethod(TransactionContextBuilder.java:41)
        at sun.reflect.GeneratedMethodAccessor27.invoke(Unknown Source)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:616)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
        at 
org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
        at 
org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
        at $Proxy195.updateLBHealthChecks(Unknown Source)
        at 
com.cloud.network.lb.LBHealthCheckManagerImpl.updateLBHealthCheck(LBHealthCheckManagerImpl.java:103)
        at 
com.cloud.network.lb.LBHealthCheckManagerImpl$UpdateLBHealthCheck.run(LBHealthCheckManagerImpl.java:93)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at 
java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:165)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:679)
                


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to