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 {

Reply via email to