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,