[ https://issues.apache.org/jira/browse/STORM-737?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14548098#comment-14548098 ]
ASF GitHub Bot commented on STORM-737: -------------------------------------- Github user HeartSaVioR commented on a diff in the pull request: https://github.com/apache/storm/pull/521#discussion_r30513365 --- Diff: storm-core/src/clj/backtype/storm/daemon/worker.clj --- @@ -139,12 +139,12 @@ (.add local pair) ;;Using java objects directly to avoid performance issues in java code - (let [node+port (get @task->node+port task)] - (when (not (.get remoteMap node+port)) - (.put remoteMap node+port (ArrayList.))) - (let [remote (.get remoteMap node+port)] + (let [] + (when (not (.get remoteMap task)) + (.put remoteMap task (ArrayList.))) + (let [remote (.get remoteMap task)] (.add remote (TaskMessage. task (.serialize serializer tuple))) - )))) + )))) --- End diff -- @d2r Accessing task->node+port from these lines is root of this problem since it can be changed during preparing for transfer. So we should change current implementation to not accessing task->node+port. It should be grouped by destination (node and port) within read lock. > Workers may try to send to closed connections > --------------------------------------------- > > Key: STORM-737 > URL: https://issues.apache.org/jira/browse/STORM-737 > Project: Apache Storm > Issue Type: Bug > Affects Versions: 0.9.2-incubating > Reporter: Derek Dagit > > There is a race condition in the worker code that can allow for a send() to > be called on a closed connection. > [Discussion|https://github.com/apache/storm/pull/349#issuecomment-87778672] > The assignment mapping from task -> node+port needs to be read and used in > the read lock when sending, so that an accurate mapping is used that does not > include any connections that are closed. -- This message was sent by Atlassian JIRA (v6.3.4#6332)