[
https://issues.apache.org/jira/browse/MESOS-5886?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15389299#comment-15389299
]
Benjamin Bannier commented on MESOS-5886:
-----------------------------------------
It seem it might be enough to store just a ptr to the member function in the
{{DispatchEvent}} and then do the matching with that. If we'd ever need to
examine the {{type_info}} of the store member, it should be possible to get it
from that ptr as well (currently we do not really use it but for the fuzzy
match you reported here).
> FUTURE_DISPATCH may react on irrelevant dispatch.
> -------------------------------------------------
>
> Key: MESOS-5886
> URL: https://issues.apache.org/jira/browse/MESOS-5886
> Project: Mesos
> Issue Type: Bug
> Reporter: Alexander Rukletsov
> Labels: mesosphere, tech-debt, tech-debt-test
>
> [{{FUTURE_DISPATCH}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L50]
> uses
> [{{DispatchMatcher}}|https://github.com/apache/mesos/blob/e8ebbe5fe4189ef7ab046da2276a6abee41deeb2/3rdparty/libprocess/include/process/gmock.hpp#L350]
> to figure out whether a processed {{DispatchEvent}} is the same the user is
> waiting for. However, comparing {{std::type_info}} of function pointers is
> not enough: different class methods with same signatures will be matched.
> Here is the test that proves this:
> {noformat}
> class DispatchProcess : public Process<DispatchProcess>
> {
> public:
> MOCK_METHOD0(func0, void());
> MOCK_METHOD1(func1, bool(bool));
> MOCK_METHOD1(func1_same_but_different, bool(bool));
> MOCK_METHOD1(func2, Future<bool>(bool));
> MOCK_METHOD1(func3, int(int));
> MOCK_METHOD2(func4, Future<bool>(bool, int));
> };
> {noformat}
> {noformat}
> TEST(ProcessTest, DispatchMatch)
> {
> DispatchProcess process;
> PID<DispatchProcess> pid = spawn(&process);
> Future<Nothing> future = FUTURE_DISPATCH(
> pid,
> &DispatchProcess::func1_same_but_different);
> EXPECT_CALL(process, func1(_))
> .WillOnce(ReturnArg<0>());
> dispatch(pid, &DispatchProcess::func1, true);
> AWAIT_READY(future);
> terminate(pid);
> wait(pid);
> }
> {noformat}
> The test passes:
> {noformat}
> [ RUN ] ProcessTest.DispatchMatch
> [ OK ] ProcessTest.DispatchMatch (1 ms)
> {noformat}
> This change was introduced in https://reviews.apache.org/r/28052/.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)