You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2014/12/04 00:14:09 UTC

[3/8] mesos git commit: Updated Allocator::slaveAdded to take the total resources explicitly.

Updated Allocator::slaveAdded to take the total resources explicitly.

Review: https://reviews.apache.org/r/28665


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/31317b35
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/31317b35
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/31317b35

Branch: refs/heads/master
Commit: 31317b35ba68b423565e4eeb1c3e92f69251402e
Parents: 0cb4c9c
Author: Benjamin Mahler <be...@gmail.com>
Authored: Tue Dec 2 18:04:32 2014 -0800
Committer: Benjamin Mahler <be...@gmail.com>
Committed: Wed Dec 3 14:59:28 2014 -0800

----------------------------------------------------------------------
 src/master/allocator.hpp                      | 12 +++-
 src/master/hierarchical_allocator_process.hpp |  4 +-
 src/master/master.cpp                         |  9 ++-
 src/tests/allocator_tests.cpp                 | 56 ++++++++--------
 src/tests/mesos.hpp                           | 76 +++++++++++++++-------
 src/tests/slave_recovery_tests.cpp            |  2 +-
 6 files changed, 99 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/master/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator.hpp b/src/master/allocator.hpp
index 02d20d0..04eb2a3 100644
--- a/src/master/allocator.hpp
+++ b/src/master/allocator.hpp
@@ -57,9 +57,6 @@ public:
 
   virtual ~AllocatorProcess() {}
 
-  // Explicitely use 'initialize' since we're overloading below.
-  using process::ProcessBase::initialize;
-
   virtual void initialize(
       const Flags& flags,
       const process::PID<Master>& master,
@@ -80,9 +77,15 @@ public:
   virtual void frameworkDeactivated(
       const FrameworkID& frameworkId) = 0;
 
+  // Note that the 'total' resources are passed explicitly because it
+  // includes resources that are dynamically "persisted" on the slave
+  // (e.g. persistent volumes, dynamic reservations, etc).
+  // The slaveInfo resources, on the other hand, correspond directly
+  // to the static --resources flag value on the slave.
   virtual void slaveAdded(
       const SlaveID& slaveId,
       const SlaveInfo& slaveInfo,
+      const Resources& total,
       const hashmap<FrameworkID, Resources>& used) = 0;
 
   virtual void slaveRemoved(
@@ -156,6 +159,7 @@ public:
   void slaveAdded(
       const SlaveID& slaveId,
       const SlaveInfo& slaveInfo,
+      const Resources& total,
       const hashmap<FrameworkID, Resources>& used);
 
   void slaveRemoved(
@@ -268,6 +272,7 @@ inline void Allocator::frameworkDeactivated(
 inline void Allocator::slaveAdded(
     const SlaveID& slaveId,
     const SlaveInfo& slaveInfo,
+    const Resources& total,
     const hashmap<FrameworkID, Resources>& used)
 {
   process::dispatch(
@@ -275,6 +280,7 @@ inline void Allocator::slaveAdded(
       &AllocatorProcess::slaveAdded,
       slaveId,
       slaveInfo,
+      total,
       used);
 }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/master/hierarchical_allocator_process.hpp
----------------------------------------------------------------------
diff --git a/src/master/hierarchical_allocator_process.hpp b/src/master/hierarchical_allocator_process.hpp
index c71739b..f4577bd 100644
--- a/src/master/hierarchical_allocator_process.hpp
+++ b/src/master/hierarchical_allocator_process.hpp
@@ -92,6 +92,7 @@ public:
   void slaveAdded(
       const SlaveID& slaveId,
       const SlaveInfo& slaveInfo,
+      const Resources& total,
       const hashmap<FrameworkID, Resources>& used);
 
   void slaveRemoved(
@@ -394,13 +395,12 @@ void
 HierarchicalAllocatorProcess<RoleSorter, FrameworkSorter>::slaveAdded(
     const SlaveID& slaveId,
     const SlaveInfo& slaveInfo,
+    const Resources& total,
     const hashmap<FrameworkID, Resources>& used)
 {
   CHECK(initialized);
   CHECK(!slaves.contains(slaveId));
 
-  const Resources& total = slaveInfo.resources();
-
   roleSorter->add(total);
 
   foreachpair (const FrameworkID& frameworkId,

http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index 99b5a20..9d92f1a 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -4408,7 +4408,14 @@ void Master::addSlave(
     }
   }
 
-  allocator->slaveAdded(slave->id, slave->info, slave->usedResources);
+  // TODO(bmahler): This will need to include resources that
+  // are "persisted" on the slave (e.g. persistent volumes,
+  // dynamic reservations, etc).
+  allocator->slaveAdded(
+      slave->id,
+      slave->info,
+      slave->info.resources(),
+      slave->usedResources);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/tests/allocator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/allocator_tests.cpp b/src/tests/allocator_tests.cpp
index 1fcbb4a..a7ffa39 100644
--- a/src/tests/allocator_tests.cpp
+++ b/src/tests/allocator_tests.cpp
@@ -92,7 +92,7 @@ TEST_F(DRFAllocatorTest, DRFAllocatorProcess)
   slave::Flags flags1 = CreateSlaveFlags();
   flags1.resources = Some("cpus:2;mem:1024;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave1 = StartSlave(flags1);
   ASSERT_SOME(slave1);
@@ -150,7 +150,7 @@ TEST_F(DRFAllocatorTest, DRFAllocatorProcess)
   slave::Flags flags2 = CreateSlaveFlags();
   flags2.resources = Some("cpus:1;mem:512;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Future<vector<Offer> > offers2;
   EXPECT_CALL(sched2, resourceOffers(_, _))
@@ -177,7 +177,7 @@ TEST_F(DRFAllocatorTest, DRFAllocatorProcess)
   slave::Flags flags3 = CreateSlaveFlags();
   flags3.resources = Some("cpus:3;mem:2048;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Future<vector<Offer> > offers3;
   EXPECT_CALL(sched2, resourceOffers(_, _))
@@ -225,7 +225,7 @@ TEST_F(DRFAllocatorTest, DRFAllocatorProcess)
   slave::Flags flags4 = CreateSlaveFlags();
   flags4.resources = Some("cpus:4;mem:4096;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Future<vector<Offer> > offers4;
   EXPECT_CALL(sched3, resourceOffers(_, _))
@@ -275,7 +275,7 @@ TEST_F(DRFAllocatorTest, DRFAllocatorProcess)
   slave::Flags flags5 = CreateSlaveFlags();
   flags5.resources = Some("cpus:1;mem:512;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Future<vector<Offer> > offers5;
   EXPECT_CALL(sched2, resourceOffers(_, _))
@@ -350,7 +350,7 @@ TEST_F(DRFAllocatorTest, PerSlaveAllocation)
   flags1.resources = Some("cpus:2;mem:1024;disk:0");
 
   Future<Nothing> slaveAdded1;
-  EXPECT_CALL(allocator, slaveAdded(_, _, _))
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _))
     .WillOnce(DoAll(InvokeSlaveAdded(&allocator),
                     FutureSatisfy(&slaveAdded1)));
 
@@ -364,7 +364,7 @@ TEST_F(DRFAllocatorTest, PerSlaveAllocation)
   flags2.resources = Some("cpus:2;mem:1024;disk:0");
 
   Future<Nothing> slaveAdded2;
-  EXPECT_CALL(allocator, slaveAdded(_, _, _))
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _))
     .WillOnce(DoAll(InvokeSlaveAdded(&allocator),
                     FutureSatisfy(&slaveAdded2)));
 
@@ -549,7 +549,7 @@ TEST_F(DRFAllocatorTest, SameShareAllocations)
     .WillRepeatedly(DoDefault());
 
   // Start the slave.
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = StartSlave();
   ASSERT_SOME(slave);
@@ -594,7 +594,7 @@ TEST_F(ReservationAllocatorTest, ReservedResources)
   ASSERT_SOME(master);
 
   Future<Nothing> slaveAdded;
-  EXPECT_CALL(allocator, slaveAdded(_, _, _))
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _))
     .WillOnce(DoDefault())
     .WillOnce(DoDefault())
     .WillOnce(DoDefault())
@@ -700,7 +700,7 @@ TEST_F(ReservationAllocatorTest, ReservedResources)
   flags5.default_role = "role1";
   flags5.resources = Some("cpus:1;mem:512;disk:0");
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Future<Nothing> resourceOffers4;
   EXPECT_CALL(sched1, resourceOffers(_, OfferEq(1, 512)))
@@ -751,7 +751,7 @@ TEST_F(ReservationAllocatorTest, ResourcesReturned)
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _))
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _))
     .Times(2);
 
   Future<Nothing> slaveAdded1 = FUTURE_DISPATCH(
@@ -926,7 +926,7 @@ TYPED_TEST(AllocatorTest, MockAllocator)
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:2;mem:1024;disk:0");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(flags);
   ASSERT_SOME(slave);
@@ -984,7 +984,7 @@ TYPED_TEST(AllocatorTest, ResourcesUnused)
   slave::Flags flags1 = this->CreateSlaveFlags();
   flags1.resources = Some("cpus:2;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave1 = this->StartSlave(&exec, flags1);
   ASSERT_SOME(slave1);
@@ -1095,7 +1095,7 @@ TYPED_TEST(AllocatorTest, OutOfOrderDispatch)
   slave::Flags flags1 = this->CreateSlaveFlags();
   flags1.resources = Some("cpus:2;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave1 = this->StartSlave(flags1);
   ASSERT_SOME(slave1);
@@ -1228,7 +1228,7 @@ TYPED_TEST(AllocatorTest, SchedulerFailover)
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:3;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(&exec, flags);
   ASSERT_SOME(slave);
@@ -1372,7 +1372,7 @@ TYPED_TEST(AllocatorTest, FrameworkExited)
 
   flags.resources = Some("cpus:3;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(&containerizer, flags);
   ASSERT_SOME(slave);
@@ -1513,7 +1513,7 @@ TYPED_TEST(AllocatorTest, SlaveLost)
   slave::Flags flags1 = this->CreateSlaveFlags();
   flags1.resources = Some("cpus:2;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave1 = this->StartSlave(&exec, flags1);
   ASSERT_SOME(slave1);
@@ -1578,7 +1578,7 @@ TYPED_TEST(AllocatorTest, SlaveLost)
   slave::Flags flags2 = this->CreateSlaveFlags();
   flags2.resources = string("cpus:3;mem:256;disk:1024;ports:[31000-32000]");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   // Eventually after slave2 is launched, we should get
   // an offer that contains all of slave2's resources
@@ -1632,7 +1632,7 @@ TYPED_TEST(AllocatorTest, SlaveAdded)
   slave::Flags flags1 = this->CreateSlaveFlags();
   flags1.resources = Some("cpus:3;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave1 = this->StartSlave(&exec, flags1);
   ASSERT_SOME(slave1);
@@ -1681,7 +1681,7 @@ TYPED_TEST(AllocatorTest, SlaveAdded)
   slave::Flags flags2 = this->CreateSlaveFlags();
   flags2.resources = Some("cpus:4;mem:2048");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   // After slave2 launches, all of its resources are combined with the
   // resources on slave1 that the task isn't using.
@@ -1733,7 +1733,7 @@ TYPED_TEST(AllocatorTest, TaskFinished)
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:3;mem:1024");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(&exec, flags);
   ASSERT_SOME(slave);
@@ -1842,7 +1842,7 @@ TYPED_TEST(AllocatorTest, CpusOnlyOfferedAndTaskLaunched)
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:2;mem:0");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(&exec, flags);
   ASSERT_SOME(slave);
@@ -1930,7 +1930,7 @@ TYPED_TEST(AllocatorTest, MemoryOnlyOfferedAndTaskLaunched)
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:0;mem:200");
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   Try<PID<Slave> > slave = this->StartSlave(&exec, flags);
   ASSERT_SOME(slave);
@@ -2024,7 +2024,7 @@ TYPED_TEST(AllocatorTest, WhitelistSlave)
   Try<PID<Master> > master = this->StartMaster(&this->allocator, masterFlags);
   ASSERT_SOME(master);
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:2;mem:1024");
@@ -2194,7 +2194,7 @@ TYPED_TEST(AllocatorTest, FrameworkReregistersFirst)
 
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   StandaloneMasterDetector slaveDetector(master.get());
 
@@ -2269,7 +2269,7 @@ TYPED_TEST(AllocatorTest, FrameworkReregistersFirst)
 
   AWAIT_READY(frameworkAdded);
 
-  EXPECT_CALL(allocator2, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator2, slaveAdded(_, _, _, _));
 
   Future<vector<Offer> > resourceOffers2;
   EXPECT_CALL(sched, resourceOffers(&driver, _))
@@ -2321,7 +2321,7 @@ TYPED_TEST(AllocatorTest, SlaveReregistersFirst)
   MockExecutor exec(DEFAULT_EXECUTOR_ID);
   StandaloneMasterDetector slaveDetector(master.get());
 
-  EXPECT_CALL(this->allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(this->allocator, slaveAdded(_, _, _, _));
 
   slave::Flags flags = this->CreateSlaveFlags();
   flags.resources = Some("cpus:2;mem:1024");
@@ -2378,7 +2378,7 @@ TYPED_TEST(AllocatorTest, SlaveReregistersFirst)
   EXPECT_CALL(allocator2, initialize(_, _, _));
 
   Future<Nothing> slaveAdded;
-  EXPECT_CALL(allocator2, slaveAdded(_, _, _))
+  EXPECT_CALL(allocator2, slaveAdded(_, _, _, _))
     .WillOnce(DoAll(InvokeSlaveAdded(&allocator2),
                     FutureSatisfy(&slaveAdded)));
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index f132c6c..94fd753 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -670,7 +670,7 @@ public:
     ON_CALL(*this, frameworkDeactivated(_))
       .WillByDefault(InvokeFrameworkDeactivated(this));
 
-    ON_CALL(*this, slaveAdded(_, _, _))
+    ON_CALL(*this, slaveAdded(_, _, _, _))
       .WillByDefault(InvokeSlaveAdded(this));
 
     ON_CALL(*this, slaveRemoved(_))
@@ -701,29 +701,54 @@ public:
     process::wait(real);
   }
 
-  MOCK_METHOD3(initialize, void(const master::Flags&,
-                                const process::PID<master::Master>&,
-                                const hashmap<std::string, RoleInfo>&));
-  MOCK_METHOD3(frameworkAdded, void(const FrameworkID&,
-                                    const FrameworkInfo&,
-                                    const Resources&));
-  MOCK_METHOD1(frameworkRemoved, void(const FrameworkID&));
-  MOCK_METHOD2(frameworkActivated, void(const FrameworkID&,
-                                        const FrameworkInfo&));
-  MOCK_METHOD1(frameworkDeactivated, void(const FrameworkID&));
-  MOCK_METHOD3(slaveAdded, void(const SlaveID&,
-                                const SlaveInfo&,
-                                const hashmap<FrameworkID, Resources>&));
-  MOCK_METHOD1(slaveRemoved, void(const SlaveID&));
-  MOCK_METHOD1(slaveDeactivated, void(const SlaveID&));
-  MOCK_METHOD1(slaveActivated, void(const SlaveID&));
-  MOCK_METHOD1(updateWhitelist, void(const Option<hashset<std::string> >&));
-  MOCK_METHOD2(resourcesRequested, void(const FrameworkID&,
-                                        const std::vector<Request>&));
-  MOCK_METHOD4(resourcesRecovered, void(const FrameworkID&,
-                                        const SlaveID&,
-                                        const Resources&,
-                                        const Option<Filters>& filters));
+  MOCK_METHOD3(initialize, void(
+      const master::Flags&,
+      const process::PID<master::Master>&,
+      const hashmap<std::string, RoleInfo>&));
+
+  MOCK_METHOD3(frameworkAdded, void(
+      const FrameworkID&,
+      const FrameworkInfo&,
+      const Resources&));
+
+  MOCK_METHOD1(frameworkRemoved, void(
+      const FrameworkID&));
+
+  MOCK_METHOD2(frameworkActivated, void(
+      const FrameworkID&,
+      const FrameworkInfo&));
+
+  MOCK_METHOD1(frameworkDeactivated, void(
+      const FrameworkID&));
+
+  MOCK_METHOD4(slaveAdded, void(
+      const SlaveID&,
+      const SlaveInfo&,
+      const Resources&,
+      const hashmap<FrameworkID, Resources>&));
+
+  MOCK_METHOD1(slaveRemoved, void(
+      const SlaveID&));
+
+  MOCK_METHOD1(slaveDeactivated, void(
+      const SlaveID&));
+
+  MOCK_METHOD1(slaveActivated, void(
+      const SlaveID&));
+
+  MOCK_METHOD1(updateWhitelist, void(
+      const Option<hashset<std::string> >&));
+
+  MOCK_METHOD2(resourcesRequested, void(
+      const FrameworkID&,
+      const std::vector<Request>&));
+
+  MOCK_METHOD4(resourcesRecovered, void(
+      const FrameworkID&,
+      const SlaveID&,
+      const Resources&,
+      const Option<Filters>& filters));
+
   MOCK_METHOD1(offersRevived, void(const FrameworkID&));
 
   T real;
@@ -796,7 +821,8 @@ ACTION_P(InvokeSlaveAdded, allocator)
       &master::allocator::AllocatorProcess::slaveAdded,
       arg0,
       arg1,
-      arg2);
+      arg2,
+      arg3);
 }
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/31317b35/src/tests/slave_recovery_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/slave_recovery_tests.cpp b/src/tests/slave_recovery_tests.cpp
index 2b6c76a..6cf5fb8 100644
--- a/src/tests/slave_recovery_tests.cpp
+++ b/src/tests/slave_recovery_tests.cpp
@@ -2207,7 +2207,7 @@ TYPED_TEST(SlaveRecoveryTest, ReconcileTasksMissingFromSlave)
 
   slave::Flags flags = this->CreateSlaveFlags();
 
-  EXPECT_CALL(allocator, slaveAdded(_, _, _));
+  EXPECT_CALL(allocator, slaveAdded(_, _, _, _));
 
   Try<TypeParam*> containerizer1 = TypeParam::create(flags, true);
   ASSERT_SOME(containerizer1);