> 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. > > Neil Conway wrote: > `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. > > Alexander Rukletsov wrote: > Yeah, from this point of view it is a kludge : ). Until we have > primitives, that allow us to express operation dependenices in tests, we will > have to use `Clock::settle()` and hence educate contributors how to use it > properly, especially the difference between performing an action and a > corresponding event being put into the actor's mailbox. > > My concern is that with both `Clock::settle()` and `AWAIT_*` absent the > dependency between operations is hidden. > `handleAllocationsAndRecoverResources()` does not hint that it awaits for > allocations to be made. Maybe making it a local lambda and renaming to > something like `awaitAllocationsAndRecoverResources()` will help?
Per discussion, renamed the function and made it a lambda: https://reviews.apache.org/r/49883/ - 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 > >