Status: New
Owner: ----
Labels: Type-Defect Priority-Medium

New issue 70 by [email protected]: Occasional 'Statistics already defined' during stack startup
https://code.google.com/p/jdiameter/issues/detail?id=70

What steps will reproduce the problem?
1.Create a diameter client
2.Start it on a machine with a lot of cores
3.Start will fail occasionally

What is the expected output? What do you see instead?
Diameter stack should start. Instead, follow exception is thrown:
org.jdiameter.api.InternalException: java.lang.IllegalArgumentException: Statistic already defined: Statistic{ records=[0, 0.0] }
        at 
org.jdiameter.client.impl.controller.PeerImpl.connect(PeerImpl.java:457)
at org.jdiameter.client.impl.controller.PeerTableImpl.start(PeerTableImpl.java:275)
        at 
org.jdiameter.client.impl.StackImpl.startPeerManager(StackImpl.java:246)
        at org.jdiameter.client.impl.StackImpl.start(StackImpl.java:221)
        at ..............................
Caused by: java.lang.IllegalArgumentException: Statistic already defined: Statistic{ records=[0, 0.0] } at org.jdiameter.common.impl.statistic.StatisticManagerImpl.newStatistic(StatisticManagerImpl.java:130) at org.jdiameter.client.impl.fsm.PeerFSMImpl.runQueueProcessing(PeerFSMImpl.java:177) at org.jdiameter.client.impl.fsm.PeerFSMImpl.handleEvent(PeerFSMImpl.java:294)
        at 
org.jdiameter.client.impl.controller.PeerImpl.connect(PeerImpl.java:454)
        ... 42 more

What version of the product are you using? On what operating system?
1.5.10.0, but the same problem exists in the latest source as well

Please provide any additional information below.
Root cause is the check for numberOfThreadsRunning in PeerFSMImpl. There is a lock to prevent concurrent access to the numberOfThreadsRunning, but the count is increased ouside of this lock (by another thread). So if an event happens (eg START event) before the numberOfThreadsRunning has been increased, the runQueueuProcessing is executed twice leading to the above error.

This can be seen in the logs as well. The 'Starting FSM Thread' messages are printed first, but at that point numberOfThreadsRunning is not increased yet. That only happens when 'FSM threads are running' messages are shown (after the exception occured)

[main] DEBUG org.jdiameter.client.impl.controller.PeerTableImpl - Initializing Peer Table. [main] DEBUG org.jdiameter.client.impl.controller.PeerTableImpl - Populating peerTable from configuration [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Maximum FSM Queue size is [10000] [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Initializing QueueStat @ Thread[main] [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Finished Initializing QueueStat @ Thread[main] [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting FSM Thread 1 of 3 [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting FSM Thread 2 of 3 [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting FSM Thread 3 of 3 [main] DEBUG org.jdiameter.client.impl.transport.tcp.TCPTransportClient - Destination address is set to [127.0.0.1] : [3868] [main] DEBUG org.jdiameter.client.impl.transport.tcp.TCPTransportClient - Origin address is set to [0.0.0.0] : [0] [main] DEBUG org.jdiameter.client.impl.controller.PeerTableImpl - Appended peer [CPeer{Uri=aaa://127.0.0.1:3868; State=DOWN; Con=org.jdiameter.client.impl.transport.tcp.TCPClientConnection@11e70f62}] to peer table [main] INFO org.jdiameter.client.impl.StackImpl - (-)(-)(-)(-)(-) Started Mobicents DIAMETER Stack v1.5.10.0-build639 (-)(-)(-)(-)(-) [main] DEBUG org.jdiameter.client.impl.controller.PeerTableImpl - Starting PeerTable. Going to call connect on all peers in the peerTable [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Handling event with type [START_EVENT] [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - No FSM threads are running so calling runQueueProcessing() [main] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Initializing QueueStat @ Thread[main] [main] WARN org.jdiameter.client.impl.controller.PeerTableImpl - Can not start connect procedure to peer [CPeer{Uri=aaa://127.0.0.1:3868; State=DOWN; Con=org.jdiameter.client.impl.transport.tcp.TCPClientConnection@11e70f62}] org.jdiameter.api.InternalException: java.lang.IllegalArgumentException: Statistic already defined: Statistic{ records=[0, 0.0] } [main] DEBUG org.jdiameter.client.impl.controller.PeerTableImpl - Calling start on the router [FSM-aaa://127.0.0.1:3868_2-1] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting ... [3] FSM threads are running [FSM-aaa://127.0.0.1:3868_1-0] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting ... [2] FSM threads are running [FSM-aaa://127.0.0.1:3868_3-2] DEBUG org.jdiameter.client.impl.fsm.PeerFSMImpl - Starting ... [1] FSM threads are running

--
You received this message because this project is configured to send all issue notifications to this address.
You may adjust your notification preferences at:
https://code.google.com/hosting/settings

--

--- You received this message because you are subscribed to the Google Groups "mobicents-all-issues-changes" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to