You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by jo...@apache.org on 2018/10/30 19:19:28 UTC
[mesos] 03/03: Fixed FetcherTest.DuplicateFileURI on OSX.
This is an automated email from the ASF dual-hosted git repository.
josephwu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit c1c866529cf53356b3fdbdb102c008f63ba40c61
Author: Joseph Wu <jo...@apache.org>
AuthorDate: Mon Oct 29 16:00:06 2018 -0700
Fixed FetcherTest.DuplicateFileURI on OSX.
This test seems to fail because of a mismatch between the implementation
of std::hash and operator== of the CommandInfo::URI object. The hash
accounts for all fields except for 'cache'. The equality operator
accounts for all fields except 'cache' **and** 'output_file'.
This mismatch results in replacing the URI value in the fetcher's
mapping, rather than adding a value. Why the std::unordered_map
checks the equality operator rather than the hash value is unknown,
but may be an implementation detail of clang's stdlib.
Review: https://reviews.apache.org/r/69205
---
src/common/type_utils.cpp | 6 +++++-
src/v1/mesos.cpp | 6 +++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp
index 33d6380..ef13eae 100644
--- a/src/common/type_utils.cpp
+++ b/src/common/type_utils.cpp
@@ -80,9 +80,13 @@ bool operator==(const CommandInfo& left, const CommandInfo& right)
bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right)
{
+ // NOTE: We purposefully do not compare the value of the `cache` field
+ // because a URI downloaded from source or from the fetcher cache should
+ // be considered identical.
return left.value() == right.value() &&
left.executable() == right.executable() &&
- left.extract() == right.extract();
+ left.extract() == right.extract() &&
+ left.output_file() == right.output_file();
}
diff --git a/src/v1/mesos.cpp b/src/v1/mesos.cpp
index 9b2df2d..704ad76 100644
--- a/src/v1/mesos.cpp
+++ b/src/v1/mesos.cpp
@@ -79,9 +79,13 @@ bool operator==(const CommandInfo& left, const CommandInfo& right)
bool operator==(const CommandInfo::URI& left, const CommandInfo::URI& right)
{
+ // NOTE: We purposefully do not compare the value of the `cache` field
+ // because a URI downloaded from source or from the fetcher cache should
+ // be considered identical.
return left.value() == right.value() &&
left.executable() == right.executable() &&
- left.extract() == right.extract();
+ left.extract() == right.extract() &&
+ left.output_file() == right.output_file();
}