Hi Charitha,

When an operation response get stored DM_ENROLMENT_OP_MAPPING table gets an
"update" while DM_DEVICE_OPERATION_RESPONSE gets an "insert" from the
response data. AFAIK when an update happens it will lock the table,
depending on the transactions handling [1 - Transaction Isolation] of H2
database.  And if there is a response burst, this error could happen. I
think H2 database may not be able to handle the load.

[1] http://www.h2database.com/html/advanced.html


Thanks
Geeth


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.OperationManagerImpl.
> updateOperation(OperationManagerImpl.java:551)
> at org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServic
> eImpl.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.
> DeviceManagementServiceImpl.updateOperations(DeviceManagementServiceImpl.
> java:184)
> at org.wso2.carbon.mdm.services.android.services.impl.
> DeviceManagementServiceImpl.getPendingOperations(
> DeviceManagementServiceImpl.java:139)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:62)
> at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:498)
> at org.apache.cxf.service.invoker.AbstractInvoker.performInvocation(
> 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.handleMessage(
> ServiceInvokerInterceptor.java:94)
> at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(
> PhaseInterceptorChain.java:272)
> at org.apache.cxf.transport.ChainInitiationObserver.onMessage(
> ChainInitiationObserver.java:121)
> at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(
> AbstractHTTPDestination.java:249)
> at org.apache.cxf.transport.servlet.ServletController.invokeDestination(
> 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.handleRequest(
> 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.internalDoFilter(
> ApplicationFilterChain.java:303)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
> at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
> at org.wso2.carbon.mdm.services.android.util.ApiOriginFilter.
> doFilter(ApiOriginFilter.java:33)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(
> ApplicationFilterChain.java:241)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(
> ApplicationFilterChain.java:208)
> at org.apache.catalina.core.StandardWrapperValve.invoke(
> StandardWrapperValve.java:218)
> at org.apache.catalina.core.StandardContextValve.invoke(
> StandardContextValve.java:110)
> at org.apache.catalina.authenticator.AuthenticatorBase.invoke(
> AuthenticatorBase.java:506)
> at org.apache.catalina.core.StandardHostValve.invoke(
> StandardHostValve.java:169)
> at org.apache.catalina.valves.ErrorReportValve.invoke(
> ErrorReportValve.java:103)
> at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(
> CompositeValve.java:99)
> at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.
> invoke(CarbonTomcatValve.java:47)
> at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(
> TenantLazyLoaderValve.java:57)
> at org.wso2.carbon.webapp.authenticator.framework.
> WebappAuthenticationValve.processRequest(WebappAuthenticationValve.
> java:151)
> at org.wso2.carbon.webapp.authenticator.framework.
> WebappAuthenticationValve.invoke(WebappAuthenticationValve.java:69)
> at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(
> TomcatValveContainer.java:47)
> at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(
> CompositeValve.java:62)
> at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValv
> e.invoke(CarbonStuckThreadDetectionValve.java:159)
> at org.apache.catalina.valves.AccessLogValve.invoke(
> AccessLogValve.java:962)
> at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(
> CarbonContextCreatorValve.java:57)
> at org.apache.catalina.core.StandardEngineValve.invoke(
> StandardEngineValve.java:116)
> at org.apache.catalina.connector.CoyoteAdapter.service(
> CoyoteAdapter.java:445)
> at org.apache.coyote.http11.AbstractHttp11Processor.process(
> AbstractHttp11Processor.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(
> ThreadPoolExecutor.java:1142)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(
> ThreadPoolExecutor.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.
> GenericOperationDAOImpl.addOperationResponse(GenericOperationDAOImpl.java:
> 213)
> at org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl.
> 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(
> ConstraintReferential.java:375)
> at org.h2.constraint.ConstraintReferential.checkRowOwnTable(
> ConstraintReferential.java:367)
> at org.h2.constraint.ConstraintReferential.checkRow(
> ConstraintReferential.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(
> JdbcPreparedStatement.java:154)
> at org.h2.jdbc.JdbcPreparedStatement.executeUpdate(
> JdbcPreparedStatement.java:140)
> at org.wso2.carbon.device.mgt.core.operation.mgt.dao.impl.
> GenericOperationDAOImpl.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>
>



-- 
*Geeth Munasinghe*
*WSO2, Inc. http://wso2.com <http://wso2.com/> *
*lean.enterprise.middleware.*

email: ge...@wso2.com
phone:(+94) 777911226

<http://wso2.com/signature>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to