You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ch...@apache.org on 2018/06/01 01:32:28 UTC
[02/12] mesos git commit: Added tests of resource provider registrar
recovery.
Added tests of resource provider registrar recovery.
Review: https://reviews.apache.org/r/67009/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/9c8eee35
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/9c8eee35
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/9c8eee35
Branch: refs/heads/master
Commit: 9c8eee35dd317ddd193e2f3bc726cd8adea770b2
Parents: 8b93f2d
Author: Benjamin Bannier <be...@mesosphere.io>
Authored: Thu May 31 15:58:44 2018 -0700
Committer: Chun-Hung Hsiao <ch...@mesosphere.io>
Committed: Thu May 31 18:29:56 2018 -0700
----------------------------------------------------------------------
src/tests/resource_provider_manager_tests.cpp | 172 +++++++++++++++------
1 file changed, 122 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/9c8eee35/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 77a59e4..58bdbf0 100644
--- a/src/tests/resource_provider_manager_tests.cpp
+++ b/src/tests/resource_provider_manager_tests.cpp
@@ -23,6 +23,7 @@
#include <mesos/resources.hpp>
#include <mesos/state/in_memory.hpp>
+#include <mesos/state/leveldb.hpp>
#include <mesos/state/state.hpp>
#include <mesos/v1/mesos.hpp>
@@ -818,81 +819,152 @@ class ResourceProviderRegistrarTest : public tests::MesosTest {};
// Test that the generic resource provider registrar works as expected.
-TEST_F(ResourceProviderRegistrarTest, GenericRegistrar)
+//
+// TODO(bbannier): Enable this test on Windows once MESOS-5932 is resolved.
+#ifndef __WINDOWS__
+TEST_F_TEMP_DISABLED_ON_WINDOWS(ResourceProviderRegistrarTest, GenericRegistrar)
{
ResourceProviderID resourceProviderId;
resourceProviderId.set_value("foo");
- Owned<mesos::state::Storage> storage(new mesos::state::InMemoryStorage());
- Try<Owned<Registrar>> registrar = Registrar::create(std::move(storage));
+ // Perform operations on the resource provider. We use
+ // persistent storage so we can recover the state below.
+ {
+ Owned<mesos::state::Storage> storage(
+ new mesos::state::LevelDBStorage(sandbox.get()));
+ Try<Owned<Registrar>> registrar = Registrar::create(std::move(storage));
+
+ ASSERT_SOME_NE(Owned<Registrar>(nullptr), registrar);
+
+ Future<mesos::resource_provider::registry::Registry> recover =
+ registrar.get()->recover();
+ AWAIT_READY(recover);
+ EXPECT_TRUE(recover->removed_resource_providers().empty());
+
+ Future<bool> admitResourceProvider1 =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new AdmitResourceProvider(resourceProviderId)));
+ AWAIT_READY(admitResourceProvider1);
+ EXPECT_TRUE(admitResourceProvider1.get());
+
+ Future<bool> removeResourceProvider =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new RemoveResourceProvider(resourceProviderId)));
+ AWAIT_READY(removeResourceProvider);
+ EXPECT_TRUE(removeResourceProvider.get());
+
+ // A removed resource provider cannot be admitted again.
+ Future<bool> admitResourceProvider2 =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new AdmitResourceProvider(resourceProviderId)));
+ AWAIT_READY(admitResourceProvider2);
+ EXPECT_FALSE(admitResourceProvider2.get());
+ }
- ASSERT_SOME(registrar);
- ASSERT_NE(nullptr, registrar->get());
+ // Recover and validate the previous registry state.
+ {
+ Owned<mesos::state::Storage> storage(
+ new mesos::state::LevelDBStorage(sandbox.get()));
+ Try<Owned<Registrar>> registrar = Registrar::create(std::move(storage));
- AWAIT_READY(registrar.get()->recover());
+ ASSERT_SOME_NE(Owned<Registrar>(nullptr), registrar);
- Future<bool> admitResourceProvider1 =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new AdmitResourceProvider(resourceProviderId)));
- AWAIT_READY(admitResourceProvider1);
- EXPECT_TRUE(admitResourceProvider1.get());
+ Future<mesos::resource_provider::registry::Registry> recover =
+ registrar.get()->recover();
+ AWAIT_READY(recover);
- Future<bool> removeResourceProvider =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new RemoveResourceProvider(resourceProviderId)));
- AWAIT_READY(removeResourceProvider);
- EXPECT_TRUE(removeResourceProvider.get());
+ EXPECT_TRUE(recover->resource_providers().empty());
+ ASSERT_EQ(1, recover->removed_resource_providers_size());
- // A removed resource provider cannot be admitted again.
- Future<bool> admitResourceProvider2 =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new AdmitResourceProvider(resourceProviderId)));
- AWAIT_READY(admitResourceProvider2);
- EXPECT_FALSE(admitResourceProvider2.get());
+ const mesos::resource_provider::registry::ResourceProvider&
+ resourceProvider = recover->removed_resource_providers(0);
+
+ ASSERT_TRUE(resourceProvider.has_id());
+ EXPECT_EQ(resourceProviderId, resourceProvider.id());
+ }
}
+#endif // __WINDOWS__
// Test that the master resource provider registrar works as expected.
-TEST_F(ResourceProviderRegistrarTest, MasterRegistrar)
+//
+// TODO(bbannier): Enable this test on Windows once MESOS-5932 is resolved.
+#ifndef __WINDOWS__
+TEST_F_TEMP_DISABLED_ON_WINDOWS(ResourceProviderRegistrarTest, MasterRegistrar)
{
ResourceProviderID resourceProviderId;
resourceProviderId.set_value("foo");
- InMemoryStorage storage;
- State state(&storage);
- master::Registrar masterRegistrar(CreateMasterFlags(), &state);
+ // Perform operations on the resource provider. We use
+ // persistent storage so we can recover the state below.
+ {
+ mesos::state::LevelDBStorage storage(sandbox.get());
+ State state(&storage);
+ master::Registrar masterRegistrar(CreateMasterFlags(), &state);
+
+ const MasterInfo masterInfo = protobuf::createMasterInfo({});
+
+ Future<Registry> registry = masterRegistrar.recover(masterInfo);
+ AWAIT_READY(registry);
+
+ Try<Owned<Registrar>> registrar = Registrar::create(
+ &masterRegistrar,
+ registry->resource_provider_registry());
+
+ ASSERT_SOME_NE(Owned<Registrar>(nullptr), registrar);
+
+ Future<bool> admitResourceProvider1 =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new AdmitResourceProvider(resourceProviderId)));
+ AWAIT_READY(admitResourceProvider1);
+ EXPECT_TRUE(admitResourceProvider1.get());
+
+ Future<bool> removeResourceProvider =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new RemoveResourceProvider(resourceProviderId)));
+ AWAIT_READY(removeResourceProvider);
+ EXPECT_TRUE(removeResourceProvider.get());
+
+ // A removed resource provider cannot be admitted again.
+ Future<bool> admitResourceProvider2 =
+ registrar.get()->apply(Owned<Registrar::Operation>(
+ new AdmitResourceProvider(resourceProviderId)));
+ AWAIT_READY(admitResourceProvider2);
+ EXPECT_FALSE(admitResourceProvider2.get());
+ }
+
+ // Recover and validate the previous registry state.
+ {
+ mesos::state::LevelDBStorage storage(sandbox.get());
+ State state(&storage);
+ master::Registrar masterRegistrar(CreateMasterFlags(), &state);
+
+ const MasterInfo masterInfo = protobuf::createMasterInfo({});
- const MasterInfo masterInfo = protobuf::createMasterInfo({});
+ Future<Registry> registry = masterRegistrar.recover(masterInfo);
+ AWAIT_READY(registry);
- Future<Registry> registry = masterRegistrar.recover(masterInfo);
- AWAIT_READY(registry);
+ Try<Owned<Registrar>> registrar = Registrar::create(
+ &masterRegistrar,
+ registry->resource_provider_registry());
- Try<Owned<Registrar>> registrar = Registrar::create(
- &masterRegistrar,
- registry->resource_provider_registry());
+ ASSERT_SOME_NE(Owned<Registrar>(nullptr), registrar);
- ASSERT_SOME(registrar);
- ASSERT_NE(nullptr, registrar->get());
+ Future<mesos::resource_provider::registry::Registry> recover =
+ registrar.get()->recover();
+ AWAIT_READY(recover);
- Future<bool> admitResourceProvider1 =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new AdmitResourceProvider(resourceProviderId)));
- AWAIT_READY(admitResourceProvider1);
- EXPECT_TRUE(admitResourceProvider1.get());
+ EXPECT_TRUE(recover->resource_providers().empty());
+ ASSERT_EQ(1, recover->removed_resource_providers_size());
- Future<bool> removeResourceProvider =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new RemoveResourceProvider(resourceProviderId)));
- AWAIT_READY(removeResourceProvider);
- EXPECT_TRUE(removeResourceProvider.get());
+ const mesos::resource_provider::registry::ResourceProvider&
+ resourceProvider = recover->removed_resource_providers(0);
- // A removed resource provider cannot be admitted again.
- Future<bool> admitResourceProvider2 =
- registrar.get()->apply(Owned<Registrar::Operation>(
- new AdmitResourceProvider(resourceProviderId)));
- AWAIT_READY(admitResourceProvider2);
- EXPECT_FALSE(admitResourceProvider2.get());
+ ASSERT_TRUE(resourceProvider.has_id());
+ EXPECT_EQ(resourceProviderId, resourceProvider.id());
+ }
}
+#endif // __WINDOWS__
// Test that resource provider resources are offered to frameworks,