Moved ProvisionerProcess to header for testing. Review: https://reviews.apache.org/r/39868
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/ecc28e12 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/ecc28e12 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/ecc28e12 Branch: refs/heads/master Commit: ecc28e12e04e4eb1b8ff76b577746281c35f6b20 Parents: 782292d Author: Timothy Chen <[email protected]> Authored: Tue Oct 27 09:32:41 2015 +0000 Committer: Timothy Chen <[email protected]> Committed: Thu Nov 5 18:16:08 2015 -0800 ---------------------------------------------------------------------- .../mesos/provisioner/provisioner.cpp | 59 ----------------- .../mesos/provisioner/provisioner.hpp | 67 +++++++++++++++++++- 2 files changed, 65 insertions(+), 61 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/ecc28e12/src/slave/containerizer/mesos/provisioner/provisioner.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.cpp b/src/slave/containerizer/mesos/provisioner/provisioner.cpp index e99c1c9..74e05ce 100644 --- a/src/slave/containerizer/mesos/provisioner/provisioner.cpp +++ b/src/slave/containerizer/mesos/provisioner/provisioner.cpp @@ -23,9 +23,6 @@ #include <process/dispatch.hpp> #include <process/process.hpp> -#include <process/metrics/counter.hpp> -#include <process/metrics/metrics.hpp> - #include <stout/foreach.hpp> #include <stout/hashmap.hpp> #include <stout/hashset.hpp> @@ -52,62 +49,6 @@ namespace mesos { namespace internal { namespace slave { -class ProvisionerProcess : public Process<ProvisionerProcess> -{ -public: - ProvisionerProcess( - const Flags& flags, - const string& rootDir, - const hashmap<Image::Type, Owned<Store>>& stores, - const hashmap<string, Owned<Backend>>& backends); - - Future<Nothing> recover( - const list<ContainerState>& states, - const hashset<ContainerID>& orphans); - - Future<string> provision( - const ContainerID& containerId, - const Image& image); - - Future<bool> destroy(const ContainerID& containerId); - -private: - Future<string> _provision( - const ContainerID& containerId, - const vector<string>& layers); - - Future<bool> _destroy(const ContainerID& containerId); - - const Flags flags; - - // Absolute path to the provisioner root directory. It can be - // derived from '--work_dir' but we keep a separate copy here - // because we converted it into an absolute path so managed rootfs - // paths match the ones in 'mountinfo' (important if mount-based - // backends are used). - const string rootDir; - - const hashmap<Image::Type, Owned<Store>> stores; - const hashmap<string, Owned<Backend>> backends; - - struct Info - { - // Mappings: backend -> {rootfsId, ...} - hashmap<string, hashset<string>> rootfses; - }; - - hashmap<ContainerID, Owned<Info>> infos; - - struct Metrics - { - Metrics(); - ~Metrics(); - - process::metrics::Counter remove_container_errors; - } metrics; -}; - - Try<Owned<Provisioner>> Provisioner::create( const Flags& flags, Fetcher* fetcher) http://git-wip-us.apache.org/repos/asf/mesos/blob/ecc28e12/src/slave/containerizer/mesos/provisioner/provisioner.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.hpp b/src/slave/containerizer/mesos/provisioner/provisioner.hpp index 912fc5a..e64d69a 100644 --- a/src/slave/containerizer/mesos/provisioner/provisioner.hpp +++ b/src/slave/containerizer/mesos/provisioner/provisioner.hpp @@ -31,6 +31,9 @@ #include <process/future.hpp> #include <process/owned.hpp> +#include <process/metrics/counter.hpp> +#include <process/metrics/metrics.hpp> + #include "slave/flags.hpp" #include "slave/containerizer/fetcher.hpp" @@ -40,7 +43,9 @@ namespace internal { namespace slave { // Forward declaration. +class Backend; class ProvisionerProcess; +class Store; class Provisioner @@ -51,6 +56,9 @@ public: const Flags& flags, Fetcher* fetcher); + // Available only for testing. + explicit Provisioner(process::Owned<ProvisionerProcess> process); + // NOTE: Made 'virtual' for mocking and testing. virtual ~Provisioner(); @@ -79,14 +87,69 @@ protected: Provisioner() {} // For creating mock object. private: - explicit Provisioner(process::Owned<ProvisionerProcess> process); - Provisioner(const Provisioner&) = delete; // Not copyable. Provisioner& operator=(const Provisioner&) = delete; // Not assignable. process::Owned<ProvisionerProcess> process; }; + +// Expose this class for testing only. +class ProvisionerProcess : public process::Process<ProvisionerProcess> +{ +public: + ProvisionerProcess( + const Flags& flags, + const std::string& rootDir, + const hashmap<Image::Type, process::Owned<Store>>& stores, + const hashmap<std::string, process::Owned<Backend>>& backends); + + process::Future<Nothing> recover( + const std::list<mesos::slave::ContainerState>& states, + const hashset<ContainerID>& orphans); + + process::Future<std::string> provision( + const ContainerID& containerId, + const Image& image); + + process::Future<bool> destroy(const ContainerID& containerId); + +private: + process::Future<std::string> _provision( + const ContainerID& containerId, + const std::vector<std::string>& layers); + + process::Future<bool> _destroy(const ContainerID& containerId); + + const Flags flags; + + // Absolute path to the provisioner root directory. It can be + // derived from '--work_dir' but we keep a separate copy here + // because we converted it into an absolute path so managed rootfs + // paths match the ones in 'mountinfo' (important if mount-based + // backends are used). + const std::string rootDir; + + const hashmap<Image::Type, process::Owned<Store>> stores; + const hashmap<std::string, process::Owned<Backend>> backends; + + struct Info + { + // Mappings: backend -> {rootfsId, ...} + hashmap<std::string, hashset<std::string>> rootfses; + }; + + hashmap<ContainerID, process::Owned<Info>> infos; + + struct Metrics + { + Metrics(); + ~Metrics(); + + process::metrics::Counter remove_container_errors; + } metrics; +}; + } // namespace slave { } // namespace internal { } // namespace mesos {
