Great stuff Anuruddha. I have merged the pull request. Thanks.
On Wed, Jun 3, 2015 at 2:58 PM, Anuruddha Liyanarachchi <anurudd...@wso2.com > wrote: > Hi, > > I have now fixed the undeploy error in PCA. The issue was with > InstanceCleanupClusterEvent > not getting handled due to error in json conversion. Therefore > ready_to_shutdown_event > was not getting published. > > Now the flow is working as expected. > > Please merge the fix in PR [1] . > > > [1] https://github.com/apache/stratos/pull/364 > <https://github.com/apache/stratos/pull/364> > > On Wed, Jun 3, 2015 at 2:04 PM, Lahiru Sandaruwan <lahi...@wso2.com> > wrote: > >> Hi, >> >> I have fixed the above explained issue. >> >> Now i'm trying to use Stratos LB to route requests based on network >> partition. There are two regions in my setup and each region has a member. >> >> I have enabled the network partition based filter with network partition >> id. >> >> >> * network-partition-id: ap-southeast-1-nw-partition;* >> >> But it seems both the members are added to the cluster(log [1]) and tries >> to route requests to both of them. >> >> [1] >> TID: [0] [LB] [2015-06-03 08:31:29,919] INFO >> {org.apache.stratos.load.balancer.common.topology.TopologyProvider} - >> Member added to cluster: [cluster] >> single-cartridge-multi-cloud-app.my-php.php.domain [member] 172.31.12.56 >> TID: [0] [LB] [2015-06-03 08:31:29,919] INFO >> {org.apache.stratos.load.balancer.common.topology.TopologyProvider} - >> Member added to cluster: [cluster] >> single-cartridge-multi-cloud-app.my-php.php.domain [member] 172.31.5.153 >> >> >> Thanks. >> >> On Tue, Jun 2, 2015 at 9:59 PM, Lahiru Sandaruwan <lahi...@wso2.com> >> wrote: >> >>> Hi, >>> >>> I found another issue in replacing payload parameters using properties >>> of network partition. It is actually not replaced but added. >>> >>> I will fix this. >>> >>> Thanks. >>> >>> On Tue, Jun 2, 2015 at 7:40 PM, Lahiru Sandaruwan <lahi...@wso2.com> >>> wrote: >>> >>>> Hi, >>>> >>>> Reason for above error is that, python agent has already deleted the >>>> doc root directory in 'ApplicationSignUpRemovedEvent'. >>>> >>>> Thanks. >>>> >>>> >>>> >>>> On Tue, Jun 2, 2015 at 7:04 PM, Lahiru Sandaruwan <lahi...@wso2.com> >>>> wrote: >>>> >>>>> Hi Anuruddha, >>>>> >>>>> Thanks for the fix. I also get following error, >>>>> >>>>> >>>>> 2015-06-02 19:00:35,721:DEBUG:Executing handler for event >>>>> 'InstanceCleanupClusterEvent' >>>>> 2015-06-02 19:00:39,177:DEBUG:Running checkout job >>>>> Exception in thread Thread-62: >>>>> Traceback (most recent call last): >>>>> File "/usr/lib/python2.7/threading.py", line 551, in >>>>> __bootstrap_inner >>>>> self.run() >>>>> File "/usr/lib/python2.7/threading.py", line 504, in run >>>>> self.__target(*self.__args, **self.__kwargs) >>>>> File >>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>> line 456, in execute_task >>>>> AgentGitHandler.checkout(self.repo_info) >>>>> File >>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>> line 61, in checkout >>>>> if AgentGitHandler.is_valid_git_repository(git_repo): >>>>> File >>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>> line 139, in is_valid_git_repository >>>>> output, errors = AgentGitHandler.execute_git_command(["show-ref"], >>>>> git_repo.local_repo_path) >>>>> File >>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>> line 433, in execute_git_command >>>>> p = subprocess.Popen(command, stdout=subprocess.PIPE, >>>>> stderr=subprocess.PIPE, env=os_env, cwd=repo_path) >>>>> File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ >>>>> errread, errwrite) >>>>> File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child >>>>> raise child_exception >>>>> OSError: [Errno 2] No such file or directory: '/var/www' >>>>> >>>>> >>>>> Thanks. >>>>> >>>>> On Mon, Jun 1, 2015 at 7:00 PM, Anuruddha Liyanarachchi < >>>>> anurudd...@wso2.com> wrote: >>>>> >>>>>> Hi Imesh, >>>>>> >>>>>> This error occurs when your input format is not decalred correctly. >>>>>> The value should be in following format with double quotes. >>>>>> >>>>>> CONFIG_PARAM_WKA_MEMBERS="10.0.0.1:4000,10.0.0.1:5000" >>>>>> >>>>>> >>>>>> On Mon, Jun 1, 2015 at 6:50 PM, Imesh Gunaratne <im...@apache.org> >>>>>> wrote: >>>>>> >>>>>>> I found the following issue in >>>>>>> ConfigParserUtil.convert_properties_to_dictionary >>>>>>> >>>>>>> Traceback (most recent call last): >>>>>>> File "configurator.py", line 159, in <module> >>>>>>> configure() >>>>>>> File "configurator.py", line 151, in configure >>>>>>> context = generate_context(config_file_path) >>>>>>> File "configurator.py", line 110, in generate_context >>>>>>> context['CONFIG_PARAM_WKA_MEMBERS']) >>>>>>> File "/opt/wso2configurator-4.1.0/configparserutil.py", line 42, in >>>>>>> convert_properties_to_dictionary >>>>>>> properties = ast.literal_eval(variable).split(",") >>>>>>> File "/usr/lib/python2.7/ast.py", line 49, in literal_eval >>>>>>> node_or_string = parse(node_or_string, mode='eval') >>>>>>> File "/usr/lib/python2.7/ast.py", line 37, in parse >>>>>>> return compile(source, filename, mode, PyCF_ONLY_AST) >>>>>>> File "<unknown>", line 1 >>>>>>> 10.0.0.1:4000,10.0.0.1:5000 >>>>>>> ^ >>>>>>> SyntaxError: invalid syntax >>>>>>> >>>>>>> What was the reason for using ast.literal_eval(variable) here? >>>>>>> >>>>>>> On Mon, Jun 1, 2015 at 1:57 PM, Anuruddha Liyanarachchi < >>>>>>> anurudd...@wso2.com> wrote: >>>>>>> >>>>>>>> Hi Devs, >>>>>>>> >>>>>>>> Now I am getting following error. >>>>>>>> >>>>>>>> 2015-06-01 18:03:17,287:DEBUG:Running checkout job >>>>>>>>> Exception in thread Thread-38: >>>>>>>>> Traceback (most recent call last): >>>>>>>>> File "/usr/lib/python2.7/threading.py", line 551, in >>>>>>>>> __bootstrap_inner >>>>>>>>> self.run() >>>>>>>>> File "/usr/lib/python2.7/threading.py", line 504, in run >>>>>>>>> self.__target(*self.__args, **self.__kwargs) >>>>>>>>> File >>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>> line 456, in execute_task >>>>>>>>> AgentGitHandler.checkout(self.repo_info) >>>>>>>>> File >>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>> line 61, in checkout >>>>>>>>> if AgentGitHandler.is_valid_git_repository(git_repo): >>>>>>>>> File >>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>> line 139, in is_valid_git_repository >>>>>>>>> output, errors = >>>>>>>>> AgentGitHandler.execute_git_command(["show-ref"], >>>>>>>>> git_repo.local_repo_path) >>>>>>>>> File >>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>> line 433, in execute_git_command >>>>>>>>> p = subprocess.Popen(command, stdout=subprocess.PIPE, >>>>>>>>> stderr=subprocess.PIPE, env=os_env, cwd=repo_path) >>>>>>>>> File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ >>>>>>>>> errread, errwrite) >>>>>>>>> File "/usr/lib/python2.7/subprocess.py", line 1249, in >>>>>>>>> _execute_child >>>>>>>>> raise child_exception >>>>>>>>> OSError: [Errno 2] No such file or directory: '/var/www' >>>>>>>> >>>>>>>> >>>>>>>> On Mon, Jun 1, 2015 at 6:17 PM, Anuruddha Liyanarachchi < >>>>>>>> anurudd...@wso2.com> wrote: >>>>>>>> >>>>>>>>> Hi Devs, >>>>>>>>> >>>>>>>>> I have identified root cause for the error [1]. This is because >>>>>>>>> tenant_id is stored as an unicode string in dictionary and the passed >>>>>>>>> tenant id is an integer. >>>>>>>>> >>>>>>>>> {u'-1234': <modules.artifactmgt.git.agentgithandler.GitRepository >>>>>>>>> instance at 0x1cbeb00>} >>>>>>>>> >>>>>>>>> I have fixed the issue now in the PR [2]. Please review and merge. >>>>>>>>> >>>>>>>>> [1] >>>>>>>>> >>>>>>>>>> 2015-05-31 23:51:33,583:ERROR:Error processing >>>>>>>>>> 'ApplicationSignUpRemovedEvent' event >>>>>>>>>> Traceback (most recent call last): >>>>>>>>>> File >>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/subscriber/eventsubscriber.py", >>>>>>>>>> line 103, in run >>>>>>>>>> handler(event_msg) >>>>>>>>>> File "agent.py", line 294, in on_application_signup_removed >>>>>>>>>> >>>>>>>>>> self.__event_handler.on_application_signup_removed_event(event_obj) >>>>>>>>>> File >>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/event/eventhandler.py", >>>>>>>>>> line 355, in on_application_signup_removed_event >>>>>>>>>> >>>>>>>>>> AgentGitHandler.remove_repo(application_signup_removal_event.tenantId) >>>>>>>>>> File >>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>>> line 407, in remove_repo >>>>>>>>>> git_repo.scheduled_update_task.terminate() >>>>>>>>>> AttributeError: 'NoneType' object has no attribute >>>>>>>>>> 'scheduled_update_task' >>>>>>>>>> >>>>>>>>> >>>>>>>>> [2] https://github.com/apache/stratos/pull/363 >>>>>>>>> >>>>>>>>> On Mon, Jun 1, 2015 at 12:13 PM, Anuruddha Liyanarachchi < >>>>>>>>> anurudd...@wso2.com> wrote: >>>>>>>>> >>>>>>>>>> Hi Devs, >>>>>>>>>> >>>>>>>>>> I am working on the PCA error, in the undeployment process. >>>>>>>>>> >>>>>>>>>> On Mon, Jun 1, 2015 at 9:20 AM, Isuru Haththotuwa < >>>>>>>>>> isu...@apache.org> wrote: >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> On Mon, Jun 1, 2015 at 9:12 AM, Isuru Haththotuwa < >>>>>>>>>>> isu...@apache.org> wrote: >>>>>>>>>>> >>>>>>>>>>>> Hi Lahiru, >>>>>>>>>>>> >>>>>>>>>>>> Had a look. Here, the method call >>>>>>>>>>>> 'AgentGitHandler.get_repo(tenant_id)' seems to be not returning the >>>>>>>>>>>> expected git_repo object. Its returning a NoneType object, similar >>>>>>>>>>>> to NULL. >>>>>>>>>>>> The root cause AFAIS is the git repository being removed upon >>>>>>>>>>>> receiving >>>>>>>>>>>> application signup removed event in eventhandler.py [1]. >>>>>>>>>>>> >>>>>>>>>>>> [1]. >>>>>>>>>>>> AgentGitHandler.remove_repo(application_signup_removed_event.tenanId) >>>>>>>>>>>> On Mon, Jun 1, 2015 at 12:03 AM, Lahiru Sandaruwan < >>>>>>>>>>>> lahi...@wso2.com> wrote:On Tue, May 26, 2015 at 2:08 PM, Imesh >>>>>>>>>>>> Gunaratne <im...@apache.org> wrote:I did an end to end test >>>>>>>>>>>> with Kubernetes, single-cartridge application and found the below >>>>>>>>>>>> error in >>>>>>>>>>>> PCA when un-deploying the application:I have committed fix sent by >>>>>>>>>>>> Chamila >>>>>>>>>>>> and it solves this. Then i got an issue in tenant id retrieval due >>>>>>>>>>>> to a >>>>>>>>>>>> typo. I have fixed it as well.Still get the following error, [1] >>>>>>>>>>>> in the >>>>>>>>>>>> undeployment process. Looking into it.Thanks.[1] 2015-05-31 >>>>>>>>>>>> 23:51:33,583:INFO:Processing Tenant unsubscribed event: [tenant] >>>>>>>>>>>> -1234 >>>>>>>>>>>> [application ID] single-cartridge-app2015-05-31 >>>>>>>>>>>> 23:51:33,583:ERROR:Error >>>>>>>>>>>> processing 'ApplicationSignUpRemovedEvent' eventTraceback (most >>>>>>>>>>>> recent call >>>>>>>>>>>> last): File >>>>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/subscriber/eventsubscriber.py", >>>>>>>>>>>> line 103, in run handler(event_msg) File "agent.py", line 294, >>>>>>>>>>>> in >>>>>>>>>>>> on_application_signup_removed >>>>>>>>>>>> self.__event_handler.on_application_signup_removed_event(event_obj) >>>>>>>>>>>> File >>>>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/event/eventhandler.py", >>>>>>>>>>>> line 355, in on_application_signup_removed_event >>>>>>>>>>>> AgentGitHandler.remove_repo(application_signup_removal_event.tenantId) >>>>>>>>>>>> File >>>>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/artifactmgt/git/agentgithandler.py", >>>>>>>>>>>> line 407, in remove_repo >>>>>>>>>>>> git_repo.scheduled_update_task.terminate()AttributeError: >>>>>>>>>>>> 'NoneType' object >>>>>>>>>>>> has no attribute 'scheduled_update_task'[2015-05-26 06:44:40,038] >>>>>>>>>>>> ERROR >>>>>>>>>>>> {eventsubscriber.py:run} - Error processing >>>>>>>>>>>> 'ApplicationSignUpRemovedEvent' >>>>>>>>>>>> eventTraceback (most recent call last): File >>>>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/subscriber/eventsubscriber.py", >>>>>>>>>>>> line 103, in run handler(event_msg) File "agent.py", line 294, >>>>>>>>>>>> in >>>>>>>>>>>> on_application_signup_removed >>>>>>>>>>>> self.__event_handler.on_application_signup_removed_event(event_obj) >>>>>>>>>>>> File >>>>>>>>>>>> "/mnt/apache-stratos-python-cartridge-agent-4.1.0-SNAPSHOT/modules/event/eventhandler.py", >>>>>>>>>>>> line 351, in on_application_signup_removed_event " [application >>>>>>>>>>>> ID] " + >>>>>>>>>>>> application_signup_removal_event.applicationIdTypeError: cannot >>>>>>>>>>>> concatenate >>>>>>>>>>>> 'str' and 'int' objectsOn Mon, May 25, 2015 at 4:10 PM, Lahiru >>>>>>>>>>>> Sandaruwan < >>>>>>>>>>>> lahi...@wso2.com> wrote:Hi All,This thread is >>>>>>>>>>>> for discussion of the second release candidate of Apache Stratos >>>>>>>>>>>> 4.1.0. >>>>>>>>>>>> Please use this thread for discussion of issues uncovered in the >>>>>>>>>>>> RC, >>>>>>>>>>>> questions you may have about the RC, etc.RC release packs: >>>>>>>>>>>> https://dist.apache.org/repos/dist/dev/stratos/4.1.0-rc2/The >>>>>>>>>>>> tag to be voted upon: >>>>>>>>>>>> https://git-wip-us.apache.org/repos/asf?p=stratos.git;a=commit;h=c3122516b83039552606f3baaa55fbcf95511162Git >>>>>>>>>>>> tag (4.1.0-rc2) tree view: >>>>>>>>>>>> https://git-wip-us.apache.org/repos/asf?p=stratos.git;a=tree;h=d1c97b1b68a04b1b7f8811034e096f0c7a95e0e4;hb=c3122516b83039552606f3baaa55fbcf95511162Stratos >>>>>>>>>>>> KEYS file containing PGP keys we use to sign the release: >>>>>>>>>>>> https://dist.apache.org/repos/dist/dev/stratos/4.1.0-rc2/KEYSThanks.-- >>>>>>>>>>>> --Lahiru SandaruwanCommitter and PMC member, Apache Stratos,Senior >>>>>>>>>>>> Software >>>>>>>>>>>> Engineer,WSO2 Inc., >>>>>>>>>>>> http://wso2.comlean.enterprise.middlewarephone: >>>>>>>>>>>> +94773325954email: lahi...@wso2.com blog: >>>>>>>>>>>> http://lahiruwrites.blogspot.com/linked-in: >>>>>>>>>>>> http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146 -- >>>>>>>>>>>> Imesh GunaratneSenior Technical Lead, WSO2Committer & PMC Member, >>>>>>>>>>>> Apache >>>>>>>>>>>> Stratos -- --Lahiru SandaruwanCommitter and PMC member, Apache >>>>>>>>>>>> Stratos,Senior Software Engineer,WSO2 Inc., >>>>>>>>>>>> http://wso2.comlean.enterprise.middlewarephone: >>>>>>>>>>>> +94773325954email: lahi...@wso2.com blog: >>>>>>>>>>>> http://lahiruwrites.blogspot.com/linked-in: >>>>>>>>>>>> http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146-- >>>>>>>>>>>> Thanks and Regards,Isuru H. +94 716 358 048 >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> Apologies, this might be not the root cause. We need to see why >>>>>>>>>>> the AgentGitHandler.get_repo (tenant_id) call is not returning the >>>>>>>>>>> correct >>>>>>>>>>> repo object. >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Thanks and Regards, >>>>>>>>>>> >>>>>>>>>>> Isuru H. >>>>>>>>>>> +94 716 358 048* <http://wso2.com/>* >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> *Thanks and Regards,* >>>>>>>>>> Anuruddha Lanka Liyanarachchi >>>>>>>>>> Software Engineer - WSO2 >>>>>>>>>> Mobile : +94 (0) 712762611 >>>>>>>>>> Tel : +94 112 145 345 >>>>>>>>>> a <thili...@wso2.com>nurudd...@wso2.com >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> *Thanks and Regards,* >>>>>>>>> Anuruddha Lanka Liyanarachchi >>>>>>>>> Software Engineer - WSO2 >>>>>>>>> Mobile : +94 (0) 712762611 >>>>>>>>> Tel : +94 112 145 345 >>>>>>>>> a <thili...@wso2.com>nurudd...@wso2.com >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> *Thanks and Regards,* >>>>>>>> Anuruddha Lanka Liyanarachchi >>>>>>>> Software Engineer - WSO2 >>>>>>>> Mobile : +94 (0) 712762611 >>>>>>>> Tel : +94 112 145 345 >>>>>>>> a <thili...@wso2.com>nurudd...@wso2.com >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> Imesh Gunaratne >>>>>>> >>>>>>> Senior Technical Lead, WSO2 >>>>>>> Committer & PMC Member, Apache Stratos >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> *Thanks and Regards,* >>>>>> Anuruddha Lanka Liyanarachchi >>>>>> Software Engineer - WSO2 >>>>>> Mobile : +94 (0) 712762611 >>>>>> Tel : +94 112 145 345 >>>>>> a <thili...@wso2.com>nurudd...@wso2.com >>>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> -- >>>>> Lahiru Sandaruwan >>>>> Committer and PMC member, Apache Stratos, >>>>> Senior Software Engineer, >>>>> WSO2 Inc., http://wso2.com >>>>> lean.enterprise.middleware >>>>> >>>>> phone: +94773325954 >>>>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/ >>>>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146 >>>>> >>>>> >>>> >>>> >>>> -- >>>> -- >>>> Lahiru Sandaruwan >>>> Committer and PMC member, Apache Stratos, >>>> Senior Software Engineer, >>>> WSO2 Inc., http://wso2.com >>>> lean.enterprise.middleware >>>> >>>> phone: +94773325954 >>>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/ >>>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146 >>>> >>>> >>> >>> >>> -- >>> -- >>> Lahiru Sandaruwan >>> Committer and PMC member, Apache Stratos, >>> Senior Software Engineer, >>> WSO2 Inc., http://wso2.com >>> lean.enterprise.middleware >>> >>> phone: +94773325954 >>> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/ >>> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146 >>> >>> >> >> >> -- >> -- >> Lahiru Sandaruwan >> Committer and PMC member, Apache Stratos, >> Senior Software Engineer, >> WSO2 Inc., http://wso2.com >> lean.enterprise.middleware >> >> phone: +94773325954 >> email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/ >> linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146 >> >> > > > -- > *Thanks and Regards,* > Anuruddha Lanka Liyanarachchi > Software Engineer - WSO2 > Mobile : +94 (0) 712762611 > Tel : +94 112 145 345 > a <thili...@wso2.com>nurudd...@wso2.com > -- -- Lahiru Sandaruwan Committer and PMC member, Apache Stratos, Senior Software Engineer, WSO2 Inc., http://wso2.com lean.enterprise.middleware phone: +94773325954 email: lahi...@wso2.com blog: http://lahiruwrites.blogspot.com/ linked-in: http://lk.linkedin.com/pub/lahiru-sandaruwan/16/153/146