[
https://issues.apache.org/jira/browse/STORM-120?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13943107#comment-13943107
]
Robert Joseph Evans commented on STORM-120:
-------------------------------------------
It seems like it should be simple enough to change the acquire-random-rande-id
{code}
(defn acquire-random-range-id [[^MutableInt curr ^List state ^Random rand]]
(locking curr
(when (>= (.increment curr) (.size state))
(.set curr 0)
(Collections/shuffle state rand))
(.get state (.get curr))))
{code}
But I agree that I want to understand better how multiple instances of this
could be called in parallel on the same curr without the bolt or spout
specifically doing it from multiple threads.
> util/acquire-random-range-id is not thread-safe
> -----------------------------------------------
>
> Key: STORM-120
> URL: https://issues.apache.org/jira/browse/STORM-120
> Project: Apache Storm (Incubating)
> Issue Type: Bug
> Reporter: James Xu
> Priority: Minor
>
> https://github.com/nathanmarz/storm/issues/724
> Concurrent calls to util/acquire-random-range-id with the same parameters can
> result in an IndexOutOfBoundsException, as an increment in one thread may
> occur after the bounds check in another. The resulting curr value can be >=
> the size of the List state.
> https://github.com/nathanmarz/storm/blob/fc5fbb8b352cf91050cdde4a9f9e77e673ab7f48/storm-core/src/clj/backtype/storm/util.clj#L606
--
This message was sent by Atlassian JIRA
(v6.2#6252)