Ошибка семафора вошла в sib-сервлет mobicents
У нас есть приложение, написанное против SIP-сервлетов Mobicents, в настоящее время оно использует v2.1.547, но я также протестировал v3.1.633 с таким же отмеченным поведением.
Наше приложение работает как B2BUA, у нас есть входящий SIP-вызов, и у нас также есть исходящий SIP-вызов, помещаемый в MRF, который выполняет VXML. Эти два SIP-вызова связаны с одним SipApplicationSession - это модель параллелизма, которую мы настроили.
Сценарий, который воссоздает эти 100% времени, выглядит следующим образом:
- входящий звонок размещен в нашей заявке (звонок не ответил)
- исходящий звонок помещен в MRF
- зависание входящего вызова
- приложение пытается завершить SipSession, связанный с исходящим вызовом
Я вижу это в журнале:
2015-12-17 09: 53: 56,771 WARN [SipApplicationSessionImpl] (MSS-Executor-Thread-14) Не удалось получить семафор сеанса java.util.concurrent.Semaphore@55fcc0cb[Permits = 0] в течение 30 секунд. Мы разблокируем семафор, несмотря ни на что, потому что время транзакции истекает. ЭТО МОЖЕТ ТАКЖЕ ИМЕТЬ РИСК КОНТРОЛЬНОГО КОНТРОЛЯ. Приложение Session is5faf5a3a-6a83-4f23-a30a-57d3eff3281c;SipController
Я готов поверить, что наше приложение может вызывать такое поведение, но пока не понимаю, как. Я бы подумал, что приобретение / выпуск Семафоров был внутренним для реализации, поэтому он должен гарантировать, что что-то не приобретает Семафор и никогда не выпускает его?
Буду признателен за любые указания о том, как добраться до сути, так как я сказал, что это на 100% повторяется, поэтому получение логов и т. Д. Все возможно.
1 ответ
Трудно сказать, не видя никаких журналов или кода приложения о том, как вы осуществляете доступ и планируете отправлять сообщения. Но если вы используете один и тот же SipApplicationSession в асинхронном режиме, вы можете использовать наш специфичный для поставщика асинхронный API-интерфейс https://mobicents.ci.cloudbees.com/job/MobicentsSipServlets-Release/lastSuccessfulBuild/artifact/documentation/jsr289-extensions-apidocs/org/mobicents/javax/servlet/sip/SipSessionsUtilExt.html, который будет гарантировать, что доступ к SipapplicationSessionSessionSessionSessionSlication проблемы параллелизма.