Hi, The logic worked. Test case is added to ESB. Thanks for all the help. AndubSLG On Aug 30, 2012 11:22 AM, "Andun Sameera" <[email protected]> wrote:
> Hi Hiranya, > > Thanks for looking in to this. I don't understand a way to Assert to check > takes > >= 3 errors. So after discussing with Miyuru I thought a another > alternative. > > - Specify Non Retry codes for all error codes expect 101504 > - Generate a 101505 > - So client will timeout without getting a response and we can assert > that. > - Then generate a 101504, so failover will eecuted and reply will come > from second endpoint and we can assert that. > > I will try this logic and let you know. > > Thanks > AndunSLG > > > > On Thu, Aug 30, 2012 at 10:51 AM, Hiranya Jayathilaka < > [email protected]> wrote: > >> >> >> On Thu, Aug 30, 2012 at 8:45 AM, Andun Sameera <[email protected]> wrote: >> >>> Hi, >>> >>> I have tried int the way which Dushan explained. So I have change my >>> proxy config like this, >>> >>> <proxy name="failoverEndPoint_Specific_Errors" >>> transports="http https" >>> startOnLoad="true"> >>> <target> >>> <inSequence> >>> <send> >>> <endpoint> >>> <failover> >>> <endpoint name="9001 Server"> >>> <address uri=" >>> http://localhost:9001/services/LBService1"> >>> <timeout> >>> <duration>2000</duration> >>> </timeout> >>> <suspendOnFailure> >>> <initialDuration>60000</initialDuration> >>> <progressionFactor>2.0</progressionFactor> >>> </suspendOnFailure> >>> <markForSuspension> >>> >>> <errorCodes>101000,101500,101501,101503,101505,101506,101507,101509</errorCodes> >>> >>> <retriesBeforeSuspension>3</retriesBeforeSuspension> >>> </markForSuspension> >>> </address> >>> </endpoint> >>> <endpoint name="9002 Server"> >>> <address uri=" >>> http://localhost:9002/services/LBService1"/> >>> </endpoint> >>> </failover> >>> </endpoint> >>> </send> >>> </inSequence> >>> <outSequence> >>> <send/> >>> </outSequence> >>> </target> >>> </proxy> >>> >>> Here the endpoint "9001 Server" is marked for suspension for all the >>> error codes but the 101504. Target of doing that is to verify that the >>> endpoint will go to suspend state only if 101504 happens. But my argument >>> is wrong. >>> Because Let say if I generate 101505, then "9001 Server" will be >>> timeout. But Failover will retry same "9001 Server" for three times again. >>> Because it is marked as timeout and eligible for send a message. After >>> three retires "9001 Server" will be suspended. So my argument of "The >>> endpoint will go to suspend state only if 101504 happens" is wrong. >>> >> >> Why don't you alter you test? If it fails immediately, then you know it's >> due to a 101504 immediate suspension. If it takes >= 3 errors to fail then >> it's some other error. >> >> Thanks, >> Hiranya >> >> >>> >>> So Is there a way to verify that the failover logic is working fine for >>> specific error codes? >>> >>> Thanks >>> AndunSLG >>> >>> >>> On Wed, Aug 29, 2012 at 10:14 PM, Dushan Abeyruwan <[email protected]>wrote: >>> >>>> Hi >>>> >>>> AFAIU, the failover logic is working as follows, In your endpoint if >>>> its defines as >>>> <timeout> >>>> <duration>2000</duration> >>>> </timeout> >>>> >>>> <markForSuspension> >>>> >>>> <errorCodes>101504,101508</errorCodes> >>>> >>>> <retriesBeforeSuspension>0</retriesBeforeSuspension> >>>> <retryDelay>0</retryDelay> >>>> </markForSuspension> >>>> >>>> based on 101504,101508 errocodes always the endpoint will >>>> get marked as TIMEOUT and it wont try and IF the endpoints are failover >>>> then the FAILOVER will be invoked the next NONSUSPENDED endpoint.. actually >>>> the point you need to Note that the FAILOVER will be working only >>>> for 101504,101508,(according to your current configuration) so In your case >>>> let say need to invoke next NONSUSPNEDED endpoint when CONNECTION CLOSED.( >>>> *101505)*. then you should include that in MarkForSuspence, so please >>>> try with following >>>> >>>> <markForSuspension> >>>> <errorCodes>101504,101508,* >>>> 101505*</errorCodes> >>>> >>>> <retriesBeforeSuspension>0</retriesBeforeSuspension> >>>> <retryDelay>0</retryDelay> >>>> </markForSuspension> >>>> >>>> so what will happen now the IF BE is closed then the EP will >>>> be marked as TIMEOUT for 101504,101508,*101505 then as I >>>> explained earlier it will invoke next active NONSUSPNEDED endpoint,* >>>> * * >>>> * * Persoally i havent try this out but if looking >>>> http://wso2.org/library/articles/wso2-enterprise-service-bus-endpoint-error-handling >>>> the logic is clearly explained please give more attention to >>>> the highlighted text >>>> >>>> e.g >>>> >>>> <endpoint name="SampleFailover"> >>>> <failover> >>>> <endpoint name="Sample_First" statistics="enable" > >>>> <address uri="http://localhost/myendpoint" statistics="enable" >>>> trace="disable"> >>>> <timeout> >>>> <duration>60000</duration> >>>> </timeout> >>>> >>>> <markForSuspension> >>>> <errorCodes>101504, 101505, 101500</errorCodes> >>>> <retriesBeforeSuspension>3</retriesBeforeSuspension> >>>> <retryDelay>1</retryDelay> >>>> </markForSuspension> >>>> >>>> <suspendOnFailure> >>>> <initialDuration>1000</initialDuration> >>>> <progressionFactor>2</progressionFactor> >>>> <maximumDuration>64000</maximumDuration> >>>> </suspendOnFailure> >>>> >>>> </address> >>>> </endpoint> >>>> </failover> >>>> </endpoint> >>>> >>>> >>>> "Here the Sample_First endpoint is marked as *TIMEOUT if a connection runs >>>> out of time, a connection close or sends IO errors. For all the other >>>> errors*, it will be marked as suspended. *When this error occurs the fail >>>> over will retry using the first non SUSPENDED endpoint.* In this case, it >>>> is the same endpoint (Sample_First). It will retry until the retry count >>>> becomes 0. The retry happens in parrellel. Since messages do come to this >>>> endpoint using many threads, the same message may not be retired 3 times. >>>> Another message may fail and can reduce the retry count. So it is >>>> important to note that the retry count is not a per message based setting, >>>> it is a per endpoint based setting." >>>> >>>> >>>> >>>> cheers >>>> Dushan >>>> >>>> >>>> >>>> On Wed, Aug 29, 2012 at 7:57 PM, Andun Sameera <[email protected]> wrote: >>>> >>>>> Hi All, >>>>> >>>>> I am trying to check the functionality of the Fail Over Endpoint. I >>>>> want to verify that the failover logic is happening to specific error >>>>> codes. I used proxy given below for that, >>>>> >>>>> According to >>>>> [1]<http://wso2.org/library/articles/wso2-enterprise-service-bus-endpoint-error-handling>, >>>>> error code 101504,101508 for timeouts. So I used following test case >>>>> to produce the scenario, >>>>> >>>>> My logic was this, >>>>> >>>>> 1. Send a request to proxy to check it is functioning. >>>>> 2. Shutdown http://localhost:9001 server. >>>>> 3. Then send Send a request to proxy again. So the first endpoint >>>>> should be failed. But it cant be suspend. Because it is only >>>>> suspending for >>>>> timeouts. >>>>> 4. Response should come from second server. >>>>> 5. Then Start the http://localhost:9001 server. >>>>> 6. Then send Send a request to proxy again. Response should come >>>>> from server1. Because it is not suspended.( I am trying this with in >>>>> the >>>>> suspend time period of 9001-server endpoint, so if is suspended, >>>>> response >>>>> should come from server2) >>>>> >>>>> But when I tried this, in the 3rd step of the logic >>>>> (Red Highlighted line of the code) it fails. The endpoint is suspending >>>>> for >>>>> connection refused created by shutting down the server. According to spec >>>>> it cant be. Is this a bug or am I doing something wrong here? Please look >>>>> at this ASAP we need this to wind up Test Automation Hackathon tomorrow. >>>>> >>>>> Thanks >>>>> AndunSLG >>>>> >>>>> [1] - >>>>> http://wso2.org/library/articles/wso2-enterprise-service-bus-endpoint-error-handling >>>>> >>>>> Proxy Service : >>>>> >>>>> <proxy name="failoverEndPoint_Specific_Errors" transports="http,https"> >>>>> <target> >>>>> <inSequence> >>>>> <send> >>>>> <endpoint> >>>>> <failover> >>>>> <endpoint name="9001 Server"> >>>>> <address uri=" >>>>> http://localhost:9001/services/LBService1"> >>>>> <timeout> >>>>> <duration>2000</duration> >>>>> </timeout> >>>>> >>>>> <markForSuspension> >>>>> >>>>> <errorCodes>101504,101508</errorCodes> >>>>> >>>>> <retriesBeforeSuspension>0</retriesBeforeSuspension> >>>>> <retryDelay>0</retryDelay> >>>>> </markForSuspension> >>>>> >>>>> <suspendOnFailure> >>>>> >>>>> <initialDuration>60000</initialDuration> >>>>> >>>>> <progressionFactor>2</progressionFactor> >>>>> </suspendOnFailure> >>>>> </address> >>>>> </endpoint> >>>>> <endpoint name="9002 Server"> >>>>> <address uri=" >>>>> http://localhost:9002/services/LBService1"> >>>>> <timeout> >>>>> <duration>2000</duration> >>>>> </timeout> >>>>> >>>>> <markForSuspension> >>>>> <errorCodes>101509</errorCodes> >>>>> >>>>> <retriesBeforeSuspension>0</retriesBeforeSuspension> >>>>> <retryDelay>0</retryDelay> >>>>> </markForSuspension> >>>>> >>>>> <suspendOnFailure> >>>>> >>>>> <initialDuration>60000</initialDuration> >>>>> >>>>> <progressionFactor>2</progressionFactor> >>>>> </suspendOnFailure> >>>>> </address> >>>>> </endpoint> >>>>> </failover> >>>>> </endpoint> >>>>> </send> >>>>> </inSequence> >>>>> <outSequence> >>>>> <send/> >>>>> </outSequence> >>>>> </target> >>>>> </proxy> >>>>> >>>>> Test Case : >>>>> >>>>> @Test(groups = "wso2.esb", description = "Test sending request to Fail >>>>> Over Endpoint which Suspend Endpoints to Specific Errors") >>>>> public void testSendingFailOverEndpoint_With_Specific_Errors() >>>>> throws IOException, InterruptedException { >>>>> //Check the fail over endpoint is functioning well >>>>> String response = >>>>> lbClient.sendLoadBalanceRequest(getProxyServiceURL("failoverEndPoint_Specific_Errors"), >>>>> null); >>>>> Assert.assertNotNull(response); >>>>> Assert.assertTrue(response.toString().contains("Response from >>>>> server: Server_1")); >>>>> >>>>> //Stop one server to generate a failure in one endpoint >>>>> //But the suspend cant be triggered here. because suspend the >>>>> endpoint happen only for Timeouts 101504,101508 >>>>> axis2Server1.stop(); >>>>> >>>>> response = >>>>> lbClient.sendLoadBalanceRequest(getProxyServiceURL("failoverEndPoint_Specific_Errors"), >>>>> null); >>>>> Assert.assertNotNull(response); >>>>> Assert.assertTrue(response.toString().contains("Response from >>>>> server: Server_2")); >>>>> >>>>> axis2Server1.start(); >>>>> >>>>> int counter=0; >>>>> while(!AxisServiceClientUtils.isServiceAvailable(" >>>>> http://localhost:9001/services/LBService1")) { >>>>> if(counter>100){ >>>>> break; >>>>> } >>>>> counter++; >>>>> } >>>>> >>>>> if(counter>100){ >>>>> throw new AssertionError("Axis2 Server didn't started with >>>>> in expected time period.") ; >>>>> } >>>>> else{ >>>>> //Checaxiaxis2Server1.start()s2Server1.stop()k that the >>>>> endpoint one is not suspended. >>>>> //If reply comes that means not suspended. >>>>> //Because suspend duration of the endpoint is 20 seconds. >>>>> So reply cant come in this time. >>>>> response = >>>>> lbClient.sendLoadBalanceRequest(getProxyServiceURL("failoverEndPoint_Specific_Errors"), >>>>> null); >>>>> Assert.assertNotNull(response); >>>>> Assert.assertTrue(response.toString().contains("Response >>>>> from server: Server_1")); >>>>> >>>>> //Invoke a web service method which will invoke a time out >>>>> and cause the endpoint to suspend. >>>>> response = >>>>> lbClient.sendSleepRequest(getProxyServiceURL("failoverEndPoint_Specific_Errors"),"4000"); >>>>> Assert.assertNotNull(response); >>>>> Assert.assertTrue(response.toString().contains("Response >>>>> from server: Server_2")); >>>>> >>>>> //Invoke a web service method which will invoke a time out >>>>> and cause the endpoint to suspend. >>>>> response = >>>>> lbClient.sendLoadBalanceRequest(getProxyServiceURL("failoverEndPoint_Specific_Errors"), >>>>> null); >>>>> Assert.assertNotNull(response); >>>>> Assert.assertTrue(response.toString().contains("Response >>>>> from server: Server_2")); >>>>> >>>>> } >>>>> } >>>>> >>>>> >>>> >>>> >>>> -- >>>> Dushan Abeyruwan >>>> *Senior Software Engineer* >>>> *Integration Technologies Team* >>>> *WSO2 Inc. http://wso2.com/* >>>> *Mobile:(+94)714408632* >>>> >>>> >>> >>> _______________________________________________ >>> Dev mailing list >>> [email protected] >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >> >> >> -- >> Hiranya Jayathilaka >> Associate Technical Lead; >> WSO2 Inc.; http://wso2.org >> E-mail: [email protected]; Mobile: +94 77 633 3491 >> Blog: http://techfeast-hiranya.blogspot.com >> > >
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
