RestComm / Restcomm-Connect

The Open Source Cloud Communications Platform
http://www.restcomm.com/
GNU Affero General Public License v3.0
242 stars 215 forks source link

PersistanceException in MRB #1593

Closed maria-farooq closed 7 years ago

maria-farooq commented 7 years ago

Problem: Exception comes when an unclean slave record exists in mrb table Solution: We should remove MRB table (restcomm_media_resource_broker_entity) since its part of initial design which later changed, double check if it is still needed otherwise remove it.

17:09:21,561 DEBUG [org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController] (RestComm-akka.actor.default-dispatcher-9) addNewSlaveRecord: conferenceSid: CFd81873559fdb4387b76920ae1b178fc3 localMsId: 2
17:09:21,570 DEBUG [org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity] (RestComm-akka.actor.default-dispatcher-8) ooo Using Connection [com.mysql.jdbc.JDBC4Connection@3efad452]
17:09:21,570 DEBUG [org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity] (RestComm-akka.actor.default-dispatcher-8) ==>  Preparing: INSERT INTO restcomm_media_resource_broker_entity (conference_sid, slave_ms_id, slave_ms_bridge_ep_id, slave_ms_cnf_ep_id, is_bridged_together) VALUES (?, ?, ?, ?, ?);
17:09:21,571 DEBUG [org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity] (RestComm-akka.actor.default-dispatcher-8) ==> Parameters: CFd81873559fdb4387b76920ae1b178fc3(String), 2(String), null, null, true(Boolean)
17:09:21,575 ERROR [org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController] (RestComm-akka.actor.default-dispatcher-9) org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
### The error may involve org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO       restcomm_media_resource_broker_entity        (conference_sid, slave_ms_id, slave_ms_bridge_ep_id, slave_ms_cnf_ep_id,        is_bridged_together)       VALUES        (?, ?, ?, ?,        ?);
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY': org.restcomm.connect.commons.fsm.TransitionFailedException: org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
### The error may involve org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO       restcomm_media_resource_broker_entity        (conference_sid, slave_ms_id, slave_ms_bridge_ep_id, slave_ms_cnf_ep_id,        is_bridged_together)       VALUES        (?, ?, ?, ?,        ?);
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
    at org.restcomm.connect.commons.fsm.FiniteStateMachine.transition(FiniteStateMachine.java:102) [restcomm-connect.commons-8.0.0.1076.jar:8.0.0.1076]
    at org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController.onMediaGroupStateChanged(ConferenceMediaResourceController.java:502) [telscale-restcomm-connect.mrb-8.0.0.1407.jar:]
    at org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController.onReceive(ConferenceMediaResourceController.java:311) [telscale-restcomm-connect.mrb-8.0.0.1407.jar:]
    at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:159) [akka-actor_2.10-2.1.2.jar:]
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:425) [akka-actor_2.10-2.1.2.jar:]
    at akka.actor.ActorCell.invoke(ActorCell.scala:386) [akka-actor_2.10-2.1.2.jar:]
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:230) [akka-actor_2.10-2.1.2.jar:]
    at akka.dispatch.Mailbox.run(Mailbox.scala:212) [akka-actor_2.10-2.1.2.jar:]
    at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:506) [akka-actor_2.10-2.1.2.jar:]
    at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:262) [scala-library-2.10.1.jar:]
    at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:975) [scala-library-2.10.1.jar:]
    at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1478) [scala-library-2.10.1.jar:]
    at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104) [scala-library-2.10.1.jar:]
Caused by: org.apache.ibatis.exceptions.PersistenceException:
### Error updating database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
### The error may involve org.mobicents.servlet.sip.restcomm.dao.MediaResourceBrokerDao.addMediaResourceBrokerEntity-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO       restcomm_media_resource_broker_entity        (conference_sid, slave_ms_id, slave_ms_bridge_ep_id, slave_ms_cnf_ep_id,        is_bridged_together)       VALUES        (?, ?, ?, ?,        ?);
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:23) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:150) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:137) [mybatis-3.2.2.jar:3.2.2]
    at org.restcomm.connect.dao.mybatis.MybatisMediaResourceBrokerDao.addMediaResourceBrokerEntity(MybatisMediaResourceBrokerDao.java:53) [restcomm-connect.dao-8.0.0.1076.jar:8.0.0.1076]
    at org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController.addNewSlaveRecord(ConferenceMediaResourceController.java:1147) [telscale-restcomm-connect.mrb-8.0.0.1407.jar:]
    at org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController.access$3400(ConferenceMediaResourceController.java:91) [telscale-restcomm-connect.mrb-8.0.0.1407.jar:]
    at org.restcomm.connect.telscale.mrb.ConferenceMediaResourceController$PreActive.execute(ConferenceMediaResourceController.java:950) [telscale-restcomm-connect.mrb-8.0.0.1407.jar:]
    at org.restcomm.connect.commons.fsm.FiniteStateMachine.transition(FiniteStateMachine.java:100) [restcomm-connect.commons-8.0.0.1076.jar:8.0.0.1076]
    ... 12 more
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'CFd81873559fdb4387b76920ae1b178fc3-2' for key 'PRIMARY'
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_80]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_80]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_80]
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526) [rt.jar:1.7.0_80]
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.Util.getInstance(Util.java:381) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1015) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3558) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2643) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077) [mysql-connector-java-5.1.9.jar:]
    at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1356) [mysql-connector-java-5.1.9.jar:]
    at sun.reflect.GeneratedMethodAccessor23.invoke(Unknown Source) [:1.7.0_80]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [rt.jar:1.7.0_80]
    at java.lang.reflect.Method.invoke(Method.java:606) [rt.jar:1.7.0_80]
    at org.apache.ibatis.logging.jdbc.PreparedStatementLogger.invoke(PreparedStatementLogger.java:55) [mybatis-3.2.2.jar:3.2.2]
    at com.sun.proxy.$Proxy61.execute(Unknown Source)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:41) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:66) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:45) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:100) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75) [mybatis-3.2.2.jar:3.2.2]
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:148) [mybatis-3.2.2.jar:3.2.2]
    ... 18 more
17:09:21,583 INFO  [org.restcomm.connect.interpreter.VoiceInterpreter] (RestComm-akka.actor.default-dispatcher-10)  ********** VoiceInterpreter's akka://RestComm/user/$p Current State: downloading rcml
maria-farooq commented 7 years ago

@deruelle @leftyb This table can not be removed for now. It has info of live slaves connected to this which is used in resource clean up. For example a master instance DOES NOT clean up master conference/ivr endpoint if there are active slaves mixing the media through it. However Here are 2 proposals !

  1. use CDR table (look for active participants on slave RMSs)
  2. On startup of MRB. cleanup local records of this table (infect this is the best way)
deruelle commented 7 years ago

@maria-farooq let's go with the best way then ;)

maria-farooq commented 7 years ago

ok @deruelle

Here is sample data from DB.

mysql> select * from restcomm_media_resource_broker_entity;
+------------------------------------+-------------+-----------------------+--------------------+---------------------+
| conference_sid                     | slave_ms_id | slave_ms_bridge_ep_id | slave_ms_cnf_ep_id | is_bridged_together |
+------------------------------------+-------------+-----------------------+--------------------+---------------------+
| CF03a1857672fa42288c1cdb596289fa06 | 3           | NULL                  | NULL               |                   1 |
| CF49a56d715e9b4877bd176b4bff03ac29 | 3           | NULL                  | NULL               |                   1 |
| CFd81873559fdb4387b76920ae1b178fc3 | 2           | NULL                  | NULL               |                   1 |
+------------------------------------+-------------+-----------------------+--------------------+---------------------+
maria-farooq commented 7 years ago

fixed inside #1898