Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-27 Thread Bill Farner


> On Oct. 26, 2015, 5:02 p.m., Bill Farner wrote:
> > src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java,
> >  line 124
> > 
> >
> > My money is on this being the problem.  The stack trace in the ticket 
> > lines up better too.
> 
> Zameer Manji wrote:
> Looking at the stack trace, I think I agree but I noticed that 
> `ClusterStateImpl` is backed by a synchronized multimap. I'm not sure how it 
> can be the problem. Any thoughts here?
> 
> 
>   private final Multimap victims =
>   Multimaps.synchronizedMultimap(HashMultimap.create());
> 
>   @Override
>   public Multimap getSlavesToActiveTasks() {
> return Multimaps.unmodifiableMultimap(victims);
>   }
> 
> 
> Bill Farner wrote:
> A synchronized [multi]map just means that the `Map` methods are 
> synchronized.  The iterators can still require synchronization and throw 
> `ConcurrentModificationException`.  Some background here: 
> http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedCollection%28java.util.Collection%29
> 
> Zameer Manji wrote:
> The Guava documentation agrees:
> ```
>* It is imperative that the user manually synchronize on the 
> returned
>* multimap when accessing any of its collection views:{@code
>*
>*   Multimap multimap = Multimaps.synchronizedMultimap(
>*   HashMultimap.create());
>*   ...
>*   Collection values = multimap.get(key);  // Needn't be in 
> synchronized block
>*   ...
>*   synchronized (multimap) {  // Synchronizing on multimap, not 
> values!
>* Iterator i = values.iterator(); // Must be in synchronized 
> block
>* while (i.hasNext()) {
>*   foo(i.next());
>* }
>*   }}
>*
>* Failure to follow this advice may result in non-deterministic 
> behavior.
> ```
> 
> We call `slavesToActiveTasks.keySet()` which is a view over the 
> underlying multimap. I'll update this patch to synchronize on the returned 
> multimap before we iterate over the keySet.

Just take care to keep LoD in mind to make sure you're not making assumptions 
about the remote class implementation.  Synchronizing may also have adverse 
performance effects.  Not saying don't do it - just think about potential 
ramifications.


- Bill


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104114
---


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-27 Thread Zameer Manji


> On Oct. 26, 2015, 5:02 p.m., Bill Farner wrote:
> > src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java,
> >  line 124
> > 
> >
> > My money is on this being the problem.  The stack trace in the ticket 
> > lines up better too.
> 
> Zameer Manji wrote:
> Looking at the stack trace, I think I agree but I noticed that 
> `ClusterStateImpl` is backed by a synchronized multimap. I'm not sure how it 
> can be the problem. Any thoughts here?
> 
> 
>   private final Multimap victims =
>   Multimaps.synchronizedMultimap(HashMultimap.create());
> 
>   @Override
>   public Multimap getSlavesToActiveTasks() {
> return Multimaps.unmodifiableMultimap(victims);
>   }
> 
> 
> Bill Farner wrote:
> A synchronized [multi]map just means that the `Map` methods are 
> synchronized.  The iterators can still require synchronization and throw 
> `ConcurrentModificationException`.  Some background here: 
> http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedCollection%28java.util.Collection%29

The Guava documentation agrees:
```
   * It is imperative that the user manually synchronize on the returned
   * multimap when accessing any of its collection views:{@code
   *
   *   Multimap multimap = Multimaps.synchronizedMultimap(
   *   HashMultimap.create());
   *   ...
   *   Collection values = multimap.get(key);  // Needn't be in synchronized 
block
   *   ...
   *   synchronized (multimap) {  // Synchronizing on multimap, not values!
   * Iterator i = values.iterator(); // Must be in synchronized block
   * while (i.hasNext()) {
   *   foo(i.next());
   * }
   *   }}
   *
   * Failure to follow this advice may result in non-deterministic behavior.
```

We call `slavesToActiveTasks.keySet()` which is a view over the underlying 
multimap. I'll update this patch to synchronize on the returned multimap before 
we iterate over the keySet.


- Zameer


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104114
---


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-27 Thread Bill Farner


> On Oct. 26, 2015, 5:02 p.m., Bill Farner wrote:
> > src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java,
> >  line 124
> > 
> >
> > My money is on this being the problem.  The stack trace in the ticket 
> > lines up better too.
> 
> Zameer Manji wrote:
> Looking at the stack trace, I think I agree but I noticed that 
> `ClusterStateImpl` is backed by a synchronized multimap. I'm not sure how it 
> can be the problem. Any thoughts here?
> 
> 
>   private final Multimap victims =
>   Multimaps.synchronizedMultimap(HashMultimap.create());
> 
>   @Override
>   public Multimap getSlavesToActiveTasks() {
> return Multimaps.unmodifiableMultimap(victims);
>   }
> 

A synchronized [multi]map just means that the `Map` methods are synchronized.  
The iterators can still require synchronization and throw 
`ConcurrentModificationException`.  Some background here: 
http://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#synchronizedCollection%28java.util.Collection%29


- Bill


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104114
---


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-27 Thread Zameer Manji


> On Oct. 26, 2015, 5:02 p.m., Bill Farner wrote:
> > src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java,
> >  line 124
> > 
> >
> > My money is on this being the problem.  The stack trace in the ticket 
> > lines up better too.

Looking at the stack trace, I think I agree but I noticed that 
`ClusterStateImpl` is backed by a synchronized multimap. I'm not sure how it 
can be the problem. Any thoughts here?


  private final Multimap victims =
  Multimaps.synchronizedMultimap(HashMultimap.create());

  @Override
  public Multimap getSlavesToActiveTasks() {
return Multimaps.unmodifiableMultimap(victims);
  }



- Zameer


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104114
---


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-27 Thread Zameer Manji


> On Oct. 26, 2015, 4:59 p.m., Stephan Erb wrote:
> > src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java,
> >  line 133
> > 
> >
> > Couldn't we run into the same `ConcurrentModificationException` if the 
> > offer list is modified while `ImmutableList.copyOf()` is executed?

Good point, some more thought is required here.


- Zameer


---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104115
---


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Aurora ReviewBot

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104122
---


Master (c20346c) is green with this patch.
  ./build-support/jenkins/build.sh

However, it appears that it might lack test coverage.

I will refresh this build result if you post a review containing "@ReviewBot 
retry"

- Aurora ReviewBot


On Oct. 26, 2015, 11:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 11:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Bill Farner

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104114
---



src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
(line 124)


My money is on this being the problem.  The stack trace in the ticket lines 
up better too.



src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
(line 133)


AFAICT this was not the issue, since `getOffers()` is backed by 
`ConcurrentSkipListSet` whose iterators don't throw 
`ConcurrentModificationException` [1].

[1] 
http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html#Weakly


- Bill Farner


On Oct. 26, 2015, 4:16 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 4:16 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Stephan Erb

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104115
---



src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
(line 133)


Couldn't we run into the same `ConcurrentModificationException` if the 
offer list is modified while `ImmutableList.copyOf()` is executed?


- Stephan Erb


On Oct. 27, 2015, 12:16 a.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 27, 2015, 12:16 a.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Zameer Manji

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/
---

(Updated Oct. 26, 2015, 4:16 p.m.)


Review request for Aurora, Maxim Khutornenko and Bill Farner.


Changes
---

Rebase on top of master


Bugs: AURORA-1510
https://issues.apache.org/jira/browse/AURORA-1510


Repository: aurora


Description
---

The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
MesosSchedulerImpl adds/removes offfers from OfferManager while 
PendingTaskProcessor iterates over the available offers from OfferManager. 
Since OfferManager only returns an unmodifiable view of the underlying list of 
offers, this causes a `ConcurrentModificationException`. To prevent this 
exception, the PendingTaskProcessor takes an immutable copy of the offers 
before iterating over the list of available offers.


Diffs (updated)
-

  src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
506176769e172b7e9f4ba05c486fe6ab550fb5c3 

Diff: https://reviews.apache.org/r/39670/diff/


Testing
---

./gradlew build -Pq


Thanks,

Zameer Manji



Re: Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Aurora ReviewBot

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/#review104109
---


This patch does not apply cleanly on master (c20346c), do you need to rebase?

I will refresh this build result if you post a review containing "@ReviewBot 
retry"

- Aurora ReviewBot


On Oct. 26, 2015, 10:54 p.m., Zameer Manji wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/39670/
> ---
> 
> (Updated Oct. 26, 2015, 10:54 p.m.)
> 
> 
> Review request for Aurora, Maxim Khutornenko and Bill Farner.
> 
> 
> Bugs: AURORA-1510
> https://issues.apache.org/jira/browse/AURORA-1510
> 
> 
> Repository: aurora
> 
> 
> Description
> ---
> 
> The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
> MesosSchedulerImpl adds/removes offfers from OfferManager while 
> PendingTaskProcessor iterates over the available offers from OfferManager. 
> Since OfferManager only returns an unmodifiable view of the underlying list 
> of offers, this causes a `ConcurrentModificationException`. To prevent this 
> exception, the PendingTaskProcessor takes an immutable copy of the offers 
> before iterating over the list of available offers.
> 
> 
> Diffs
> -
> 
>   config/legacy_untested_classes.txt 70d1dd0e60cf2c0026c8c66d02d2b945c3a16ceb 
>   
> src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
> 506176769e172b7e9f4ba05c486fe6ab550fb5c3 
> 
> Diff: https://reviews.apache.org/r/39670/diff/
> 
> 
> Testing
> ---
> 
> ./gradlew build -Pq
> 
> 
> Thanks,
> 
> Zameer Manji
> 
>



Review Request 39670: Create immutable copy of offers for PendingTaskProcessor.

2015-10-26 Thread Zameer Manji

---
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/39670/
---

Review request for Aurora, Maxim Khutornenko and Bill Farner.


Bugs: AURORA-1510
https://issues.apache.org/jira/browse/AURORA-1510


Repository: aurora


Description
---

The PendingTaskProcessor runs concurrently with MesosSchedulerImpl. 
MesosSchedulerImpl adds/removes offfers from OfferManager while 
PendingTaskProcessor iterates over the available offers from OfferManager. 
Since OfferManager only returns an unmodifiable view of the underlying list of 
offers, this causes a `ConcurrentModificationException`. To prevent this 
exception, the PendingTaskProcessor takes an immutable copy of the offers 
before iterating over the list of available offers.


Diffs
-

  config/legacy_untested_classes.txt 70d1dd0e60cf2c0026c8c66d02d2b945c3a16ceb 
  src/main/java/org/apache/aurora/scheduler/preemptor/PendingTaskProcessor.java 
506176769e172b7e9f4ba05c486fe6ab550fb5c3 

Diff: https://reviews.apache.org/r/39670/diff/


Testing
---

./gradlew build -Pq


Thanks,

Zameer Manji