> On July 5, 2016, 3:08 p.m., Alexander Rukletsov wrote:
> > src/tests/hierarchical_allocator_tests.cpp, line 3100
> > <https://reviews.apache.org/r/49612/diff/2/?file=1436764#file1436764line3100>
> >
> >     I would keep these 3 instances in this test. It's not immediately clear 
> > that `AWAIT` happens in `handleAllocationsAndRecoverResources()`.
> 
> Neil Conway wrote:
>     I don't agree with keeping `Clock::settle` in this case. For one thing, 
> it implies the wrong thing: i.e., keeping `Clock::settle` implies that 
> `handleAllocationsAndRecoverResources()` does not do sufficient 
> synchronization on its own, which is incorrect.
>     
>     Second, `Clock::settle` is a kludge; it should only be used when there is 
> _no other way_ to achieve the synchronization required by the test. So I'd 
> prefer to discourage its use whenever possible.
> 
> Alexander Rukletsov wrote:
>     In general, `Clock::settle` is not a kludge: it allows to make sure a 
> certain event is processed before another event is scheduled.
>     
>     It is not the case here, though. We usually write tests in a way that 
> people can easily follow main steps without looking into functions (hence a 
> lot od copy paste code instead of fixture methods). 
> `handleAllocationsAndRecoverResources()` already breaks this convention by 
> modifying the caller's context; removing `Clock::settle` makes things even 
> worse IMO.

`Clock::settle` is a kludge because it hides the synchronization dependencies 
between operations. If a test needs to wait for operation X to complete before 
it does operation X, then X should provide an explicit interface (e.g., return 
a `Future` or using GMock trickery) to allow the test code to wait for X to 
complete. `Clock::settle` hides the synchronization dependency between X and Y. 
Moreover, `Clock::settle` waits for _all_ outstanding messages to be consumed, 
which is overkill. It is also very easy to write subtly incorrect code using 
`Clock::settle` -- e.g., look at all the stuff that breaks if you remove the 
`os::sleep()` call from the `Clock::settle` implementation.

I agree that `handleAllocationsAndRecoverResources()` is somewhat inconsistent 
with our usual convention for test cases, but I don't think that the 
presence/absence of `Clock::settle` makes things any better/worse.


- Neil


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


On July 5, 2016, 8:51 a.m., Neil Conway wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/49612/
> -----------------------------------------------------------
> 
> (Updated July 5, 2016, 8:51 a.m.)
> 
> 
> Review request for mesos and Alexander Rukletsov.
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> If a test case calls `Clock::settle` and then immediately waits for a
> future to be completed, settling the clock is usually unnecessary.
> 
> 
> Diffs
> -----
> 
>   src/tests/hierarchical_allocator_tests.cpp 
> 0498cd5e54b0e4b87a767585a77699653aa52179 
> 
> Diff: https://reviews.apache.org/r/49612/diff/
> 
> 
> Testing
> -------
> 
> `mesos-tests --gtest_filter=HierarchicalAllocatorTest.* --gtest_repeat=500 
> --gtest_break_on_failure`
> 
> 
> Thanks,
> 
> Neil Conway
> 
>

Reply via email to