[
https://issues.apache.org/jira/browse/STORM-737?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14541284#comment-14541284
]
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_r30201415
--- Diff: storm-core/src/jvm/backtype/storm/utils/TransferDrainer.java ---
@@ -26,10 +26,10 @@
public class TransferDrainer {
- private HashMap<String, ArrayList<ArrayList<TaskMessage>>> bundles = new
HashMap();
+ private HashMap<Integer, ArrayList<ArrayList<TaskMessage>>> bundles =
new HashMap();
- public void add(HashMap<String, ArrayList<TaskMessage>>
workerTupleSetMap) {
- for (String key : workerTupleSetMap.keySet()) {
+ public void add(HashMap<Integer, ArrayList<TaskMessage>>
taskTupleSetMap) {
--- End diff --
@d2r
Looking it again, it should stores tuples to buffer unless batch-end? is
true.
0666c41 stores tuples to ArrayList, and 861a92e just stores tuples to
TransferDrainer itself.
So if we changed add() to private or remove add(), we should introduce
another buffer, which role may be duplicated to TransferDrainer.
(It may not an issue when batch-end? is always true, but I don't know.)
Which one do you think is better?
> 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)