You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by al...@apache.org on 2018/04/25 15:13:12 UTC
[8/9] mesos git commit: Revert "Externalized creation of resource
provider manager backing storage."
Revert "Externalized creation of resource provider manager backing storage."
This reverts commit 6f6413b618b4d7aec7c8f8e6fa9e3542f1af2b9c.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/ed92ee4e
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/ed92ee4e
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/ed92ee4e
Branch: refs/heads/master
Commit: ed92ee4e61c44c4fe81da277bb68cee56c818fa7
Parents: 6d56382
Author: Alexander Rukletsov <al...@apache.org>
Authored: Wed Apr 25 17:09:24 2018 +0200
Committer: Alexander Rukletsov <al...@apache.org>
Committed: Wed Apr 25 17:09:24 2018 +0200
----------------------------------------------------------------------
src/resource_provider/registrar.cpp | 49 ++++++++++++++++++----
src/resource_provider/registrar.hpp | 15 +++----
src/tests/resource_provider_manager_tests.cpp | 27 +++++++++++-
3 files changed, 75 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/ed92ee4e/src/resource_provider/registrar.cpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/registrar.cpp b/src/resource_provider/registrar.cpp
index dbb55dd..92ef9ae 100644
--- a/src/resource_provider/registrar.cpp
+++ b/src/resource_provider/registrar.cpp
@@ -27,6 +27,10 @@
#include <mesos/state/in_memory.hpp>
+#ifndef __WINDOWS__
+#include <mesos/state/leveldb.hpp>
+#endif // __WINDOWS__
+
#include <mesos/state/protobuf.hpp>
#include <process/defer.hpp>
@@ -49,6 +53,12 @@ using std::string;
using mesos::resource_provider::registry::Registry;
using mesos::resource_provider::registry::ResourceProvider;
+using mesos::state::InMemoryStorage;
+
+#ifndef __WINDOWS__
+using mesos::state::LevelDBStorage;
+#endif // __WINDOWS__
+
using mesos::state::Storage;
using mesos::state::protobuf::Variable;
@@ -86,9 +96,11 @@ bool Registrar::Operation::set()
}
-Try<Owned<Registrar>> Registrar::create(Owned<Storage> storage)
+Try<Owned<Registrar>> Registrar::create(
+ const slave::Flags& slaveFlags,
+ const SlaveID& slaveId)
{
- return new AgentRegistrar(std::move(storage));
+ return new AgentRegistrar(slaveFlags, slaveId);
}
@@ -148,7 +160,7 @@ Try<bool> RemoveResourceProvider::perform(Registry* registry)
class AgentRegistrarProcess : public Process<AgentRegistrarProcess>
{
public:
- AgentRegistrarProcess(Owned<Storage> storage);
+ AgentRegistrarProcess(const slave::Flags& flags, const SlaveID& slaveId);
Future<Nothing> recover();
@@ -179,12 +191,33 @@ private:
deque<Owned<Registrar::Operation>> operations;
bool updating = false;
+
+ static Owned<Storage> createStorage(const std::string& path);
};
-AgentRegistrarProcess::AgentRegistrarProcess(Owned<Storage> _storage)
+Owned<Storage> AgentRegistrarProcess::createStorage(const std::string& path)
+{
+ // The registrar uses LevelDB as underlying storage. Since LevelDB
+ // is currently not supported on Windows (see MESOS-5932), we fall
+ // back to in-memory storage there.
+ //
+ // TODO(bbannier): Remove this Windows workaround once MESOS-5932 is fixed.
+#ifndef __WINDOWS__
+ return Owned<Storage>(new LevelDBStorage(path));
+#else
+ LOG(WARNING)
+ << "Persisting resource provider manager state is not supported on Windows";
+ return Owned<Storage>(new InMemoryStorage());
+#endif // __WINDOWS__
+}
+
+
+AgentRegistrarProcess::AgentRegistrarProcess(
+ const slave::Flags& flags, const SlaveID& slaveId)
: ProcessBase(process::ID::generate("resource-provider-agent-registrar")),
- storage(std::move(_storage)),
+ storage(createStorage(slave::paths::getResourceProviderRegistryPath(
+ flags.work_dir, slaveId))),
state(storage.get()) {}
@@ -322,8 +355,10 @@ void AgentRegistrarProcess::_update(
}
-AgentRegistrar::AgentRegistrar(Owned<Storage> storage)
- : process(new AgentRegistrarProcess(std::move(storage)))
+AgentRegistrar::AgentRegistrar(
+ const slave::Flags& slaveFlags,
+ const SlaveID& slaveId)
+ : process(new AgentRegistrarProcess(slaveFlags, slaveId))
{
process::spawn(process.get(), false);
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/ed92ee4e/src/resource_provider/registrar.hpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/registrar.hpp b/src/resource_provider/registrar.hpp
index 34cb166..39f45b0 100644
--- a/src/resource_provider/registrar.hpp
+++ b/src/resource_provider/registrar.hpp
@@ -19,8 +19,6 @@
#include <memory>
-#include <mesos/state/storage.hpp>
-
#include <process/future.hpp>
#include <process/owned.hpp>
@@ -66,14 +64,15 @@ public:
bool success = false;
};
- // Create a registry on top of generic storage.
- static Try<process::Owned<Registrar>> create(
- process::Owned<state::Storage> storage);
-
// Create a registry on top of a master's persistent state.
static Try<process::Owned<Registrar>> create(
mesos::internal::master::Registrar* registrar);
+ // Create a registry on top of an agent's persistent state.
+ static Try<process::Owned<Registrar>> create(
+ const mesos::internal::slave::Flags& slaveFlags,
+ const SlaveID& slaveId);
+
virtual ~Registrar() = default;
virtual process::Future<Nothing> recover() = 0;
@@ -111,7 +110,9 @@ class AgentRegistrarProcess;
class AgentRegistrar : public Registrar
{
public:
- AgentRegistrar(process::Owned<state::Storage> storage);
+ AgentRegistrar(
+ const mesos::internal::slave::Flags& slaveFlags,
+ const SlaveID& slaveId);
~AgentRegistrar() override;
http://git-wip-us.apache.org/repos/asf/mesos/blob/ed92ee4e/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 72e8122..0de4e79 100644
--- a/src/tests/resource_provider_manager_tests.cpp
+++ b/src/tests/resource_provider_manager_tests.cpp
@@ -825,8 +825,31 @@ TEST_F(ResourceProviderRegistrarTest, AgentRegistrar)
ResourceProviderID resourceProviderId;
resourceProviderId.set_value("foo");
- Owned<mesos::state::Storage> storage(new mesos::state::InMemoryStorage());
- Try<Owned<Registrar>> registrar = Registrar::create(std::move(storage));
+ Try<Owned<cluster::Master>> master = StartMaster();
+ ASSERT_SOME(master);
+
+ Owned<MasterDetector> detector = master.get()->createDetector();
+
+ const slave::Flags flags = CreateSlaveFlags();
+
+ Future<SlaveRegisteredMessage> slaveRegisteredMessage =
+ FUTURE_PROTOBUF(SlaveRegisteredMessage(), master.get()->pid, _);
+
+ Future<UpdateSlaveMessage> updateSlaveMessage =
+ FUTURE_PROTOBUF(UpdateSlaveMessage(), _, _);
+
+ Try<Owned<cluster::Slave>> slave = StartSlave(detector.get(), flags);
+ ASSERT_SOME(slave);
+
+ AWAIT_READY(slaveRegisteredMessage);
+
+ // The agent will send `UpdateSlaveMessage` after it has created its
+ // meta directories. Await the message to make sure the agent
+ // registrar can create its store in the meta hierarchy.
+ AWAIT_READY(updateSlaveMessage);
+
+ Try<Owned<Registrar>> registrar =
+ Registrar::create(flags, slaveRegisteredMessage->slave_id());
ASSERT_SOME(registrar);
ASSERT_NE(nullptr, registrar->get());