> On March 26, 2014, 10:28 a.m., Ben Mahler wrote: > > 3rdparty/libprocess/src/metrics/metric.cpp, lines 26-35 > > <https://reviews.apache.org/r/18718/diff/17/?file=537651#file537651line26> > > > > Is this safe? > > > > Once we're inside the Parent destructor, the Child destructor has > > completed (for Gauge/Metric). On another thread, we're going to try to > > invoke get(). Seems unsafe, no? > > Dominic Hamon wrote: > Your concern is that we can still call get on the derived class between > the derived and parent destructor runs. You're right - we should remove as > the first step in the destructor of the derived class. > > I don't know of a good way to enforce it other than checking in the base > (Metric) destructor that the metric has been removed. I'm open to > alternatives. > > > Dominic Hamon wrote: > There may be another option: > > The Metric is either type 'Gauge' or type 'Metric' depending on when > during destruction 'get' is called from another thread. 'get' for a derived > Metric is always valid to call. 'get' on the base Metric class is a problem > because it is pure virtual. > > Possible solution then: > > Metric::get returns a Future<Option<double>> instead and the > implementation in Metric returns Option::none(). Wherever we are in the > destruction order, we end up returning something valid. > > Thoughts?
take a look at the new version and let me know what you think. i think this solves the problems we've seen with the async stuff and follows our numerous discussions. - Dominic ----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: https://reviews.apache.org/r/18718/#review38629 ----------------------------------------------------------- On March 27, 2014, 3:50 p.m., Dominic Hamon wrote: > > ----------------------------------------------------------- > This is an automatically generated e-mail. To reply, visit: > https://reviews.apache.org/r/18718/ > ----------------------------------------------------------- > > (Updated March 27, 2014, 3:50 p.m.) > > > Review request for mesos, Benjamin Hindman and Ben Mahler. > > > Bugs: MESOS-1036 > https://issues.apache.org/jira/browse/MESOS-1036 > > > Repository: mesos-git > > > Description > ------- > > See summary > > > Diffs > ----- > > 3rdparty/libprocess/Makefile.am e452ec6256042ce9388e59f4586e1084075fe621 > 3rdparty/libprocess/include/process/metrics/counter.hpp PRE-CREATION > 3rdparty/libprocess/include/process/metrics/gauge.hpp PRE-CREATION > 3rdparty/libprocess/include/process/metrics/metric.hpp PRE-CREATION > 3rdparty/libprocess/include/process/metrics/metrics.hpp PRE-CREATION > 3rdparty/libprocess/src/metrics/metrics.cpp PRE-CREATION > 3rdparty/libprocess/src/tests/metrics_tests.cpp PRE-CREATION > > Diff: https://reviews.apache.org/r/18718/diff/ > > > Testing > ------- > > Added unit tests. make check. > > > Thanks, > > Dominic Hamon > >