[ https://issues.apache.org/jira/browse/SLIDER-1156?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Gour Saha updated SLIDER-1156: ------------------------------ Fix Version/s: (was: Slider 1.0.0) Slider 0.92 > OutstandingRequestTracker edits map while iterating over its entries > -------------------------------------------------------------------- > > Key: SLIDER-1156 > URL: https://issues.apache.org/jira/browse/SLIDER-1156 > Project: Slider > Issue Type: Bug > Components: other > Affects Versions: Slider 0.91 > Reporter: Gour Saha > Assignee: Steve Loughran > Fix For: Slider 0.92 > > > The following error report is provided by coverity scan report on below > method in OutstandingRequestTracker.java - > {code} > 398 @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") > 399 public synchronized List<AbstractRMOperation> > cancelOutstandingAARequests() { > 400 > 401 log.debug("Looking for AA request to cancel"); > 402 List<AbstractRMOperation> operations = new ArrayList<>(); > 403 > 404 // first, all placed requests > 1. return_collection_alias: Call to entrySet returns an Iterable > equivalent to placedRequests. > 2. enhanced_for: Starting an iteration on placedRequests.entrySet(). > 3. Iterating over another element of placedRequests.entrySet() > > CID 120071 (#1 of 1): Using invalid iterator (INVALIDATE_ITERATOR) > 7. invalid_loop: Attempting to obtain another element from > placedRequests.entrySet() after it's been modified. > 405 for (Map.Entry<RoleHostnamePair, OutstandingRequest> entry : > placedRequests.entrySet()) { > 406 OutstandingRequest outstandingRequest = entry.getValue(); > 407 synchronized (outstandingRequest) { > 4. Condition outstandingRequest.isAntiAffine(), taking true branch > 408 if (outstandingRequest.isAntiAffine()) { > 409 // time to escalate > 410 operations.add(outstandingRequest.createCancelOperation()); > 5. modify_iterable: Call to remove modifies Iterable placedRequests > which invalidates the iterator for the loop on placedRequests.entrySet(). > 411 placedRequests.remove(entry.getKey()); > 412 } > 413 } > 6. Jumping back to the beginning of the loop > 414 } > 415 // second, all open requests > 416 ListIterator<OutstandingRequest> orit = openRequests.listIterator(); > 417 while (orit.hasNext()) { > 418 OutstandingRequest outstandingRequest = orit.next(); > 419 synchronized (outstandingRequest) { > 420 if (outstandingRequest.isAntiAffine()) { > 421 // time to escalate > 422 operations.add(outstandingRequest.createCancelOperation()); > 423 orit.remove(); > 424 } > 425 } > 426 } > 427 log.info("Cancelling {} outstanding AA requests", operations.size()); > 428 > 429 return operations; > 430 } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346)