Hi, With MySQL, however frequency of getting the exception is lower. If I restart Stratos at this point, the error does not exist.
On Mon, May 11, 2015 at 3:11 PM, Udara Liyanage <ud...@wso2.com> wrote: > Hi Isuru, > > Even with MySQL, similar issue seems to exist > > in started successfully > [2015-05-11 09:36:43,786] INFO > {org.apache.stratos.autoscaler.client.CloudControllerClient} - Trying to > spawn an instance via cloud controller: [cluster] > single-cartridge-app.my-as-manager.appserver-manager.domain [partition] > partition-1 [network-partition-id] network-partition-1 > [2015-05-11 09:37:43,396] ERROR > {org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO} - *Failed to > delete the resource with id 386. Lock wait timeout exceeded; try restarting > transaction* > java.sql.SQLException: Lock wait timeout exceeded; try restarting > transaction > at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1084) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4232) > at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4164) > at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2615) > at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2776) > at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2838) > at > com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2082) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2334) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2262) > at > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2246) > at > org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.deleteResource(JDBCResourceDAO.java:1555) > at > org.wso2.carbon.registry.core.jdbc.Repository.removeResource(Repository.java:615) > at > org.wso2.carbon.registry.core.jdbc.Repository.prepareUpdate(Repository.java:362) > at org.wso2.carbon.registry.core.jdbc.Repository.put(Repository.java:287) > at > org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.put(EmbeddedRegistry.java:709) > at > org.wso2.carbon.registry.core.caching.CacheBackedRegistry.put(CacheBackedRegistry.java:465) > at > org.wso2.carbon.registry.core.session.UserRegistry.put(UserRegistry.java:657) > at > org.apache.stratos.cloud.controller.registry.RegistryManager.persist(RegistryManager.java:73) > at > org.apache.stratos.cloud.controller.util.CloudControllerUtil.persistTopology(CloudControllerUtil.java:276) > at > org.apache.stratos.cloud.controller.messaging.topology.TopologyManager.updateTopology(TopologyManager.java:103) > at > org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder.handleMemberCreatedEvent(TopologyBuilder.java:434) > at > org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl.startInstance(CloudControllerServiceImpl.java:486) > 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:606) > at > org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) > at > org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) > at > org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) > at > org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) > at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) > at > org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:172) > at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) > at > org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:231) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:755) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) > at > org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) > at > org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) > at > org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) > at > org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > at > org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) > at > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) > at > org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:178) > at > org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47) > at > org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:56) > at > org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) > at > org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:141) > at > org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:156) > at > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) > at > org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:52) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) > at > org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) > at > org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) > at > org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1653) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) > at java.lang.Thread.run(Thread.java:744) > [2015-05-11 09:37:43,397] ERROR > {org.apache.stratos.cloud.controller.registry.RegistryManager} - Failed to > persist resource in registry: /cloud.controller/topology > org.wso2.carbon.registry.core.exceptions.RegistryException: Failed to > delete the resource with id 386. Lock wait timeout exceeded; try restarting > transaction > at > org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.deleteResource(JDBCResourceDAO.java:1563) > at > org.wso2.carbon.registry.core.jdbc.Repository.removeResource(Repository.java:615) > at > org.wso2.carbon.registry.core.jdbc.Repository.prepareUpdate(Repository.java:362) > at org.wso2.carbon.registry.core.jdbc.Repository.put(Repository.java:287) > at > org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.put(EmbeddedRegistry.java:709) > at > org.wso2.carbon.registry.core.caching.CacheBackedRegistry.put(CacheBackedRegistry.java:465) > at > org.wso2.carbon.registry.core.session.UserRegistry.put(UserRegistry.java:657) > at > org.apache.stratos.cloud.controller.registry.RegistryManager.persist(RegistryManager.java:73) > at > org.apache.stratos.cloud.controller.util.CloudControllerUtil.persistTopology(CloudControllerUtil.java:276) > at > org.apache.stratos.cloud.controller.messaging.topology.TopologyManager.updateTopology(TopologyManager.java:103) > at > org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder.handleMemberCreatedEvent(TopologyBuilder.java:434) > at > org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceImpl.startInstance(CloudControllerServiceImpl.java:486) > 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:606) > at > org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) > at org.apache.axis2.rpc.receivers.RPCMessageRecei > > On Fri, May 8, 2015 at 9:48 AM, Udara Liyanage <ud...@wso2.com> wrote: > >> Hi, >> >> This seems to occur when metadata service too save properties in >> registry. This occurs when multiple clients(cartridge agent) call metadata >> service to publish property values. I did not see this error when only one >> client talks to metadata service. >> I guess h2 can not handle this. I will try with MySQL as Isuruh mentioned >> since this is blocking for me now. >> >> On Thu, May 7, 2015 at 5:12 PM, Isuru Haththotuwa <isu...@apache.org> >> wrote: >> >>> This seems to be an issue with H2. There are many occasions that this >>> error has been reported when using an H2 DB. Can you try: >>> >>> 1. replacing the currently used DB with a new H2 (from a fresh pack) >>> 2. use a MySQL DB >>> >>> and see if the error is reproducible? >>> >>> On Thu, May 7, 2015 at 4:42 PM, Imesh Gunaratne <im...@apache.org> >>> wrote: >>> >>>> It looks like a database table lock is not being released until it >>>> reaches the timeout: >>>> >>>> Timeout trying to lock table "REG_RESOURCE"; SQL statement: >>>> SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND REG_NAME=? >>>> AND REG_TENANT_ID=? [50200-140] >>>> >>>> The concern is we do not handle any database locks in Stratos code, >>>> they are handled by the Carbon Registry. Shall we try to narrow down the >>>> problem by running it again without using the Metadata API? >>>> >>>> Thanks >>>> >>>> >>>> On Thu, May 7, 2015 at 12:37 PM, Udara Liyanage <ud...@wso2.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> I frequently get this exception when running Stratos for longtime (10+ >>>>> minutes). Please note that most failures occurs when metadata service also >>>>> save properties in the registry (not all the time, this occurs when >>>>> metadata is not persisting too). >>>>> >>>>> >>>>> 2015-05-07 07:03:11,725] ERROR >>>>> {org.apache.stratos.cloud.controller.registry.RegistryManager} - * Failed >>>>> to persist resource in registry: /cloud.controller/topology* >>>>> org.wso2.carbon.registry.core.exceptions.RegistryException: Failed to >>>>> check the existence of the resource >>>>> /_system/governance/cloud.controller/topology. Timeout trying to lock >>>>> table >>>>> "REG_RESOURCE"; SQL statement: >>>>> SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND >>>>> REG_NAME=? AND REG_TENANT_ID=? [50200-140] >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.getVersion(JDBCResourceDAO.java:206) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:147) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:156) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.Repository.resourceExists(Repository.java:134) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.put(EmbeddedRegistry.java:688) >>>>> at >>>>> org.wso2.carbon.registry.core.caching.CacheBackedRegistry.put(CacheBackedRegistry.java:465) >>>>> at >>>>> org.wso2.carbon.registry.core.session.UserRegistry.put(UserRegistry.java:657) >>>>> at >>>>> org.apache.stratos.cloud.controller.registry.RegistryManager.persist(RegistryManager.java:73) >>>>> at >>>>> org.apache.stratos.cloud.controller.util.CloudControllerUtil.persistTopology(CloudControllerUtil.java:276) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.topology.TopologyManager.updateTopology(TopologyManager.java:103) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder.handleMemberStarted(TopologyBuilder.java:555) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.receiver.instance.status.InstanceStatusTopicReceiver$2.onEvent(InstanceStatusTopicReceiver.java:75) >>>>> at >>>>> org.apache.stratos.messaging.listener.EventListener.update(EventListener.java:42) >>>>> at java.util.Observable.notifyObservers(Observable.java:159) >>>>> at >>>>> org.apache.stratos.messaging.event.EventObservable.notifyEventListeners(EventObservable.java:51) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.instance.status.InstanceStatusMemberStartedMessageProcessor.process(InstanceStatusMemberStartedMessageProcessor.java:49) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.instance.status.InstanceStatusMemberActivatedMessageProcessor.process(InstanceStatusMemberActivatedMessageProcessor.java:53) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.MessageProcessorChain.process(MessageProcessorChain.java:61) >>>>> at >>>>> org.apache.stratos.messaging.message.receiver.instance.status.InstanceStatusEventMessageDelegator.run(InstanceStatusEventMessageDelegator.java:71) >>>>> at >>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) >>>>> at java.util.concurrent.FutureTask.run(FutureTask.java:262) >>>>> at >>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>>> at >>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>>> at java.lang.Thread.run(Thread.java:744) >>>>> Caused by: org.h2.jdbc.JdbcSQLException: Timeout trying to lock table >>>>> "REG_RESOURCE"; SQL statement: >>>>> SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND >>>>> REG_NAME=? AND REG_TENANT_ID=? [50200-140] >>>>> at org.h2.message.DbException.getJdbcSQLException(DbException.java:327) >>>>> at org.h2.message.DbException.get(DbException.java:167) >>>>> at org.h2.message.DbException.get(DbException.java:144) >>>>> at org.h2.table.RegularTable.doLock(RegularTable.java:466) >>>>> at org.h2.table.RegularTable.lock(RegularTable.java:404) >>>>> at org.h2.table.TableFilter.lock(TableFilter.java:139) >>>>> at org.h2.command.dml.Select.queryWithoutCache(Select.java:554) >>>>> at org.h2.command.dml.Query.query(Query.java:241) >>>>> at org.h2.command.CommandContainer.query(CommandContainer.java:80) >>>>> at org.h2.command.Command.executeQuery(Command.java:132) >>>>> at >>>>> org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:96) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.getVersion(JDBCResourceDAO.java:197) >>>>> ... 23 more >>>>> [2015-05-07 07:03:11,726] FATAL >>>>> {org.apache.stratos.cloud.controller.util.CloudControllerUtil} - Failed >>>>> to >>>>> persist the Topology in registry. >>>>> org.wso2.carbon.registry.core.exceptions.RegistryException: Failed to >>>>> persist resource in registry: /cloud.controller/topology >>>>> at >>>>> org.apache.stratos.cloud.controller.registry.RegistryManager.persist(RegistryManager.java:85) >>>>> at >>>>> org.apache.stratos.cloud.controller.util.CloudControllerUtil.persistTopology(CloudControllerUtil.java:276) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.topology.TopologyManager.updateTopology(TopologyManager.java:103) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder.handleMemberStarted(TopologyBuilder.java:555) >>>>> at >>>>> org.apache.stratos.cloud.controller.messaging.receiver.instance.status.InstanceStatusTopicReceiver$2.onEvent(InstanceStatusTopicReceiver.java:75) >>>>> at >>>>> org.apache.stratos.messaging.listener.EventListener.update(EventListener.java:42) >>>>> at java.util.Observable.notifyObservers(Observable.java:159) >>>>> at >>>>> org.apache.stratos.messaging.event.EventObservable.notifyEventListeners(EventObservable.java:51) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.instance.status.InstanceStatusMemberStartedMessageProcessor.process(InstanceStatusMemberStartedMessageProcessor.java:49) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.instance.status.InstanceStatusMemberActivatedMessageProcessor.process(InstanceStatusMemberActivatedMessageProcessor.java:53) >>>>> at >>>>> org.apache.stratos.messaging.message.processor.MessageProcessorChain.process(MessageProcessorChain.java:61) >>>>> at >>>>> org.apache.stratos.messaging.message.receiver.instance.status.InstanceStatusEventMessageDelegator.run(InstanceStatusEventMessageDelegator.java:71) >>>>> at >>>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) >>>>> at java.util.concurrent.FutureTask.run(FutureTask.java:262) >>>>> at >>>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) >>>>> at >>>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) >>>>> at java.lang.Thread.run(Thread.java:744) >>>>> Caused by: org.wso2.carbon.registry.core.exceptions.RegistryException: >>>>> Failed to check the existence of the resource >>>>> /_system/governance/cloud.controller/topology. Timeout trying to lock >>>>> table >>>>> "REG_RESOURCE"; SQL statement: >>>>> SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND >>>>> REG_NAME=? AND REG_TENANT_ID=? [50200-140] >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.getVersion(JDBCResourceDAO.java:206) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:147) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.resourceExists(JDBCResourceDAO.java:156) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.Repository.resourceExists(Repository.java:134) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.EmbeddedRegistry.put(EmbeddedRegistry.java:688) >>>>> at >>>>> org.wso2.carbon.registry.core.caching.CacheBackedRegistry.put(CacheBackedRegistry.java:465) >>>>> at >>>>> org.wso2.carbon.registry.core.session.UserRegistry.put(UserRegistry.java:657) >>>>> at >>>>> org.apache.stratos.cloud.controller.registry.RegistryManager.persist(RegistryManager.java:73) >>>>> ... 16 more >>>>> Caused by: org.h2.jdbc.JdbcSQLException: Timeout trying to lock table >>>>> "REG_RESOURCE"; SQL statement: >>>>> SELECT REG_VERSION FROM REG_RESOURCE WHERE REG_PATH_ID=? AND >>>>> REG_NAME=? AND REG_TENANT_ID=? [50200-140] >>>>> at org.h2.message.DbException.getJdbcSQLException(DbException.java:327) >>>>> at org.h2.message.DbException.get(DbException.java:167) >>>>> at org.h2.message.DbException.get(DbException.java:144) >>>>> at org.h2.table.RegularTable.doLock(RegularTable.java:466) >>>>> at org.h2.table.RegularTable.lock(RegularTable.java:404) >>>>> at org.h2.table.TableFilter.lock(TableFilter.java:139) >>>>> at org.h2.command.dml.Select.queryWithoutCache(Select.java:554) >>>>> at org.h2.command.dml.Query.query(Query.java:241) >>>>> at org.h2.command.CommandContainer.query(CommandContainer.java:80) >>>>> at org.h2.command.Command.executeQuery(Command.java:132) >>>>> at >>>>> org.h2.jdbc.JdbcPreparedStatement.executeQuery(JdbcPreparedStatement.java:96) >>>>> at >>>>> org.wso2.carbon.registry.core.jdbc.dao.JDBCResourceDAO.getVersion(JDBCResourceDAO.java:197) >>>>> ... 23 more >>>>> >>>>> >>>>> -- >>>>> >>>>> Udara Liyanage >>>>> Software Engineer >>>>> WSO2, Inc.: http://wso2.com >>>>> lean. enterprise. middleware >>>>> >>>>> web: http://udaraliyanage.wordpress.com >>>>> phone: +94 71 443 6897 >>>>> >>>> >>>> >>>> >>>> -- >>>> Imesh Gunaratne >>>> >>>> Senior Technical Lead, WSO2 >>>> Committer & PMC Member, Apache Stratos >>>> >>>> -- >>>> Thanks and Regards, >>>> >>>> Isuru H. >>>> +94 716 358 048* <http://wso2.com/>* >>>> >>>> >>>> * <http://wso2.com/>* >>>> >>>> >>>> * <http://wso2.com/>* >>>> >>>> >>>> >> >> >> -- >> >> Udara Liyanage >> Software Engineer >> WSO2, Inc.: http://wso2.com >> lean. enterprise. middleware >> >> web: http://udaraliyanage.wordpress.com >> phone: +94 71 443 6897 >> > > > > -- > > Udara Liyanage > Software Engineer > WSO2, Inc.: http://wso2.com > lean. enterprise. middleware > > web: http://udaraliyanage.wordpress.com > phone: +94 71 443 6897 > -- Udara Liyanage Software Engineer WSO2, Inc.: http://wso2.com lean. enterprise. middleware web: http://udaraliyanage.wordpress.com phone: +94 71 443 6897