​Hi All,

This error has raised since two threads trying to ​update the DB with
following requirements;

Thread #1
waiting to lock PUBLIC.*DM_ENROLMENT_OP_MAPPING* while
locking PUBLIC.*DM_OPERATION* (exclusive), PUBLIC.*DM_COMMAND_OPERATION*
(exclusive).

Thread #2
waiting to lock PUBLIC.DM_OPERATION while
locking PUBLIC.*DM_ENROLMENT_OP_MAPPING* (exclusive), PUBLIC.
*DM_DEVICE_OPERATION_RESPONSE* (exclusive).";

I noticed we are already using ";LOCK_TIMEOUT=60000" (60sec) H2 DB
parameter which would allow sometime to continue the thread and do the DB
update.

Hence, this might happen when you are holding the debug pointer in
updateOperation() method or in a state where device responses burst occurs.
However the latter case is very rare on other DBs(other than embedded H2).
We can even minimize the chance for a such issue implementing a LOCK for
calling updateOperation method(might affect the performance). WDYT?

Best Regards,
~Rasika

On Tue, Jan 23, 2018 at 12:39 PM, Charitha Goonetilleke <charit...@wso2.com>
wrote:

> Hi All,
>
> I have encountered following exception intermittently on IoTS Update 11,
> when testing with Android device.
>
> [2018-01-23 12:19:51,077] [IoT-Core] ERROR - {org.wso2.carbon.mdm.services.
> android.services.impl.DeviceManagementServiceImpl} Issue in retrieving
> operation management service instance
> org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException:
> Error occurred while updating the operation: 90 status:COMPLETED
> at org.wso2.carbon.device.mgt.core.operation.mgt.OperationManag
> erImpl.updateOperation(OperationManagerImpl.java:551)
> at org.wso2.carbon.device.mgt.core.service.DeviceManagementProv
> iderServiceImpl.updateOperation(DeviceManagementProviderServiceImpl.java:
> 1426)
> at org.wso2.carbon.mdm.services.android.util.AndroidDeviceUtils
> .updateOperation(AndroidDeviceUtils.java:211)
> at org.wso2.carbon.mdm.services.android.services.impl.DeviceMan
> agementServiceImpl.updateOperations(DeviceManagementServiceImpl.java:184)
> at org.wso2.carbon.mdm.services.android.services.impl.DeviceMan
> agementServiceImpl.getPendingOperations(DeviceManagementServ
> iceImpl.java:139)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAcce
> ssorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMe
> thodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at org.apache.cxf.service.invoker.AbstractInvoker.performInvoca
> tion(AbstractInvoker.java:188)
> at org.apache.cxf.service.invoker.AbstractInvoker.invoke(
> AbstractInvoker.java:104)
> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:204)
> at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101)
> at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(
> ServiceInvokerInterceptor.java:58)
> at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleM
> essage(ServiceInvokerInterceptor.java:94)
> at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(Phase
> InterceptorChain.java:272)
> at org.apache.cxf.transport.ChainInitiationObserver.onMessage(C
> hainInitiationObserver.java:121)
> at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke
> (AbstractHTTPDestination.java:249)
> at org.apache.cxf.transport.servlet.ServletController.invokeDes
> tination(ServletController.java:248)
> at org.apache.cxf.transport.servlet.ServletController.invoke(
> ServletController.java:222)
> at org.apache.cxf.transport.servlet.ServletController.invoke(
> ServletController.java:153)
> at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(
> CXFNonSpringServlet.java:171)
> at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleR
> equest(AbstractHTTPServlet.java:289)
> at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPut(
> AbstractHTTPServlet.java:226)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:653)
> at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service
> (AbstractHTTPServlet.java:265)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
> lter(ApplicationFilterChain.java:303)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
> licationFilterChain.java:208)
> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
> lter(ApplicationFilterChain.java:241)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
> licationFilterChain.java:208)
> at org.wso2.carbon.mdm.services.android.util.ApiOriginFilter.do
> Filter(ApiOriginFilter.java:33)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFi
> lter(ApplicationFilterChain.java:241)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(App
> licationFilterChain.java:208)
> at org.apache.catalina.core.StandardWrapperValve.invoke(Standar
> dWrapperValve.java:218)
> at org.apache.catalina.core.StandardContextValve.invoke(Standar
> dContextValve.java:110)
> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(A
> uthenticatorBase.java:506)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHo
> stValve.java:169)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorRepo
> rtValve.java:103)
> at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInv
> ocation(CompositeValve.java:99)
> at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke
> (CarbonTomcatValve.java:47)
> at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(Tena
> ntLazyLoaderValve.java:57)
> at org.wso2.carbon.webapp.authenticator.framework.WebappAuthent
> icationValve.processRequest(WebappAuthenticationValve.java:151)
> at org.wso2.carbon.webapp.authenticator.framework.WebappAuthent
> icationValve.invoke(WebappAuthenticationValve.java:69)
> at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invok
> eValves(TomcatValveContainer.java:47)
> at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(Comp
> ositeValve.java:62)
> at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetection
> Valve.invoke(CarbonStuckThreadDetectionValve.java:159)
> at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogVa
> lve.java:962)
> at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.
> invoke(CarbonContextCreatorValve.java:57)
> at org.apache.catalina.core.StandardEngineValve.invoke(Standard
> EngineValve.java:116)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAd
> apter.java:445)
> at org.apache.coyote.http11.AbstractHttp11Processor.process(Abs
> tractHttp11Processor.java:1115)
> at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler
> .process(AbstractProtocol.java:637)
> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun
> (NioEndpoint.java:1770)
> at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(
> NioEndpoint.java:1729)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
> Executor.java:1142)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
> lExecutor.java:617)
> at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.
> run(TaskThread.java:61)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: 
> org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException:
> Error occurred while inserting operation response
> at org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.Gener
> icOperationDAOImpl.addOperationResponse(GenericOperationDAOImpl.java:213)
> at org.wso2.carbon.device.mgt.core.operation.mgt.OperationManag
> erImpl.updateOperation(OperationManagerImpl.java:544)
> ... 58 more
> Caused by: org.h2.jdbc.JdbcSQLException: Deadlock detected. The current
> transaction was rolled back. Details: "
> Session #49 (user: WSO2CARBON) on thread pool-54-thread-1 is waiting to
> lock PUBLIC.DM_ENROLMENT_OP_MAPPING while locking PUBLIC.DM_OPERATION
> (exclusive), PUBLIC.DM_COMMAND_OPERATION (exclusive).
> Session #59 (user: WSO2CARBON) on thread http-nio-9443-exec-27 is waiting
> to lock PUBLIC.DM_OPERATION while locking PUBLIC.DM_ENROLMENT_OP_MAPPING
> (exclusive), PUBLIC.DM_DEVICE_OPERATION_RESPONSE (exclusive)."; SQL
> statement:
> INSERT INTO DM_DEVICE_OPERATION_RESPONSE(OPERATION_ID, ENROLMENT_ID,
> EN_OP_MAP_ID, OPERATION_RESPONSE, RECEIVED_TIMESTAMP) VALUES(?, ?, ?, ?, ?)
> [40001-175]
> at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
> at org.h2.message.DbException.get(DbException.java:172)
> at org.h2.message.DbException.get(DbException.java:149)
> at org.h2.table.RegularTable.doLock(RegularTable.java:504)
> at org.h2.table.RegularTable.lock(RegularTable.java:450)
> at org.h2.constraint.ConstraintReferential.existsRow(Constraint
> Referential.java:375)
> at org.h2.constraint.ConstraintReferential.checkRowOwnTable(Con
> straintReferential.java:367)
> at org.h2.constraint.ConstraintReferential.checkRow(ConstraintR
> eferential.java:310)
> at org.h2.table.Table.fireConstraints(Table.java:894)
> at org.h2.table.Table.fireAfterRow(Table.java:911)
> at org.h2.command.dml.Insert.insertRows(Insert.java:162)
> at org.h2.command.dml.Insert.update(Insert.java:115)
> at org.h2.command.CommandContainer.update(CommandContainer.java:79)
> at org.h2.command.Command.executeUpdate(Command.java:253)
> at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal(Jdbc
> PreparedStatement.java:154)
> at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(JdbcPrepared
> Statement.java:140)
> at org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.Gener
> icOperationDAOImpl.addOperationResponse(GenericOperationDAOImpl.java:211)
> ... 59 more
>
>
> Thanks & regards,
> /charithag
> --
> *Charitha Goonetilleke*
> Senior Software Engineer
> WSO2 Inc.; http://wso2.com
> lean.enterprise.middleware
>
> mobile: +94 77 751 3669 <%2B94777513669>
> Twitter:@CharithaWs <https://twitter.com/CharithaWs>, fb: charithag
> <https://www.facebook.com/charithag>, linkedin: charithag
> <http://www.linkedin.com/in/charithag>
>
> <http://wso2.com/signature>
>
> --
> You received this message because you are subscribed to the Google Groups
> "WSO2 IoT Team Group" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to iot-group+unsubscr...@wso2.com.
> For more options, visit https://groups.google.com/a/wso2.com/d/optout.
>



-- 
With Regards,

*Rasika Perera*
Senior Software Engineer
LinkedIn: http://lk.linkedin.com/in/rasika90

<http://wso2.com/signature>

WSO2 Inc. www.wso2.com
lean.enterprise.middleware
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to