[BUG-9926] Ignition Voice Notification Module: Address already in use

Hello,

I have a clean Ignition 8.1.40 install in a brand new Windows Server virtual machine. In another server, I have an Ignition 8.1.31 instance under docker.

In the docker instance, I can perform VOIP calls with AWS Chime without any issue. However, in the new server, with the exact same VOIP Voice Notification Profile, I get the following error:

Error initializing user agent. Voice notification system will not be available.
Address already in use: bind

VOIP registration is performed with no issue at all.

Is this an ignition bug? I tested changing the RTP Port from 8000 to others, but it makes no difference.

This is the extended error message under CallManager:

java.net.BindException: Address already in use: bind
at java.base/sun.nio.ch.Net.bind0(Native Method)
at java.base/sun.nio.ch.Net.bind(Unknown Source)
at java.base/sun.nio.ch.DatagramChannelImpl.bindInternal(Unknown Source)
at java.base/sun.nio.ch.DatagramChannelImpl.bind(Unknown Source)
at java.base/sun.nio.ch.DatagramSocketAdaptor.bind(Unknown Source)
at java.base/java.net.DatagramSocket.createDelegate(Unknown Source)
at java.base/java.net.DatagramSocket.(Unknown Source)
at java.base/java.net.DatagramSocket.(Unknown Source)
at net.sourceforge.peers.sip.transport.TransportManager.createMessageReceiver(TransportManager.java:349)
at net.sourceforge.peers.sip.transport.TransportManager.createServerTransport(TransportManager.java:168)
at net.sourceforge.peers.sip.core.useragent.UAS.(UAS.java:72)
at net.sourceforge.peers.sip.core.useragent.UserAgent.(UserAgent.java:135)
at com.inductiveautomation.alarming.notification.sip.call.CallManager.(CallManager.java:65)
at com.inductiveautomation.alarming.notification.sip.profile.SipNotificationProfile.startupInternal(SipNotificationProfile.java:141)
at com.inductiveautomation.alarming.notification.sip.profile.SipNotificationProfile.onStartup(SipNotificationProfile.java:165)
at com.inductiveautomation.ignition.alarming.notification.AlarmNotificationManagerImpl.loadProfile(AlarmNotificationManagerImpl.java:140)
at com.inductiveautomation.ignition.alarming.notification.AlarmNotificationManagerImpl$1.recordUpdated(AlarmNotificationManagerImpl.java:88)
at com.inductiveautomation.ignition.alarming.notification.AlarmNotificationManagerImpl$1.recordUpdated(AlarmNotificationManagerImpl.java:84)
at com.inductiveautomation.ignition.gateway.localdb.PersistenceInterfaceImpl.notifyRecordUpdated(PersistenceInterfaceImpl.java:177)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl.doNotifyRecordUpdated(RedundantPersistenceInterfaceImpl.java:111)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateListener.recordUpdated(RedundantPersistenceInterfaceImpl.java:407)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateMessage.notify(RedundantPersistenceInterfaceImpl.java:457)
at com.inductiveautomation.ignition.gateway.redundancy.RedundantPersistenceInterfaceImpl$RecordUpdateListener.receiveCall(RedundantPersistenceInterfaceImpl.java:390)
at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:1042)
at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1110)
at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:550)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

Note that AWS Chime testing was performed first on the new server and then on the old server. Following the official Ignition AWS Chime documentation.

Thanks!!!!

There's also a SIP port that has to be unique, IIRC.

Out of curiosity, are there any other Voice Notification profiles setup on the "new server"? And if so, are they enabled?

This issue is under investigation, and we are working to resolve it.

Hello,

With the hint of @pturmel, we managed to solve it by changing the SIP Port from the default 5060 to 5061. For some reason, this (5060) port seems to be busy in this Ignition version.

Answering you question, we do not have any other profile configured.

Thanks

For anyone following along, the issue that is occurring is based on a change made in 8.1.40; Independent gateways are attempting to initialize the VOIP connection twice on startup. While what was suggested will work temporarily, it won't work long term and the issue will come back the next time the Gateway is restarted.

The only "permanent" work around until we get a fix is to change Independent Gateways to be Master gateways on the Config > Redundancy screen within Ignition.

This issue has been escalated internally for fix in the next release. We apologize for any issues this is causing.

Garth

3 Likes

Very interesting, thank you.

It certainly feels good to find a bug, hehe. I think I found another one this afternoon related to another topic, I will report that on Monday.

The 8.1.40 release has been pulled because of this issue. See the following thread for more information:

https://forum.inductiveautomation.com/t/8-1-40-pulled-8-1-41-emergency-release

3 Likes