[ 
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)

Reply via email to