[ 
https://issues.apache.org/jira/browse/MUSE-283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12556153#action_12556153
 ] 

Vinh Nguyen commented on MUSE-283:
----------------------------------

SimpleNotifictionProducer.getSubscriptions() already returns an unmodifiable 
collection, so I don't think there's a need to wrap the result in an ArrayList.

I think the real issue is that two separate processes are attempting to 
access/modify the same list of subscriptions.  For example, the 
ConcurrentModificationException could happen if a subscription expires at about 
the same time when an attempt is made to publish a notification to it.

The fix is probably two-fold:
1) In NotificationProducer.publish(), call subscriptionManager.publish() only 
if the subscriptionManager.hasBeenShutdown() returns false.
2) The caller should only invoke NotificationProducer.publish() only if 
NotificationProducer.hasBeenShutdown() returns false.  If true, don't publish 
the notification. This is for cases where the caller holds a reference to a 
NotificationProducer but isn't aware if the producer resource itself got 
terminated at some point, so the caller might have a reference to an invalid 
NotificationProducer object.



> SimpleNotificationProducer.getSubscriptions() returns a not-syncronized 
> collection
> ----------------------------------------------------------------------------------
>
>                 Key: MUSE-283
>                 URL: https://issues.apache.org/jira/browse/MUSE-283
>             Project: Muse
>          Issue Type: Bug
>          Components: WSN NotificationProducer
>    Affects Versions: 2.2.0
>         Environment: os: unix on solaris 
>            Reporter: Asaf Zafran
>            Assignee: Dan Jemiolo
>            Priority: Critical
>
> we have extended the SimpleNotificationProducer.
> in the method 
> public void publish(QName topicName, Element[] content, EndpointReference 
> consumer) throws SoapFault
> we have called the method:
> Iterator i = getSubsriptions().iterator();
> and the line 
> iterator.next();
> has caused a ConcurrentModificationException.
> the stack trace is :
> java.util.ConcurrentModificationException
>               at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
>               at java.util.HashMap$ValueIterator.next(HashMap.java:871)
>               at 
> java.util.Collections$UnmodifiableCollection$1.next(Collections.java:1010)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.notification.NotificationProducer.publish(NotificationProducer.java:182)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.notification.NotificationProducer.publish(NotificationProducer.java:253)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.wsresource.CommandCallback.publish(CommandCallback.java:256)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.wsresource.CommandCallback.publish(CommandCallback.java:243)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.wsresource.provservice.WorkflowCallback.gotResult(WorkflowCallback.java:92)
>               at 
> com.cisco.nm.cmp.nbi.mediator.core.CommandExecutor.setNotifyResult(CommandExecutor.java:270)
>               at 
> com.cisco.nm.cmp.nbi.mediator.core.MediatorOutputListener.callTranslator(MediatorOutputListener.java:379)
>               at 
> com.cisco.nm.cmp.nbi.wsdm.server.mediation.provisioning.workflow.run.RunWFResponseListener.notification(RunWFResponseListener.java:86)
>               at 
> com.cisco.nm.cmp.client.mediator.handlers.DefaultResponseHandler.handleJMSMessageObject(Unknown
>  Source)
>               at 
> com.cisco.nm.cmp.client.mediator.handlers.DefaultResponseHandler.handleJMSMessageObject(Unknown
>  Source)
>               at 
> com.cisco.nm.cmp.client.mediator.handlers.DefaultResponseHandler.handleJMSMessage(Unknown
>  Source)
>               at 
> com.cisco.nm.cmp.client.mediator.handlers.DefaultResponseHandler.handleJMSMessage(Unknown
>  Source)
>               at 
> com.cisco.nm.cmp.client.mediator.handlers.ResponseHandlerThread.run(Unknown 
> Source)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to