You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bb...@apache.org on 2018/03/26 15:08:03 UTC
[2/2] mesos git commit: Enabled agent resource provider capability by
default.
Enabled agent resource provider capability by default.
This patch add `RESOURCE_PROVIDER` to the list of default-enabled
agent capabilities. In addition we also adjust tests to accommodate
the change in the agent registration protocol this triggers. We rely
on masters ignoring redundant `UpdateSlaveMessage`s.
Review: https://reviews.apache.org/r/66037/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/ebe92c9b
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/ebe92c9b
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/ebe92c9b
Branch: refs/heads/master
Commit: ebe92c9b39933136968e4ba3a52527e52b361d22
Parents: 1ed3eae
Author: Benjamin Bannier <be...@mesosphere.io>
Authored: Mon Mar 26 15:54:02 2018 +0200
Committer: Benjamin Bannier <bb...@apache.org>
Committed: Mon Mar 26 15:54:02 2018 +0200
----------------------------------------------------------------------
src/slave/constants.cpp | 10 +-
...agent_resource_provider_config_api_tests.cpp | 60 -----
src/tests/api_tests.cpp | 40 ---
src/tests/master_tests.cpp | 27 +-
src/tests/oversubscription_tests.cpp | 9 +-
src/tests/persistent_volume_endpoints_tests.cpp | 43 +--
src/tests/persistent_volume_tests.cpp | 262 +++++++-----------
src/tests/reservation_endpoints_tests.cpp | 20 +-
src/tests/reservation_tests.cpp | 270 +++++++++----------
src/tests/resource_provider_manager_tests.cpp | 10 -
src/tests/scheduler_tests.cpp | 40 ++-
src/tests/slave_recovery_tests.cpp | 22 +-
src/tests/slave_tests.cpp | 48 +---
.../storage_local_resource_provider_tests.cpp | 170 ------------
support/mesos-mini/Dockerfile | 1 -
support/mesos-mini/mesos/agent_features.json | 8 -
16 files changed, 300 insertions(+), 740 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/slave/constants.cpp
----------------------------------------------------------------------
diff --git a/src/slave/constants.cpp b/src/slave/constants.cpp
index 9b60bd0..51de71b 100644
--- a/src/slave/constants.cpp
+++ b/src/slave/constants.cpp
@@ -14,12 +14,12 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include <vector>
-
#include "master/constants.hpp"
#include "slave/constants.hpp"
+#include <vector>
+
using std::vector;
namespace mesos {
@@ -36,10 +36,10 @@ Duration DEFAULT_MASTER_PING_TIMEOUT()
vector<SlaveInfo::Capability> AGENT_CAPABILITIES()
{
SlaveInfo::Capability::Type types[] = {
- SlaveInfo::Capability::MULTI_ROLE,
SlaveInfo::Capability::HIERARCHICAL_ROLE,
- SlaveInfo::Capability::RESERVATION_REFINEMENT
- };
+ SlaveInfo::Capability::MULTI_ROLE,
+ SlaveInfo::Capability::RESERVATION_REFINEMENT,
+ SlaveInfo::Capability::RESOURCE_PROVIDER};
vector<SlaveInfo::Capability> result;
foreach (SlaveInfo::Capability::Type type, types) {
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/agent_resource_provider_config_api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/agent_resource_provider_config_api_tests.cpp b/src/tests/agent_resource_provider_config_api_tests.cpp
index bd5312b..53b8cb8 100644
--- a/src/tests/agent_resource_provider_config_api_tests.cpp
+++ b/src/tests/agent_resource_provider_config_api_tests.cpp
@@ -298,16 +298,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Add)
// Disable HTTP authentication to simplify resource provider interactions.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -395,16 +385,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_AddConflict)
// Disable HTTP authentication to simplify resource provider interactions.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
// Generate a pre-existing config.
@@ -467,16 +447,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Update)
// Disable HTTP authentication to simplify resource provider interactions.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
// Generate a pre-existing config.
@@ -588,16 +558,6 @@ TEST_P(AgentResourceProviderConfigApiTest, UpdateNotFound)
slave::Flags slaveFlags = CreateSlaveFlags();
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
Future<SlaveRegisteredMessage> slaveRegisteredMessage =
@@ -641,16 +601,6 @@ TEST_P(AgentResourceProviderConfigApiTest, ROOT_Remove)
// Disable HTTP authentication to simplify resource provider interactions.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
// Generate a pre-existing config.
@@ -732,16 +682,6 @@ TEST_P(AgentResourceProviderConfigApiTest, RemoveNotFound)
slave::Flags slaveFlags = CreateSlaveFlags();
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
slaveFlags.resource_provider_config_dir = resourceProviderConfigDir;
Future<SlaveRegisteredMessage> slaveRegisteredMessage =
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/api_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/api_tests.cpp b/src/tests/api_tests.cpp
index 7e9233e..dd8e221 100644
--- a/src/tests/api_tests.cpp
+++ b/src/tests/api_tests.cpp
@@ -180,16 +180,6 @@ TEST_P(MasterAPITest, GetAgents)
slaveFlags.hostname = "host";
slaveFlags.domain = createDomainInfo("region-xyz", "zone-456");
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(agent);
@@ -1037,16 +1027,6 @@ TEST_P(MasterAPITest, GetOperations)
// authentication.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(agent);
@@ -6625,16 +6605,6 @@ TEST_P(AgentAPITest, GetResourceProviders)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
ASSERT_SOME(slave);
@@ -6724,16 +6694,6 @@ TEST_P(AgentAPITest, GetOperations)
// authentication.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(agent);
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index 85a509a..be7a3cc 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -5044,10 +5044,11 @@ TEST_F(MasterTest, StateEndpointAgentCapabilities)
ASSERT_EQ(1u, slaveInfo.values.count("capabilities"));
JSON::Value slaveCapabilities = slaveInfo.values.at("capabilities");
- // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE, and
- // RESERVATION_REFINEMENT capabilities in current implementation.
+ // Agents should have MULTI_ROLE, HIERARCHICAL_ROLE, RESERVATION_REFINEMENT,
+ // and RESOURCE_PROVIDER capabilities in current implementation.
Try<JSON::Value> expectedCapabilities = JSON::parse(
- "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\"]");
+ "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\","
+ "\"RESOURCE_PROVIDER\"]");
ASSERT_SOME(expectedCapabilities);
EXPECT_TRUE(slaveCapabilities.contains(expectedCapabilities.get()));
@@ -8639,16 +8640,6 @@ TEST_F(MasterTest, UpdateSlaveMessageWithPendingOffers)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(agent);
@@ -8770,16 +8761,6 @@ TEST_F(MasterTest, OperationUpdateDuringFailover)
// authentication.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Future<UpdateSlaveMessage> updateSlaveMessage =
FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/oversubscription_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/oversubscription_tests.cpp b/src/tests/oversubscription_tests.cpp
index 5644057..47c51e3 100644
--- a/src/tests/oversubscription_tests.cpp
+++ b/src/tests/oversubscription_tests.cpp
@@ -286,8 +286,9 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
Try<Owned<cluster::Master>> master = StartMaster();
ASSERT_SOME(master);
- Future<SlaveRegisteredMessage> slaveRegistered =
- FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
+ // The agent will send a single `UpdateSlaveMessage` after registration.
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
MockResourceEstimator resourceEstimator;
@@ -305,7 +306,7 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
StartSlave(detector.get(), &resourceEstimator, flags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveRegistered);
+ AWAIT_READY(updateSlaveMessage);
Future<UpdateSlaveMessage> update =
FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
@@ -333,7 +334,7 @@ TEST_F(OversubscriptionTest, ForwardUpdateSlaveMessage)
1u,
metrics.values.count("master/messages_update_slave"));
ASSERT_EQ(
- 1u,
+ 2u,
metrics.values["master/messages_update_slave"]);
ASSERT_EQ(
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/persistent_volume_endpoints_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/persistent_volume_endpoints_tests.cpp b/src/tests/persistent_volume_endpoints_tests.cpp
index b9dbb96..770c482 100644
--- a/src/tests/persistent_volume_endpoints_tests.cpp
+++ b/src/tests/persistent_volume_endpoints_tests.cpp
@@ -1524,15 +1524,15 @@ TEST_F(PersistentVolumeEndpointsTest, OfferCreateThenEndpointRemove)
EXPECT_EQ(offer.slave_id(), slaveId);
- Future<CheckpointResourcesMessage> checkpointResources =
- FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+ Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
// Reserve the resources.
driver.acceptOffers({offer.id()}, {RESERVE(dynamicallyReserved)});
// Make sure the allocator processes the `RESERVE` operation before summoning
// an offer.
- AWAIT_READY(checkpointResources);
+ AWAIT_READY(updateOperationStatusMessage);
// Summon an offer.
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1559,13 +1559,14 @@ TEST_F(PersistentVolumeEndpointsTest, OfferCreateThenEndpointRemove)
None(),
frameworkInfo.principal());
- checkpointResources = FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+ updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
// Create the volume.
driver.acceptOffers({offer.id()}, {CREATE(volume)});
// Make sure the master processes the accept call before summoning an offer.
- AWAIT_READY(checkpointResources);
+ AWAIT_READY(updateOperationStatusMessage);
// Summon an offer.
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1726,13 +1727,13 @@ TEST_F(PersistentVolumeEndpointsTest, EndpointCreateThenOfferRemove)
EXPECT_TRUE(Resources(offer.resources()).contains(
allocatedResources(volume, frameworkInfo.roles(0))));
- Future<CheckpointResourcesMessage> checkpointResources =
- FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+ Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
driver.acceptOffers({offer.id()}, {DESTROY(volume)});
// Make sure the master processes the accept call before summoning an offer.
- AWAIT_READY(checkpointResources);
+ AWAIT_READY(updateOperationStatusMessage);
// Summon an offer.
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1752,13 +1753,14 @@ TEST_F(PersistentVolumeEndpointsTest, EndpointCreateThenOfferRemove)
<< Resources(offer.resources()) << " vs "
<< allocatedResources(dynamicallyReserved, frameworkInfo.roles(0));
- checkpointResources = FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+ updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
// Unreserve the resources.
driver.acceptOffers({offer.id()}, {UNRESERVE(dynamicallyReserved)});
// Make sure the master processes the accept call before summoning an offer.
- AWAIT_READY(checkpointResources);
+ AWAIT_READY(updateOperationStatusMessage);
// Summon an offer.
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1854,10 +1856,11 @@ TEST_F(PersistentVolumeEndpointsTest, ReserveAndSlaveRemoval)
ASSERT_EQ(2u, offers->size());
- Future<CheckpointResourcesMessage> checkpointResources =
- FUTURE_PROTOBUF(CheckpointResourcesMessage(),
- master.get()->pid,
- slave2.get()->pid);
+ Future<ApplyOperationMessage> applyOperationMessage =
+ FUTURE_PROTOBUF(ApplyOperationMessage(), _, _);
+
+ Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
// Use the offers API to reserve all CPUs on `slave2`.
Resources slave2Unreserved = Resources::parse("cpus:3").get();
@@ -1878,9 +1881,15 @@ TEST_F(PersistentVolumeEndpointsTest, ReserveAndSlaveRemoval)
}
}
- AWAIT_READY(checkpointResources);
- EXPECT_EQ(Resources(checkpointResources->resources()),
- slave2Reserved);
+ Resources sentResources =
+ applyOperationMessage->operation_info().reserve().resources();
+
+ sentResources.unallocate();
+
+ AWAIT_READY(applyOperationMessage);
+ EXPECT_EQ(sentResources, slave2Reserved);
+
+ AWAIT_READY(updateOperationStatusMessage);
// Shutdown `slave2` with an explicit shutdown message.
EXPECT_CALL(sched, offerRescinded(_, _));
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/persistent_volume_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/persistent_volume_tests.cpp b/src/tests/persistent_volume_tests.cpp
index 924d845..4edf781 100644
--- a/src/tests/persistent_volume_tests.cpp
+++ b/src/tests/persistent_volume_tests.cpp
@@ -91,18 +91,9 @@ enum PersistentVolumeSourceType
};
-enum ResourceProviderCapability
-{
- DISABLED,
- ENABLED
-};
-
-
class PersistentVolumeTest
: public MesosTest,
- public WithParamInterface<::testing::tuple<
- PersistentVolumeSourceType,
- ResourceProviderCapability>>
+ public WithParamInterface<PersistentVolumeSourceType>
{
protected:
virtual void SetUp()
@@ -114,7 +105,7 @@ protected:
diskPath = path.get();
- if (::testing::get<0>(GetParam()) == MOUNT) {
+ if (GetParam() == MOUNT) {
// On linux we mount a `tmpfs`.
#ifdef __linux__
for (size_t i = 1; i <= NUM_DISKS; ++i) {
@@ -135,7 +126,7 @@ protected:
virtual void TearDown()
{
#ifdef __linux__
- if (::testing::get<0>(GetParam()) == MOUNT) {
+ if (GetParam() == MOUNT) {
for (size_t i = 1; i <= NUM_DISKS; ++i) {
ASSERT_SOME(
fs::unmountAll(path::join(diskPath, "disk" + stringify(i))));
@@ -168,83 +159,42 @@ protected:
return flags;
}
- virtual slave::Flags CreateSlaveFlags()
- {
- slave::Flags slaveFlags = MesosTest::CreateSlaveFlags();
- if (::testing::get<1>(GetParam()) == ENABLED) {
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
- }
-
- return slaveFlags;
- }
-
// Depending on the agent capability, the master will send different
// messages to the agent when a persistent volume is applied.
template<typename To>
Future<Resources> getOperationMessage(To to)
{
- if (::testing::get<1>(GetParam()) == ENABLED) {
- return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
- .then([](const ApplyOperationMessage& message) {
- switch (message.operation_info().type()) {
- case Offer::Operation::UNKNOWN:
- case Offer::Operation::LAUNCH:
- case Offer::Operation::LAUNCH_GROUP:
- case Offer::Operation::RESERVE:
- case Offer::Operation::UNRESERVE:
- case Offer::Operation::CREATE_VOLUME:
- case Offer::Operation::DESTROY_VOLUME:
- case Offer::Operation::CREATE_BLOCK:
- case Offer::Operation::DESTROY_BLOCK:
- UNREACHABLE();
- case Offer::Operation::CREATE: {
- Resources resources = message.operation_info().create().volumes();
- resources.unallocate();
-
- return resources;
- }
- case Offer::Operation::DESTROY: {
- Resources resources =
- message.operation_info().destroy().volumes();
- resources.unallocate();
-
- return resources;
- }
+ return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
+ .then([](const ApplyOperationMessage& message) {
+ switch (message.operation_info().type()) {
+ case Offer::Operation::UNKNOWN:
+ case Offer::Operation::LAUNCH:
+ case Offer::Operation::LAUNCH_GROUP:
+ case Offer::Operation::RESERVE:
+ case Offer::Operation::UNRESERVE:
+ case Offer::Operation::CREATE_VOLUME:
+ case Offer::Operation::DESTROY_VOLUME:
+ case Offer::Operation::CREATE_BLOCK:
+ case Offer::Operation::DESTROY_BLOCK:
+ UNREACHABLE();
+ case Offer::Operation::CREATE: {
+ Resources resources = message.operation_info().create().volumes();
+ resources.unallocate();
+
+ return resources;
}
+ case Offer::Operation::DESTROY: {
+ Resources resources = message.operation_info().destroy().volumes();
+ resources.unallocate();
- UNREACHABLE();
- });
- }
+ return resources;
+ }
+ }
- return FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, to)
- .then([](const CheckpointResourcesMessage& message) {
- return Resources(message.resources());
+ UNREACHABLE();
});
}
- // Agents with enabled 'RESOURCE_PROVIDER' capability will send a
- // 'UpdateSlaveMessage' after (re-)registration. Offers will be
- // rescinded if they were created prior to this message. Hence, we
- // have to wait for this message before accepting offers.
- Future<Nothing> getSlaveReady()
- {
- if (::testing::get<1>(GetParam()) == ENABLED) {
- return FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _).then([] {
- return Nothing();
- });
- }
-
- return Nothing();
- }
-
// Creates a disk with / without a `source` based on the
// parameterization of the test. `id` influences the `root` if one
// is specified so that we can create multiple disks in the tests.
@@ -254,7 +204,7 @@ protected:
CHECK_GE(NUM_DISKS, id);
Resource diskResource;
- switch (::testing::get<0>(GetParam())) {
+ switch (GetParam()) {
case NONE: {
diskResource = createDiskResource(
stringify((double) mb.bytes() / Bytes::MEGABYTES),
@@ -311,12 +261,8 @@ protected:
INSTANTIATE_TEST_CASE_P(
DiskResource,
PersistentVolumeTest,
- ::testing::Combine(
- ::testing::Values(
- PersistentVolumeSourceType::NONE, PersistentVolumeSourceType::PATH),
- ::testing::Values(
- ResourceProviderCapability::DISABLED,
- ResourceProviderCapability::ENABLED)));
+ ::testing::Values(
+ PersistentVolumeSourceType::NONE, PersistentVolumeSourceType::PATH));
// We also want to parameterize them for `MOUNT`. On linux this means
@@ -327,22 +273,14 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P(
ROOT_MountDiskResource,
PersistentVolumeTest,
- ::testing::Combine(
- ::testing::Values(PersistentVolumeSourceType::MOUNT),
- ::testing::Values(
- ResourceProviderCapability::DISABLED,
- ResourceProviderCapability::ENABLED)));
+ ::testing::Values(PersistentVolumeSourceType::MOUNT));
#else // __linux__
// Otherwise we can run it without root privileges as we just require
// a directory.
INSTANTIATE_TEST_CASE_P(
MountDiskResource,
PersistentVolumeTest,
- ::testing::Combine(
- ::testing::Values(PersistentVolumeSourceType::MOUNT),
- ::testing::Values(
- ResourceProviderCapability::DISABLED,
- ResourceProviderCapability::ENABLED)));
+ ::testing::Values(PersistentVolumeSourceType::MOUNT));
#endif // __linux__
@@ -363,13 +301,14 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -420,7 +359,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
// exist (it is created by the test `SetUp()` function). For
// non-MOUNT disks, the directory is created when the persistent
// volume is created.
- if (::testing::get<0>(GetParam()) == MOUNT) {
+ if (GetParam() == MOUNT) {
EXPECT_TRUE(os::exists(volume1Path));
EXPECT_TRUE(os::exists(volume2Path));
} else {
@@ -479,12 +418,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
filters);
AWAIT_READY(message3);
- if (::testing::get<1>(GetParam()) == ENABLED) {
- EXPECT_TRUE(message3->contains(volume1));
- } else {
- EXPECT_TRUE(message3->contains(volume2));
- EXPECT_FALSE(message3->contains(volume1));
- }
+ EXPECT_TRUE(message3->contains(volume1));
// Ensure that the messages reach the slave.
Clock::settle();
@@ -493,7 +427,7 @@ TEST_P(PersistentVolumeTest, CreateAndDestroyPersistentVolumes)
// delete all of the files and subdirectories underneath it). For
// non-MOUNT disks, the volume directory should be removed when the
// volume is destroyed.
- if (::testing::get<0>(GetParam()) == MOUNT) {
+ if (GetParam() == MOUNT) {
EXPECT_TRUE(os::exists(volume1Path));
Try<list<string>> files = ::fs::list(path::join(volume1Path, "*"));
@@ -523,13 +457,14 @@ TEST_P(PersistentVolumeTest, ResourcesCheckpointing)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -596,13 +531,14 @@ TEST_P(PersistentVolumeTest, PreparePersistentVolume)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -669,12 +605,13 @@ TEST_P(PersistentVolumeTest, MasterFailover)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady1 = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage1 =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady1);
+ AWAIT_READY(updateSlaveMessage1);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -723,10 +660,8 @@ TEST_P(PersistentVolumeTest, MasterFailover)
EXPECT_CALL(sched, registered(&driver, _, _));
- Future<SlaveReregisteredMessage> slaveReregistered =
- FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
-
- Future<Nothing> slaveReady2 = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage2 =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Future<vector<Offer>> offers2;
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -746,8 +681,7 @@ TEST_P(PersistentVolumeTest, MasterFailover)
Clock::settle();
Clock::resume();
- AWAIT_READY(slaveReregistered);
- AWAIT_READY(slaveReady2);
+ AWAIT_READY(updateSlaveMessage2);
AWAIT_READY(offers2);
ASSERT_FALSE(offers2->empty());
@@ -773,7 +707,8 @@ TEST_P(PersistentVolumeTest, IncompatibleCheckpointedResources)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
MockExecutor exec(DEFAULT_EXECUTOR_ID);
TestContainerizer containerizer(&exec);
@@ -790,7 +725,7 @@ TEST_P(PersistentVolumeTest, IncompatibleCheckpointedResources)
slave1.get()->start();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -879,7 +814,8 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -887,7 +823,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -1016,11 +952,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
driver.acceptOffers({offer.id()}, {DESTROY(volume)});
AWAIT_READY(message);
- if (::testing::get<1>(GetParam()) == ENABLED) {
- EXPECT_TRUE(message->contains(volume));
- } else {
- EXPECT_FALSE(message->contains(volume));
- }
+ EXPECT_TRUE(message->contains(volume));
// Ensure that operation message reaches the slave.
Clock::settle();
@@ -1031,7 +963,7 @@ TEST_P(PersistentVolumeTest, AccessPersistentVolume)
// delete all of the files and subdirectories underneath it). For
// non-MOUNT disks, the volume directory should be removed when the
// volume is destroyed.
- if (::testing::get<0>(GetParam()) == MOUNT) {
+ if (GetParam() == MOUNT) {
EXPECT_TRUE(os::exists(volumePath));
Try<list<string>> files = ::fs::list(path::join(volumePath, "*"));
@@ -1059,13 +991,14 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleTasks)
slaveFlags.resources =
"cpus:2;mem:1024;disk(" + string(DEFAULT_TEST_ROLE) + "):1024";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -1182,7 +1115,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeRescindOnDestroy)
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1190,7 +1124,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeRescindOnDestroy)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// 1. Create framework1 so that all resources are offered to this framework.
FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -1362,7 +1296,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleFrameworks)
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1370,7 +1305,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleFrameworks)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// 1. Create framework1 so that all resources are offered to this framework.
FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -1557,12 +1492,13 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady1 = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage1 =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady1);
+ AWAIT_READY(updateSlaveMessage1);
// Create the framework with SHARED_RESOURCES capability.
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -1648,10 +1584,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
EXPECT_CALL(sched, registered(&driver, _, _));
- Future<SlaveReregisteredMessage> slaveReregistered =
- FUTURE_PROTOBUF(SlaveReregisteredMessage(), _, _);
-
- Future<Nothing> slaveReady2 = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage2 =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Future<vector<Offer>> offers2;
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -1665,8 +1599,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMasterFailover)
// slave will do a re-registration.
detector.appoint(master.get()->pid);
- AWAIT_READY(slaveReregistered);
- AWAIT_READY(slaveReady2);
+ AWAIT_READY(updateSlaveMessage2);
AWAIT_READY(offers2);
ASSERT_FALSE(offers2->empty());
@@ -1715,7 +1648,8 @@ TEST_P(PersistentVolumeTest, DestroyPersistentVolumeMultipleTasks)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1723,7 +1657,7 @@ TEST_P(PersistentVolumeTest, DestroyPersistentVolumeMultipleTasks)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler/framework.
MockScheduler sched;
@@ -1935,7 +1869,8 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleIterations)
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1943,7 +1878,7 @@ TEST_P(PersistentVolumeTest, SharedPersistentVolumeMultipleIterations)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// 1. Create framework so that all resources are offered to this framework.
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
@@ -2080,13 +2015,14 @@ TEST_P(PersistentVolumeTest, SlaveRecovery)
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, DEFAULT_TEST_ROLE);
@@ -2250,7 +2186,8 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2258,7 +2195,7 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler/framework.
MockScheduler sched;
@@ -2332,11 +2269,7 @@ TEST_P(PersistentVolumeTest, GoodACLCreateThenDestroy)
filters);
AWAIT_READY(message2);
- if (::testing::get<1>(GetParam()) == ENABLED) {
- EXPECT_TRUE(message2->contains(volume));
- } else {
- EXPECT_FALSE(message2->contains(volume));
- }
+ EXPECT_TRUE(message2->contains(volume));
// Expect an offer that does not contain the persistent volume.
EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -2406,7 +2339,8 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2414,7 +2348,7 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler/framework.
MockScheduler sched;
@@ -2504,11 +2438,7 @@ TEST_P(PersistentVolumeTest, GoodACLNoPrincipal)
// Check that the persistent volume was not created.
EXPECT_FALSE(Resources(offer.resources()).contains(
allocatedResources(volume, frameworkInfo.roles(0))));
- if (::testing::get<1>(GetParam()) == ENABLED) {
- EXPECT_TRUE(message2->contains(volume));
- } else {
- EXPECT_FALSE(message2->contains(volume));
- }
+ EXPECT_TRUE(message2->contains(volume));
driver.stop();
driver.join();
@@ -2571,7 +2501,8 @@ TEST_P(PersistentVolumeTest, BadACLNoPrincipal)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2579,7 +2510,7 @@ TEST_P(PersistentVolumeTest, BadACLNoPrincipal)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler/framework.
MockScheduler sched1;
@@ -2799,7 +2730,8 @@ TEST_P(PersistentVolumeTest, BadACLDropCreateAndDestroy)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = getSlaveResources();
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2807,7 +2739,7 @@ TEST_P(PersistentVolumeTest, BadACLDropCreateAndDestroy)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler/framework.
MockScheduler sched1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/reservation_endpoints_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_endpoints_tests.cpp b/src/tests/reservation_endpoints_tests.cpp
index 51146ea..61af7ac 100644
--- a/src/tests/reservation_endpoints_tests.cpp
+++ b/src/tests/reservation_endpoints_tests.cpp
@@ -1528,22 +1528,22 @@ TEST_F(ReservationEndpointsTest, AgentStateEndpointResources)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:4;mem:2048;disk:4096;cpus(role):2;mem(role):512";
- Future<SlaveRegisteredMessage> slaveRegisteredMessage =
- FUTURE_PROTOBUF(SlaveRegisteredMessage(), master.get()->pid, _);
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(agent);
- AWAIT_READY(slaveRegisteredMessage);
- const SlaveID& slaveId = slaveRegisteredMessage->slave_id();
+ AWAIT_READY(updateSlaveMessage);
+ const SlaveID& slaveId = updateSlaveMessage->slave_id();
Resources unreserved = Resources::parse("cpus:1;mem:512;disk:1024").get();
Resources dynamicallyReserved = unreserved.pushReservation(
createDynamicReservationInfo("role1", DEFAULT_CREDENTIAL.principal()));
- Future<CheckpointResourcesMessage> checkpointResources =
- FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, _);
+ Future<UpdateOperationStatusMessage> updateOperationStatusMessage =
+ FUTURE_PROTOBUF(UpdateOperationStatusMessage(), _, _);
{
Future<Response> response = process::http::post(
@@ -1555,10 +1555,10 @@ TEST_F(ReservationEndpointsTest, AgentStateEndpointResources)
AWAIT_EXPECT_RESPONSE_STATUS_EQ(Accepted().status, response);
}
- // Now verify the reservations from the agent's /state endpoint. We wait
- // for the agent to receive and process CheckpointResourcesMessage first
- // because dynamic reservations are propgated to the agent asynchronously.
- AWAIT_READY(checkpointResources);
+ // Now verify the reservations from the agent's /state endpoint. We wait for
+ // the agent to receive and process the `ApplyOperationMessage` and respond
+ // with an initial operation status update.
+ AWAIT_READY(updateOperationStatusMessage);
// Make sure CheckpointResourcesMessage handling is completed
// before proceeding.
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/reservation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_tests.cpp b/src/tests/reservation_tests.cpp
index 8d8e9c8..5570df2 100644
--- a/src/tests/reservation_tests.cpp
+++ b/src/tests/reservation_tests.cpp
@@ -77,124 +77,66 @@ namespace mesos {
namespace internal {
namespace tests {
-enum ResourceProviderCapability
-{
- DISABLED,
- ENABLED
-};
-
-
-class ReservationTest
- : public MesosTest,
- public ::testing::WithParamInterface<ResourceProviderCapability>
+class ReservationTest : public MesosTest
{
public:
- slave::Flags CreateSlaveFlags() override
- {
- slave::Flags slaveFlags = MesosTest::CreateSlaveFlags();
- if (GetParam() == ENABLED) {
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
- }
-
- return slaveFlags;
- }
-
// Depending on the agent capability, the master will send different
// messages to the agent when a reservation is applied.
template <typename To>
Future<Resources> getOperationMessage(To to)
{
- if (GetParam() == ENABLED) {
- return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
- .then([](const ApplyOperationMessage& message) {
- switch (message.operation_info().type()) {
- case Offer::Operation::UNKNOWN:
- case Offer::Operation::LAUNCH:
- case Offer::Operation::LAUNCH_GROUP:
- case Offer::Operation::CREATE_VOLUME:
- case Offer::Operation::DESTROY_VOLUME:
- case Offer::Operation::CREATE_BLOCK:
- case Offer::Operation::DESTROY_BLOCK:
- UNREACHABLE();
- case Offer::Operation::RESERVE: {
- Resources resources =
- message.operation_info().reserve().resources();
- resources.unallocate();
-
- return resources;
- }
- case Offer::Operation::UNRESERVE: {
- Resources resources =
- message.operation_info().unreserve().resources();
- resources.unallocate();
-
- return resources;
- }
- case Offer::Operation::CREATE: {
- Resources resources = message.operation_info().create().volumes();
- resources.unallocate();
-
- return resources;
- }
- case Offer::Operation::DESTROY: {
- Resources resources =
- message.operation_info().destroy().volumes();
- resources.unallocate();
-
- return resources;
- }
+ return FUTURE_PROTOBUF(ApplyOperationMessage(), _, to)
+ .then([](const ApplyOperationMessage& message) {
+ switch (message.operation_info().type()) {
+ case Offer::Operation::UNKNOWN:
+ case Offer::Operation::LAUNCH:
+ case Offer::Operation::LAUNCH_GROUP:
+ case Offer::Operation::CREATE_VOLUME:
+ case Offer::Operation::DESTROY_VOLUME:
+ case Offer::Operation::CREATE_BLOCK:
+ case Offer::Operation::DESTROY_BLOCK:
+ UNREACHABLE();
+ case Offer::Operation::RESERVE: {
+ Resources resources =
+ message.operation_info().reserve().resources();
+ resources.unallocate();
+
+ return resources;
}
+ case Offer::Operation::UNRESERVE: {
+ Resources resources =
+ message.operation_info().unreserve().resources();
+ resources.unallocate();
- UNREACHABLE();
- });
- }
+ return resources;
+ }
+ case Offer::Operation::CREATE: {
+ Resources resources = message.operation_info().create().volumes();
+ resources.unallocate();
- return FUTURE_PROTOBUF(CheckpointResourcesMessage(), _, to)
- .then([](const CheckpointResourcesMessage& message) {
- return Resources(message.resources());
- });
- }
+ return resources;
+ }
+ case Offer::Operation::DESTROY: {
+ Resources resources = message.operation_info().destroy().volumes();
+ resources.unallocate();
- // Agents with enabled 'RESOURCE_PROVIDER' capability will send a
- // 'UpdateSlaveMessage' after (re-)registration. Offers will be
- // rescinded if they were created prior to this message. Hence, we
- // have to wait for this message before accepting offers.
- Future<Nothing> getSlaveReady()
- {
- if (GetParam() == ENABLED) {
- return FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _).then([] {
- return Nothing();
- });
- }
+ return resources;
+ }
+ }
- return Nothing();
+ UNREACHABLE();
+ });
}
};
-INSTANTIATE_TEST_CASE_P(
- ResourceProviderCapability,
- ReservationTest,
- ::testing::Values(
- ResourceProviderCapability::DISABLED,
- ResourceProviderCapability::ENABLED));
-
-
// This tests that a framework can send back a Reserve operation
// as a response to an offer, which updates the resources in the
// allocator and results in the reserved resources being reoffered to
// the framework. The framework then sends back an Unreserved offer
// operation to unreserve the reserved resources. Finally, We test
// that the framework receives the unreserved resources.
-TEST_P(ReservationTest, ReserveThenUnreserve)
+TEST_F(ReservationTest, ReserveThenUnreserve)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -209,13 +151,14 @@ TEST_P(ReservationTest, ReserveThenUnreserve)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -295,7 +238,7 @@ TEST_P(ReservationTest, ReserveThenUnreserve)
// the framework. The framework then sends back a new resource reservation
// request which involves a floating point value for the resources being
// reserved, which in turn triggers a problematic floating point comparison.
-TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
+TEST_F(ReservationTest, ReserveTwiceWithDoubleValue)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -309,13 +252,14 @@ TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:24;mem:4096";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -401,7 +345,7 @@ TEST_P(ReservationTest, ReserveTwiceWithDoubleValue)
// sends back an Unreserved operation to unreserve the reserved
// resources. We test that the framework receives the unreserved
// resources.
-TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
+TEST_F(ReservationTest, ReserveAndLaunchThenUnreserve)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -419,7 +363,8 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
@@ -427,7 +372,7 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
StartSlave(detector.get(), &containerizer, slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -524,7 +469,7 @@ TEST_P(ReservationTest, ReserveAndLaunchThenUnreserve)
// the next resource offer, framework1 declines the offer. This
// should lead to framework2 receiving the resources that framework1
// reserved.
-TEST_P(ReservationTest, ReserveShareWithinRole)
+TEST_F(ReservationTest, ReserveShareWithinRole)
{
string role = "role";
@@ -546,13 +491,14 @@ TEST_P(ReservationTest, ReserveShareWithinRole)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched1;
MesosSchedulerDriver driver1(
@@ -644,7 +590,7 @@ TEST_P(ReservationTest, ReserveShareWithinRole)
// This tests that a Reserve operation where the specified resources
// does not exist in the given offer (too large, in this case) is
// dropped.
-TEST_P(ReservationTest, DropReserveTooLarge)
+TEST_F(ReservationTest, DropReserveTooLarge)
{
TestAllocator<> allocator;
@@ -665,13 +611,14 @@ TEST_P(ReservationTest, DropReserveTooLarge)
EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _));
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -742,7 +689,7 @@ TEST_P(ReservationTest, DropReserveTooLarge)
// This test verifies that the slave checkpoints the resources for
// dynamic reservations to the disk, recovers them upon restart, and
// sends them to the master during re-registration.
-TEST_P(ReservationTest, ResourcesCheckpointing)
+TEST_F(ReservationTest, ResourcesCheckpointing)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -758,13 +705,14 @@ TEST_P(ReservationTest, ResourcesCheckpointing)
slaveFlags.recover = "reconnect";
slaveFlags.resources = "cpus:8;mem:4096";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -839,7 +787,7 @@ TEST_P(ReservationTest, ResourcesCheckpointing)
// This test verifies the case where a slave that has checkpointed
// dynamic reservations reregisters with a failed over master, and the
// dynamic reservations are later correctly offered to the framework.
-TEST_P(ReservationTest, MasterFailover)
+TEST_F(ReservationTest, MasterFailover)
{
// Pause the cock and control it manually in order to
// control the timing of the offer cycle.
@@ -858,7 +806,8 @@ TEST_P(ReservationTest, MasterFailover)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:8;mem:2048";
- Future<Nothing> slaveReady1 = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
StandaloneMasterDetector detector(master1.get()->pid);
@@ -867,7 +816,7 @@ TEST_P(ReservationTest, MasterFailover)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady1);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
TestingMesosSchedulerDriver driver(&sched, &detector, frameworkInfo);
@@ -965,7 +914,7 @@ TEST_P(ReservationTest, MasterFailover)
// This test verifies that a slave can restart as long as the
// checkpointed resources it recovers are compatible with the slave
// resources specified using the '--resources' flag.
-TEST_P(ReservationTest, CompatibleCheckpointedResources)
+TEST_F(ReservationTest, CompatibleCheckpointedResources)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -980,7 +929,8 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:8;mem:4096";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
MockExecutor exec(DEFAULT_EXECUTOR_ID);
TestContainerizer containerizer(&exec);
@@ -998,7 +948,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
slave1.get()->start();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -1088,7 +1038,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResources)
// checkpointed resources (including persistent volumes) it recovers
// are compatible with the slave resources specified using the
// '--resources' flag.
-TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
+TEST_F(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -1103,7 +1053,8 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:8;mem:4096;disk:2048";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
MockExecutor exec(DEFAULT_EXECUTOR_ID);
TestContainerizer containerizer(&exec);
@@ -1121,7 +1072,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
slave1.get()->start();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -1251,7 +1202,7 @@ TEST_P(ReservationTest, CompatibleCheckpointedResourcesWithPersistentVolumes)
// This test verifies that a slave will refuse to start if the
// checkpointed resources it recovers are not compatible with the
// slave resources specified using the '--resources' flag.
-TEST_P(ReservationTest, IncompatibleCheckpointedResources)
+TEST_F(ReservationTest, IncompatibleCheckpointedResources)
{
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
frameworkInfo.set_roles(0, "role");
@@ -1266,7 +1217,8 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:8;mem:4096";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
MockExecutor exec(DEFAULT_EXECUTOR_ID);
TestContainerizer containerizer(&exec);
@@ -1284,7 +1236,7 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
slave1.get()->start();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -1371,7 +1323,7 @@ TEST_P(ReservationTest, IncompatibleCheckpointedResources)
// This test verifies that reserve and unreserve operations complete
// successfully when authorization succeeds.
-TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
+TEST_F(ReservationTest, GoodACLReserveThenUnreserve)
{
ACLs acls;
@@ -1403,13 +1355,14 @@ TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler.
MockScheduler sched;
@@ -1485,7 +1438,7 @@ TEST_P(ReservationTest, GoodACLReserveThenUnreserve)
// This test verifies that a reserve operation
// gets dropped if authorization fails.
-TEST_P(ReservationTest, BadACLDropReserve)
+TEST_F(ReservationTest, BadACLDropReserve)
{
ACLs acls;
@@ -1510,13 +1463,14 @@ TEST_P(ReservationTest, BadACLDropReserve)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler.
MockScheduler sched;
@@ -1577,7 +1531,7 @@ TEST_P(ReservationTest, BadACLDropReserve)
// This test verifies that an unreserve operation
// gets dropped if authorization fails.
-TEST_P(ReservationTest, BadACLDropUnreserve)
+TEST_F(ReservationTest, BadACLDropUnreserve)
{
ACLs acls;
@@ -1607,13 +1561,14 @@ TEST_P(ReservationTest, BadACLDropUnreserve)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:2;mem:1024";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler.
MockScheduler sched;
@@ -1706,7 +1661,7 @@ TEST_P(ReservationTest, BadACLDropUnreserve)
// Tests a couple more complex combinations of `RESERVE`, `UNRESERVE`, and
// `LAUNCH` operations to verify that they work with authorization.
-TEST_P(ReservationTest, ACLMultipleOperations)
+TEST_F(ReservationTest, ACLMultipleOperations)
{
// Pause the clock and control it manually in order to
// control the timing of the offer cycle.
@@ -1743,7 +1698,8 @@ TEST_P(ReservationTest, ACLMultipleOperations)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:2;mem:1024";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
@@ -1753,7 +1709,7 @@ TEST_P(ReservationTest, ACLMultipleOperations)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
// Create a scheduler.
MockScheduler sched;
@@ -1921,7 +1877,7 @@ TEST_P(ReservationTest, ACLMultipleOperations)
// Confirms that reserve and unreserve operations work without authentication
// when a framework has no principal.
-TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
+TEST_F(ReservationTest, WithoutAuthenticationWithoutPrincipal)
{
// Pause the clock and control it manually in order to
// control the timing of the offer cycle.
@@ -1942,7 +1898,8 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -1950,7 +1907,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(&sched, frameworkInfo, master.get()->pid);
@@ -2035,7 +1992,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithoutPrincipal)
// Confirms that reserve and unreserve operations work without authentication
// when a framework has a principal.
-TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
+TEST_F(ReservationTest, WithoutAuthenticationWithPrincipal)
{
// Pause the clock and control it manually in order to
// control the timing of the offer cycle.
@@ -2055,7 +2012,8 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
@@ -2063,7 +2021,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
Clock::advance(slaveFlags.registration_backoff_factor);
Clock::settle();
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(&sched, frameworkInfo, master.get()->pid);
@@ -2149,7 +2107,7 @@ TEST_P(ReservationTest, WithoutAuthenticationWithPrincipal)
// This tests that a framework can't reserve resources using a role different
// from the one it registered with.
-TEST_P(ReservationTest, DropReserveWithDifferentRole)
+TEST_F(ReservationTest, DropReserveWithDifferentRole)
{
const string frameworkRole = "role";
@@ -2168,7 +2126,8 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
slave::Flags agentFlags = CreateSlaveFlags();
agentFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
EXPECT_CALL(allocator, addSlave(_, _, _, _, _, _));
@@ -2176,7 +2135,7 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), agentFlags);
ASSERT_SOME(agent);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched;
MesosSchedulerDriver driver(
@@ -2245,7 +2204,7 @@ TEST_P(ReservationTest, DropReserveWithDifferentRole)
// This test ensures that a framework can't unreserve resources
// reserved by a framework with another role.
-TEST_P(ReservationTest, PreventUnreservingAlienResources)
+TEST_F(ReservationTest, PreventUnreservingAlienResources)
{
const string frameworkRole1 = "role1";
FrameworkInfo frameworkInfo1 = DEFAULT_FRAMEWORK_INFO;
@@ -2269,13 +2228,14 @@ TEST_P(ReservationTest, PreventUnreservingAlienResources)
slave::Flags agentFlags = CreateSlaveFlags();
agentFlags.resources = "cpus:1;mem:512";
- Future<Nothing> slaveReady = getSlaveReady();
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> agent = StartSlave(detector.get(), agentFlags);
ASSERT_SOME(agent);
- AWAIT_READY(slaveReady);
+ AWAIT_READY(updateSlaveMessage);
MockScheduler sched1;
MesosSchedulerDriver driver1(
@@ -2434,6 +2394,18 @@ TEST_F(ReservationCheckpointingTest, SendingCheckpointResourcesMessage)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.resources = "cpus:8;mem:4096";
+ // The master only sends `CheckpointResourcesMessage` to
+ // agents which are not resource provider-capable.
+ slaveFlags.agent_features = SlaveCapabilities();
+
+ foreach (
+ const SlaveInfo::Capability& slaveCapability,
+ slave::AGENT_CAPABILITIES()) {
+ if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+ slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+ }
+ }
+
Owned<MasterDetector> detector = master.get()->createDetector();
Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/resource_provider_manager_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/resource_provider_manager_tests.cpp b/src/tests/resource_provider_manager_tests.cpp
index 718436e..d947bd0 100644
--- a/src/tests/resource_provider_manager_tests.cpp
+++ b/src/tests/resource_provider_manager_tests.cpp
@@ -111,16 +111,6 @@ public:
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
return slaveFlags;
}
};
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/scheduler_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/scheduler_tests.cpp b/src/tests/scheduler_tests.cpp
index 1b9b39f..749420a 100644
--- a/src/tests/scheduler_tests.cpp
+++ b/src/tests/scheduler_tests.cpp
@@ -1019,20 +1019,9 @@ TEST_P(SchedulerTest, OperationFeedbackValidationWithResourceProviderCapability)
Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
ASSERT_SOME(master);
- slave::Flags slaveFlags = CreateSlaveFlags();
-
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Owned<MasterDetector> detector = master.get()->createDetector();
- Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
+ Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
ASSERT_SOME(slave);
auto scheduler = std::make_shared<v1::MockHTTPScheduler>();
@@ -1127,7 +1116,19 @@ TEST_P(SchedulerTest, OperationFeedbackValidationNoResourceProviderCapability)
Owned<MasterDetector> detector = master.get()->createDetector();
- Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
+ slave::Flags slaveFlags = CreateSlaveFlags();
+
+ slaveFlags.agent_features = SlaveCapabilities();
+
+ foreach (
+ const SlaveInfo::Capability& slaveCapability,
+ slave::AGENT_CAPABILITIES()) {
+ if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+ slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+ }
+ }
+
+ Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
ASSERT_SOME(slave);
auto scheduler = std::make_shared<v1::MockHTTPScheduler>();
@@ -1202,20 +1203,9 @@ TEST_P(SchedulerTest, OperationFeedbackValidationSchedulerDriverFramework)
Try<Owned<cluster::Master>> master = StartMaster(masterFlags);
ASSERT_SOME(master);
- slave::Flags slaveFlags = CreateSlaveFlags();
-
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Owned<MasterDetector> detector = master.get()->createDetector();
- Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), slaveFlags);
+ Try<Owned<cluster::Slave>> slave = StartSlave(detector.get());
ASSERT_SOME(slave);
FrameworkInfo frameworkInfo = DEFAULT_FRAMEWORK_INFO;
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/slave_recovery_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_recovery_tests.cpp b/src/tests/slave_recovery_tests.cpp
index 4a5860c..afe8b8a 100644
--- a/src/tests/slave_recovery_tests.cpp
+++ b/src/tests/slave_recovery_tests.cpp
@@ -4865,6 +4865,18 @@ TYPED_TEST(SlaveRecoveryTest, CheckpointedResources)
slave::Flags slaveFlags = this->CreateSlaveFlags();
+ // The master only sends `CheckpointResourcesMessage` to
+ // agents which are not resource provider-capable.
+ slaveFlags.agent_features = SlaveCapabilities();
+
+ foreach (
+ const SlaveInfo::Capability& slaveCapability,
+ slave::AGENT_CAPABILITIES()) {
+ if (slaveCapability.type() != SlaveInfo::Capability::RESOURCE_PROVIDER) {
+ slaveFlags.agent_features->add_capabilities()->CopyFrom(slaveCapability);
+ }
+ }
+
StandaloneMasterDetector detector(master.get()->pid);
Try<Owned<cluster::Slave>> slave = this->StartSlave(&detector, slaveFlags);
ASSERT_SOME(slave);
@@ -4960,16 +4972,6 @@ TYPED_TEST(SlaveRecoveryTest, CheckpointedResourcesResourceProviderCapable)
slave::Flags slaveFlags = this->CreateSlaveFlags();
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Future<UpdateSlaveMessage> updateSlaveMessage =
FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
http://git-wip-us.apache.org/repos/asf/mesos/blob/ebe92c9b/src/tests/slave_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_tests.cpp b/src/tests/slave_tests.cpp
index 028cd32..d695622 100644
--- a/src/tests/slave_tests.cpp
+++ b/src/tests/slave_tests.cpp
@@ -1610,10 +1610,12 @@ TEST_F(SlaveTest, StateEndpoint)
EXPECT_FALSE(state.values["capabilities"].as<JSON::Array>().values.empty());
JSON::Value slaveCapabilities = state.values.at("capabilities");
- // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE, and
- // RESERVATION_REFINEMENT capabilities in current implementation.
+ // Agents should always have MULTI_ROLE, HIERARCHICAL_ROLE,
+ // RESERVATION_REFINEMENT, and RESOURCE_PROVIDER capabilities
+ // in current implementation.
Try<JSON::Value> expectedCapabilities = JSON::parse(
- "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\"]");
+ "[\"MULTI_ROLE\",\"HIERARCHICAL_ROLE\",\"RESERVATION_REFINEMENT\","
+ "\"RESOURCE_PROVIDER\"]");
ASSERT_SOME(expectedCapabilities);
EXPECT_TRUE(slaveCapabilities.contains(expectedCapabilities.get()));
@@ -9636,16 +9638,6 @@ TEST_F(SlaveTest, ResourceProviderSubscribe)
// Disable HTTP authentication to simplify resource provider interactions.
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
StandaloneMasterDetector detector(master.get()->pid);
Try<Owned<cluster::Slave>> slave = StartSlave(&detector, slaveFlags);
ASSERT_SOME(slave);
@@ -9753,16 +9745,6 @@ TEST_F_TEMP_DISABLED_ON_WINDOWS(SlaveTest, ResourceProviderPublishAll)
slave::Flags flags = CreateSlaveFlags();
flags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- flags.agent_features = SlaveCapabilities();
- flags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Future<SlaveRegisteredMessage> slaveRegisteredMessage =
FUTURE_PROTOBUF(SlaveRegisteredMessage(), _, _);
@@ -10047,16 +10029,6 @@ TEST_F(SlaveTest, ResourceProviderReconciliation)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Future<UpdateSlaveMessage> updateSlaveMessage =
FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
@@ -10264,16 +10236,6 @@ TEST_F(SlaveTest, RunTaskResourceVersions)
slave::Flags slaveFlags = CreateSlaveFlags();
slaveFlags.authenticate_http_readwrite = false;
- // Set the resource provider capability.
- vector<SlaveInfo::Capability> capabilities = slave::AGENT_CAPABILITIES();
- SlaveInfo::Capability capability;
- capability.set_type(SlaveInfo::Capability::RESOURCE_PROVIDER);
- capabilities.push_back(capability);
-
- slaveFlags.agent_features = SlaveCapabilities();
- slaveFlags.agent_features->mutable_capabilities()->CopyFrom(
- {capabilities.begin(), capabilities.end()});
-
Future<UpdateSlaveMessage> updateSlaveMessage =
FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);