You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2016/06/27 03:52:50 UTC
[1/2] mesos git commit: Moved v1/master/allocator.proto to its own
package.
Repository: mesos
Updated Branches:
refs/heads/master 97ee7e475 -> 170ac150e
Moved v1/master/allocator.proto to its own package.
Review: https://reviews.apache.org/r/48902/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/c335bfc5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/c335bfc5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/c335bfc5
Branch: refs/heads/master
Commit: c335bfc57f1ab44885f30f15eded19fdd53a70b9
Parents: 97ee7e4
Author: Zhitao Li <zh...@gmail.com>
Authored: Sun Jun 26 20:52:21 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Sun Jun 26 20:52:21 2016 -0700
----------------------------------------------------------------------
include/mesos/v1/allocator/allocator.proto | 51 +++++++++++++++++++++
include/mesos/v1/maintenance/maintenance.proto | 5 +-
include/mesos/v1/master/allocator.proto | 51 ---------------------
src/CMakeLists.txt | 2 +-
src/Makefile.am | 17 ++++---
5 files changed, 66 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/c335bfc5/include/mesos/v1/allocator/allocator.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/allocator/allocator.proto b/include/mesos/v1/allocator/allocator.proto
new file mode 100644
index 0000000..a92a1e5
--- /dev/null
+++ b/include/mesos/v1/allocator/allocator.proto
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import "mesos/v1/mesos.proto";
+
+package mesos.v1.allocator;
+
+
+/**
+ * Describes the status of an inverse offer.
+ *
+ * This is a protobuf so as to be able to share the status to inverse offers
+ * through endpoints such as the maintenance status endpoint.
+ */
+message InverseOfferStatus {
+ enum Status {
+ // We have not received a response yet. This is the default state before
+ // receiving a response.
+ UNKNOWN = 1;
+ // The framework is ok with the inverse offer. This means it will not
+ // violate any SLAs and will attempt to evacuate any tasks running on the
+ // agent. If the tasks are not evacuated by the framework, the operator can
+ // manually shut down the slave knowing that the framework will not have
+ // violated its SLAs.
+ ACCEPT = 2;
+ // The framework wants to block the maintenance operation from happening. An
+ // example would be that it can not meet its SLA by losing resources.
+ DECLINE = 3;
+ }
+
+ required Status status = 1;
+ required FrameworkID framework_id = 2;
+
+ // Time, since the epoch, when this status was last updated.
+ required TimeInfo timestamp = 3;
+
+ // TODO(jmlvanre): Capture decline message.
+}
http://git-wip-us.apache.org/repos/asf/mesos/blob/c335bfc5/include/mesos/v1/maintenance/maintenance.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/maintenance/maintenance.proto b/include/mesos/v1/maintenance/maintenance.proto
index 053d72d..27f7c2b 100644
--- a/include/mesos/v1/maintenance/maintenance.proto
+++ b/include/mesos/v1/maintenance/maintenance.proto
@@ -15,7 +15,8 @@
// limitations under the License.
import "mesos/v1/mesos.proto";
-import "mesos/v1/master/allocator.proto";
+
+import "mesos/v1/allocator/allocator.proto";
package mesos.v1.maintenance;
@@ -76,7 +77,7 @@ message ClusterStatus {
// A list of the most recent responses to inverse offers from frameworks
// running on this draining machine.
- repeated master.InverseOfferStatus statuses = 2;
+ repeated allocator.InverseOfferStatus statuses = 2;
}
repeated DrainingMachine draining_machines = 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/c335bfc5/include/mesos/v1/master/allocator.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/master/allocator.proto b/include/mesos/v1/master/allocator.proto
deleted file mode 100644
index cf416d1..0000000
--- a/include/mesos/v1/master/allocator.proto
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import "mesos/v1/mesos.proto";
-
-package mesos.v1.master;
-
-
-/**
- * Describes the status of an inverse offer.
- *
- * This is a protobuf so as to be able to share the status to inverse offers
- * through endpoints such as the maintenance status endpoint.
- */
-message InverseOfferStatus {
- enum Status {
- // We have not received a response yet. This is the default state before
- // receiving a response.
- UNKNOWN = 1;
- // The framework is ok with the inverse offer. This means it will not
- // violate any SLAs and will attempt to evacuate any tasks running on the
- // agent. If the tasks are not evacuated by the framework, the operator can
- // manually shut down the slave knowing that the framework will not have
- // violated its SLAs.
- ACCEPT = 2;
- // The framework wants to block the maintenance operation from happening. An
- // example would be that it can not meet its SLA by losing resources.
- DECLINE = 3;
- }
-
- required Status status = 1;
- required FrameworkID framework_id = 2;
-
- // Time, since the epoch, when this status was last updated.
- required TimeInfo timestamp = 3;
-
- // TODO(jmlvanre): Capture decline message.
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mesos/blob/c335bfc5/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ecdeee7..872a102 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -42,7 +42,7 @@ PROTOC_TO_INCLUDE_DIR(SCHEDULER mesos/scheduler/scheduler)
PROTOC_TO_INCLUDE_DIR(STATE mesos/state/state)
PROTOC_TO_INCLUDE_DIR(URI mesos/uri/uri)
PROTOC_TO_INCLUDE_DIR(V1_AGENT mesos/v1/agent/agent)
-PROTOC_TO_INCLUDE_DIR(V1_ALLOCATOR mesos/v1/master/allocator)
+PROTOC_TO_INCLUDE_DIR(V1_ALLOCATOR mesos/v1/allocator/allocator)
PROTOC_TO_INCLUDE_DIR(V1_EXECUTOR mesos/v1/executor/executor)
PROTOC_TO_INCLUDE_DIR(V1_MAINTENANCE mesos/v1/maintenance/maintenance)
PROTOC_TO_INCLUDE_DIR(V1_MASTER mesos/v1/master/master)
http://git-wip-us.apache.org/repos/asf/mesos/blob/c335bfc5/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index 61789a7..e52f47e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -228,7 +228,7 @@ ISOLATOR_PROTO = $(top_srcdir)/include/mesos/slave/isolator.proto
OVERSUBSCRIPTION_PROTO = $(top_srcdir)/include/mesos/slave/oversubscription.proto
URI_PROTO = $(top_srcdir)/include/mesos/uri/uri.proto
V1_AGENT_PROTO = $(top_srcdir)/include/mesos/v1/agent/agent.proto
-V1_ALLOCATOR_PROTO = $(top_srcdir)/include/mesos/v1/master/allocator.proto
+V1_ALLOCATOR_PROTO = $(top_srcdir)/include/mesos/v1/allocator/allocator.proto
V1_EXECUTOR_PROTO = $(top_srcdir)/include/mesos/v1/executor/executor.proto
V1_MAINTENANCE_PROTO = $(top_srcdir)/include/mesos/v1/maintenance/maintenance.proto
V1_MASTER_PROTO = $(top_srcdir)/include/mesos/v1/master/master.proto
@@ -286,12 +286,12 @@ CXX_PROTOS = \
../include/mesos/v1/mesos.pb.h \
../include/mesos/v1/agent/agent.pb.cc \
../include/mesos/v1/agent/agent.pb.h \
+ ../include/mesos/v1/allocator/allocator.pb.cc \
+ ../include/mesos/v1/allocator/allocator.pb.h \
../include/mesos/v1/executor/executor.pb.cc \
../include/mesos/v1/executor/executor.pb.h \
../include/mesos/v1/maintenance/maintenance.pb.cc \
../include/mesos/v1/maintenance/maintenance.pb.h \
- ../include/mesos/v1/master/allocator.pb.cc \
- ../include/mesos/v1/master/allocator.pb.h \
../include/mesos/v1/master/master.pb.cc \
../include/mesos/v1/master/master.pb.h \
../include/mesos/v1/quota/quota.pb.cc \
@@ -673,6 +673,14 @@ v1agent_HEADERS = \
nodist_v1agent_HEADERS = \
../include/mesos/v1/agent/agent.pb.h
+v1allocatordir = $(pkgincludedir)/v1/allocator
+
+v1allocator_HEADERS = \
+ $(top_srcdir)/include/mesos/v1/allocator/allocator.proto
+
+nodist_v1allocator_HEADERS = \
+ ../include/mesos/v1/allocator/allocator.pb.h
+
v1executordir = $(pkgincludedir)/v1/executor
v1executor_HEADERS = \
@@ -694,12 +702,10 @@ nodist_v1maintenance_HEADERS = \
v1masterdir = $(pkgincludedir)/v1/master
v1master_HEADERS = \
- $(top_srcdir)/include/mesos/v1/master/allocator.proto \
$(top_srcdir)/include/mesos/v1/master/master.hpp \
$(top_srcdir)/include/mesos/v1/master/master.proto
nodist_v1master_HEADERS = \
- ../include/mesos/v1/master/allocator.pb.h \
../include/mesos/v1/master/master.pb.h
v1quotadir = $(pkgincludedir)/v1/quota
@@ -708,7 +714,6 @@ v1quota_HEADERS = \
$(top_srcdir)/include/mesos/v1/quota/quota.proto
nodist_v1quota_HEADERS = \
- ../include/mesos/v1/master/allocator.pb.h \
../include/mesos/v1/quota/quota.pb.h
v1schedulerdir = $(pkgincludedir)/v1/scheduler
[2/2] mesos git commit: Move allocator header and proto to own
package.
Posted by vi...@apache.org.
Move allocator header and proto to own package.
This is the second part of moving allocator to own package:
1. Move the non-versioned allocator.proto and allocator.hpp;
2. Move namespace of `Allocator` base class;
3. Fix allocation-module.md;
4. Call out allocator api change in docs/upgrades.md.
Review: https://reviews.apache.org/r/49118/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/170ac150
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/170ac150
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/170ac150
Branch: refs/heads/master
Commit: 170ac150edd12ddbe06de1b35b827767e0d82c55
Parents: c335bfc
Author: Zhitao Li <zh...@gmail.com>
Authored: Sun Jun 26 20:52:30 2016 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Sun Jun 26 20:52:30 2016 -0700
----------------------------------------------------------------------
CHANGELOG | 3 +
docs/allocation-module.md | 8 +-
docs/upgrades.md | 5 +
include/mesos/allocator/allocator.hpp | 394 ++++++++++++++++++
include/mesos/allocator/allocator.proto | 51 +++
include/mesos/maintenance/maintenance.proto | 4 +-
include/mesos/master/allocator.hpp | 395 -------------------
include/mesos/master/allocator.proto | 51 ---
include/mesos/module/allocator.hpp | 12 +-
src/CMakeLists.txt | 2 +-
src/Makefile.am | 18 +-
src/examples/test_allocator_module.cpp | 4 +-
src/local/local.cpp | 4 +-
src/local/local.hpp | 4 +-
src/master/allocator/allocator.cpp | 4 +-
src/master/allocator/mesos/allocator.hpp | 25 +-
src/master/allocator/mesos/hierarchical.cpp | 2 +-
src/master/allocator/mesos/hierarchical.hpp | 7 +-
src/master/http.cpp | 9 +-
src/master/main.cpp | 4 +-
src/master/master.cpp | 12 +-
src/master/master.hpp | 6 +-
src/tests/allocator.hpp | 14 +-
src/tests/cluster.cpp | 6 +-
src/tests/cluster.hpp | 6 +-
src/tests/fault_tolerance_tests.cpp | 2 +-
src/tests/hierarchical_allocator_tests.cpp | 4 +-
src/tests/master_allocator_tests.cpp | 4 +-
src/tests/master_authorization_tests.cpp | 2 +-
src/tests/master_maintenance_tests.cpp | 4 +-
src/tests/master_slave_reconciliation_tests.cpp | 2 +-
src/tests/master_tests.cpp | 2 +-
src/tests/mesos.cpp | 2 +-
src/tests/mesos.hpp | 2 +-
src/tests/rate_limiting_tests.cpp | 2 +-
src/tests/reservation_tests.cpp | 2 +-
36 files changed, 546 insertions(+), 532 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/CHANGELOG
----------------------------------------------------------------------
diff --git a/CHANGELOG b/CHANGELOG
index c987d19..7a44422 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -168,6 +168,9 @@ Additional API Changes:
* [MESOS-5680] - We should not 'chown -R' on persistent volumes every time
container tries to use it.
+ * [MESOS-5642] - Namespace and header file of `Allocator` has been moved to
+ be consistent with other packages.
+
3rd Party Upgrades:
* [MESOS-4805] - Upgraded vendored ry-http-parser-1c3624a to nodejs/http-parser 2.6.1.
* [MESOS-4678] - Upgraded vendored protobuf 2.5.0 to 2.6.1.
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/docs/allocation-module.md
----------------------------------------------------------------------
diff --git a/docs/allocation-module.md b/docs/allocation-module.md
index 6cb1392..81f9d0c 100644
--- a/docs/allocation-module.md
+++ b/docs/allocation-module.md
@@ -9,14 +9,14 @@ The logic that the Mesos master uses to determine which frameworks to make resou
To use a custom allocator in Mesos, one must:
-- [Implement](#writing-a-custom-allocator) the `Allocator` interface as defined in `mesos/master/allocator.hpp`,
+- [Implement](#writing-a-custom-allocator) the `Allocator` interface as defined in `mesos/allocator/allocator.hpp`,
- [Wrap](#wiring-up-a-custom-allocator) the allocator implementation in a module and load it in the Mesos master.
<a name="writing-a-custom-allocator"></a>
## Writing a custom allocator
-Allocator modules are implemented in C++, the same language in which Mesos is written. They must subclass the `Allocator` interface defined in `mesos/master/allocator.hpp`. However, your implementation can be a C++ proxy, which delegates calls to an actual allocator written in a language of your choice.
+Allocator modules are implemented in C++, the same language in which Mesos is written. They must subclass the `Allocator` interface defined in `mesos/allocator/allocator.hpp`. However, your implementation can be a C++ proxy, which delegates calls to an actual allocator written in a language of your choice.
The default allocator is `HierarchicalDRFAllocatorProcess`, which lives in `$MESOS_HOME/src/master/allocator/mesos/hierarchical.hpp`. Like most Mesos components, it is actor-based, which means all interface methods are non-blocking and return immediately after putting the corresponding action into the actor's queue. If you would like to design your custom allocator in a similar manner, subclass `MesosAllocatorProcess` from `$MESOS_HOME/src/master/allocator/mesos/allocator.hpp` and wrap your actor-based allocator in `MesosAllocator`. This dispatches calls to the underlying actor and controls its lifetime. You can refer to `HierarchicalDRFAllocatorProcess` as a starting place if you choose to write your own actor-based allocation module.
@@ -37,14 +37,14 @@ Once a custom allocator has been written, the next step is to override the built
An allocator module is a factory function and a module description, as defined in `mesos/module/allocator.hpp`. Assuming the allocation logic is implemented by the `ExternalAllocator` class declared in `external_allocator.hpp`, the following snippet describes the implementation of an allocator module named `ExternalAllocatorModule`:
~~~{.cpp}
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/allocator.hpp>
#include <stout/try.hpp>
#include "external_allocator.hpp"
using namespace mesos;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::internal::master::allocator::HierarchicalDRFAllocator;
static Allocator* createExternalAllocator(const Parameters& parameters)
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/docs/upgrades.md
----------------------------------------------------------------------
diff --git a/docs/upgrades.md b/docs/upgrades.md
index be3bd27..079e04f 100644
--- a/docs/upgrades.md
+++ b/docs/upgrades.md
@@ -72,6 +72,7 @@ We categorize the changes as follows:
</td>
<td style="word-wrap: break-word; overflow-wrap: break-word;"><!--Module API-->
<li>C <a href="#1-0-x-authorizer">Authorizer</a></li>
+ <li>C <a href="#1-0-x-allocator">Allocator</a></li>
</td>
<td style="word-wrap: break-word; overflow-wrap: break-word;"><!--Endpoints-->
<li>C <a href="#1-0-x-status-code">HTTP return codes</a></li>
@@ -262,6 +263,10 @@ We categorize the changes as follows:
* Authorization-based HTTP endpoint filtering enables operators to restrict which parts of the cluster state a user is authorized to see. Consider for example the `/state` master endpoint: an operator can now authorize users to only see a subset of the running frameworks, tasks, or executors.
* The ``subject` and `object` fields in the authorization::Request protobuf message have been changed to be optional. If these fields are not set, the request should only be allowed for ACLs with `ANY` semantics. NOTE: This is a semantic change for authorizer modules.
+<a name="1-0-x-allocator"></a>
+
+* Namespace and header file of `Allocator` has been moved to be consistent with other packages.
+
<a name="1-0-x-endpoint-authorization"></a>
* Mesos 1.0 introduces authorization support for several HTTP endpoints. Note that some of these endpoints are used by the web UI, and thus using the web UI in a cluster with authorization enabled will require that ACLs be set appropriately. Please refer to the [authorization documentation](authorization.md) for details.
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/allocator/allocator.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/allocator/allocator.hpp b/include/mesos/allocator/allocator.hpp
new file mode 100644
index 0000000..98025bc
--- /dev/null
+++ b/include/mesos/allocator/allocator.hpp
@@ -0,0 +1,394 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef __MESOS_ALLOCATOR_ALLOCATOR_HPP__
+#define __MESOS_ALLOCATOR_ALLOCATOR_HPP__
+
+#include <string>
+#include <vector>
+
+// ONLY USEFUL AFTER RUNNING PROTOC.
+#include <mesos/allocator/allocator.pb.h>
+
+#include <mesos/maintenance/maintenance.hpp>
+
+#include <mesos/quota/quota.hpp>
+
+#include <mesos/resources.hpp>
+
+#include <process/future.hpp>
+
+#include <stout/duration.hpp>
+#include <stout/hashmap.hpp>
+#include <stout/hashset.hpp>
+#include <stout/lambda.hpp>
+#include <stout/option.hpp>
+#include <stout/try.hpp>
+
+namespace mesos {
+namespace allocator {
+
+/**
+ * Basic model of an allocator: resources are allocated to a framework
+ * in the form of offers. A framework can refuse some resources in
+ * offers and run tasks in others. Allocated resources can have offer
+ * operations applied to them in order for frameworks to alter the
+ * resource metadata (e.g. creating persistent volumes). Resources can
+ * be recovered from a framework when tasks finish/fail (or are lost
+ * due to an agent failure) or when an offer is rescinded.
+ *
+ * This is the public API for resource allocators.
+ */
+class Allocator
+{
+public:
+ /**
+ * Attempts either to create a built-in DRF allocator or to load an
+ * allocator instance from a module using the given name. If `Try`
+ * does not report an error, the wrapped `Allocator*` is not null.
+ *
+ * @param name Name of the allocator.
+ */
+ static Try<Allocator*> create(const std::string& name);
+
+ Allocator() {}
+
+ virtual ~Allocator() {}
+
+ /**
+ * Initializes the allocator when the master starts up. Any errors in
+ * initialization should fail fast and result in an ABORT. The master expects
+ * the allocator to be successfully initialized if this call returns.
+ *
+ * @param allocationInterval The allocate interval for the allocator, it
+ * determines how often the allocator should perform the batch
+ * allocation. An allocator may also perform allocation based on events
+ * (a framework is added and so on), this depends on the implementation.
+ * @param offerCallback A callback the allocator uses to send allocations
+ * to the frameworks.
+ * @param inverseOfferCallback A callback the allocator uses to send reclaim
+ * allocations from the frameworks.
+ * @param weights Configured per-role weights. Any roles that do not
+ * appear in this map will be assigned the default weight of 1.
+ */
+ virtual void initialize(
+ const Duration& allocationInterval,
+ const lambda::function<
+ void(const FrameworkID&,
+ const hashmap<SlaveID, Resources>&)>& offerCallback,
+ const lambda::function<
+ void(const FrameworkID&,
+ const hashmap<SlaveID, UnavailableResources>&)>&
+ inverseOfferCallback,
+ const hashmap<std::string, double>& weights) = 0;
+
+ /**
+ * Informs the allocator of the recovered state from the master.
+ *
+ * Because it is hard to define recovery for a running allocator, this
+ * method should be called after `initialize()`, but before actual
+ * allocation starts (i.e. `addSlave()` is called).
+ *
+ * TODO(alexr): Consider extending the signature with expected
+ * frameworks count once it is available upon the master failover.
+ *
+ * @param quotas A (possibly empty) collection of quotas, keyed by
+ * their role, known to the master.
+ */
+ virtual void recover(
+ const int expectedAgentCount,
+ const hashmap<std::string, Quota>& quotas) = 0;
+
+ /**
+ * Adds a framework to the Mesos cluster. The allocator is invoked when
+ * a new framework joins the Mesos cluster and is entitled to participate
+ * in resource sharing.
+ *
+ * @param used Resources used by this framework. The allocator should
+ * account for these resources when updating the allocation of this
+ * framework.
+ */
+ virtual void addFramework(
+ const FrameworkID& frameworkId,
+ const FrameworkInfo& frameworkInfo,
+ const hashmap<SlaveID, Resources>& used) = 0;
+
+ /**
+ * Removes a framework from the Mesos cluster. It is up to an allocator to
+ * decide what to do with framework's resources. For example, they may be
+ * released and added back to the shared pool of resources.
+ */
+ virtual void removeFramework(
+ const FrameworkID& frameworkId) = 0;
+
+ /**
+ * Activates a framework in the Mesos cluster.
+ * Offers are only sent to active frameworks.
+ */
+ virtual void activateFramework(
+ const FrameworkID& frameworkId) = 0;
+
+ /**
+ * Deactivates a framework in the Mesos cluster.
+ * Resource offers are not sent to deactivated frameworks.
+ */
+ virtual void deactivateFramework(
+ const FrameworkID& frameworkId) = 0;
+
+ /**
+ * Updates capabilities of a framework in the Mesos cluster.
+ *
+ * This will be invoked when a framework is re-added. As some of the
+ * framework's capabilities may be updated when re-added, this API should
+ * update the capabilities of the newly added framework to Mesos cluster to
+ * reflect the latest framework info. Please refer to the design document here
+ * https://cwiki.apache.org/confluence/display/MESOS/Design+doc:+Updating+Framework+Info // NOLINT
+ * for more details related to framework update.
+ */
+ virtual void updateFramework(
+ const FrameworkID& frameworkId,
+ const FrameworkInfo& frameworkInfo) = 0;
+
+ /**
+ * Adds or re-adds an agent to the Mesos cluster. It is invoked when a
+ * new agent joins the cluster or in case of agent recovery.
+ *
+ * @param slaveId ID of the agent to be added or re-added.
+ * @param slaveInfo Detailed info of the agent. The slaveInfo resources
+ * correspond directly to the static --resources flag value on the agent.
+ * @param total The `total` resources are passed explicitly because it
+ * includes resources that are dynamically "checkpointed" on the agent
+ * (e.g. persistent volumes, dynamic reservations, etc).
+ * @param used Resources that are allocated on the current agent.
+ */
+ virtual void addSlave(
+ const SlaveID& slaveId,
+ const SlaveInfo& slaveInfo,
+ const Option<Unavailability>& unavailability,
+ const Resources& total,
+ const hashmap<FrameworkID, Resources>& used) = 0;
+
+ /**
+ * Removes an agent from the Mesos cluster. All resources belonging to this
+ * agent should be released by the allocator.
+ */
+ virtual void removeSlave(
+ const SlaveID& slaveId) = 0;
+
+ /**
+ * Updates an agent.
+ *
+ * Updates the latest oversubscribed resources for an agent.
+ * TODO(vinod): Instead of just oversubscribed resources have this
+ * method take total resources. We can then reuse this method to
+ * update Agent's total resources in the future.
+ *
+ * @param oversubscribed The new oversubscribed resources estimate from
+ * the agent. The oversubscribed resources include the total amount
+ * of oversubscribed resources that are allocated and available.
+ */
+ virtual void updateSlave(
+ const SlaveID& slave,
+ const Resources& oversubscribed) = 0;
+
+ /**
+ * Activates an agent. This is invoked when an agent reregisters. Offers
+ * are only sent for activated agents.
+ */
+ virtual void activateSlave(
+ const SlaveID& slaveId) = 0;
+
+ /**
+ * Deactivates an agent.
+ *
+ * This is triggered if an agent disconnects from the master. The allocator
+ * should treat all offers from the deactivated agent as rescinded. (There
+ * is no separate call to the allocator to handle this). Resources aren't
+ * "recovered" when an agent deactivates because the resources are lost.
+ */
+ virtual void deactivateSlave(
+ const SlaveID& slaveId) = 0;
+
+ /**
+ * Updates the list of trusted agents.
+ *
+ * This is invoked when the master starts up with the --whitelist flag.
+ *
+ * @param whitelist A set of agents that are allowed to contribute
+ * their resources to the resource pool.
+ */
+ virtual void updateWhitelist(
+ const Option<hashset<std::string>>& whitelist) = 0;
+
+ /**
+ * Requests resources for a framework.
+ *
+ * A framework may request resources via this call. It is up to the allocator
+ * how to react to this request. For example, a request may be ignored, or
+ * may influence internal priorities the allocator may keep for frameworks.
+ */
+ virtual void requestResources(
+ const FrameworkID& frameworkId,
+ const std::vector<Request>& requests) = 0;
+
+ /**
+ * Updates allocation by applying offer operations.
+ *
+ * This call is mainly intended to support persistence-related features
+ * (dynamic reservation and persistent volumes). The allocator may react
+ * differently for certain offer operations. The allocator should use this
+ * call to update bookkeeping information related to the framework.
+ */
+ virtual void updateAllocation(
+ const FrameworkID& frameworkId,
+ const SlaveID& slaveId,
+ const std::vector<Offer::Operation>& operations) = 0;
+
+ /**
+ * Updates available resources on an agent based on a sequence of offer
+ * operations. Operations may include reserve, unreserve, create or destroy.
+ *
+ * @param slaveId ID of the agent.
+ * @param operations The offer operations to apply to this agent's resources.
+ */
+ virtual process::Future<Nothing> updateAvailable(
+ const SlaveID& slaveId,
+ const std::vector<Offer::Operation>& operations) = 0;
+
+ /**
+ * Updates unavailability for an agent.
+ *
+ * We currently support storing the next unavailability, if there is one,
+ * per agent. If `unavailability` is not set then there is no known upcoming
+ * unavailability. This might require the implementation of the function to
+ * remove any inverse offers that are outstanding.
+ */
+ virtual void updateUnavailability(
+ const SlaveID& slaveId,
+ const Option<Unavailability>& unavailability) = 0;
+
+ /**
+ * Updates inverse offer.
+ *
+ * Informs the allocator that the inverse offer has been responded to or
+ * revoked.
+ *
+ * @param unavailableResources The `unavailableResources` can be used by the
+ * allocator to distinguish between different inverse offers sent to the
+ * same framework for the same slave.
+ * @param status If `status` is not set then the inverse offer was not
+ * responded to, possibly because the offer timed out or was rescinded.
+ * This might require the implementation of the function to remove any
+ * inverse offers that are outstanding.
+ * @param filters A filter attached to the inverse offer can be used by the
+ * framework to control when it wants to be contacted again with the
+ * inverse offer. The "filters" for InverseOffers are identical to the
+ * existing mechanism for re-offering Offers to frameworks.
+ */
+ virtual void updateInverseOffer(
+ const SlaveID& slaveId,
+ const FrameworkID& frameworkId,
+ const Option<UnavailableResources>& unavailableResources,
+ const Option<InverseOfferStatus>& status,
+ const Option<Filters>& filters = None()) = 0;
+
+ /**
+ * Retrieves the status of all inverse offers maintained by the allocator.
+ */
+ virtual process::Future<
+ hashmap<SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>>>
+ getInverseOfferStatuses() = 0;
+
+ /**
+ * Recovers resources.
+ *
+ * Used to update the set of available resources for a specific agent. This
+ * method is invoked to inform the allocator about allocated resources that
+ * have been refused or are no longer in use.
+ */
+ virtual void recoverResources(
+ const FrameworkID& frameworkId,
+ const SlaveID& slaveId,
+ const Resources& resources,
+ const Option<Filters>& filters) = 0;
+
+ /**
+ * Suppresses offers.
+ *
+ * Informs the allocator to stop sending offers to the framework.
+ */
+ virtual void suppressOffers(
+ const FrameworkID& frameworkId) = 0;
+
+ /**
+ * Revives offers for a framework. This is invoked by a framework when
+ * it wishes to receive filtered resources or offers immediately.
+ */
+ virtual void reviveOffers(
+ const FrameworkID& frameworkId) = 0;
+
+ /**
+ * Informs the allocator to set quota for the given role.
+ *
+ * It is up to the allocator implementation how to satisfy quota. An
+ * implementation may employ different strategies for roles with or
+ * without quota. Hence an empty (or zero) quota is not necessarily the
+ * same as an absence of quota. Logically, this method implies that the
+ * given role should be transitioned to the group of roles with quota
+ * set. An allocator implementation may assert quota for the given role
+ * is not set prior to the call and react accordingly if this assumption
+ * is violated (i.e. fail).
+ *
+ * TODO(alexr): Consider returning a future which an allocator can fail
+ * in order to report failure.
+ *
+ * TODO(alexr): Consider adding an `updateQuota()` method which allows
+ * updating existing quota.
+ */
+ virtual void setQuota(
+ const std::string& role,
+ const Quota& quota) = 0;
+
+ /**
+ * Informs the allocator to remove quota for the given role.
+ *
+ * An allocator implementation may employ different strategies for roles
+ * with or without quota. Hence an empty (or zero) quota is not necessarily
+ * the same as an absence of quota. Logically, this method implies that the
+ * given role should be transitioned to the group of roles without quota
+ * set (absence of quota). An allocator implementation may assert quota
+ * for the given role is set prior to the call and react accordingly if
+ * this assumption is violated (i.e. fail).
+ *
+ * TODO(alexr): Consider returning a future which an allocator can fail in
+ * order to report failure.
+ */
+ virtual void removeQuota(
+ const std::string& role) = 0;
+
+ /**
+ * Updates the weight of each provided role.
+ * Subsequent allocation calculations will use these updated weights.
+ */
+ virtual void updateWeights(
+ const std::vector<WeightInfo>& weightInfos) = 0;
+};
+
+} // namespace allocator {
+} // namespace mesos {
+
+#endif // __MESOS_MASTER_ALLOCATOR_HPP__
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/allocator/allocator.proto
----------------------------------------------------------------------
diff --git a/include/mesos/allocator/allocator.proto b/include/mesos/allocator/allocator.proto
new file mode 100644
index 0000000..df7e6db
--- /dev/null
+++ b/include/mesos/allocator/allocator.proto
@@ -0,0 +1,51 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import "mesos/mesos.proto";
+
+package mesos.allocator;
+
+
+/**
+ * Describes the status of an inverse offer.
+ *
+ * This is a protobuf so as to be able to share the status to inverse offers
+ * through endpoints such as the maintenance status endpoint.
+ */
+message InverseOfferStatus {
+ enum Status {
+ // We have not received a response yet. This is the default state before
+ // receiving a response.
+ UNKNOWN = 1;
+ // The framework is ok with the inverse offer. This means it will not
+ // violate any SLAs and will attempt to evacuate any tasks running on the
+ // agent. If the tasks are not evacuated by the framework, the operator can
+ // manually shut down the slave knowing that the framework will not have
+ // violated its SLAs.
+ ACCEPT = 2;
+ // The framework wants to block the maintenance operation from happening. An
+ // example would be that it can not meet its SLA by losing resources.
+ DECLINE = 3;
+ }
+
+ required Status status = 1;
+ required FrameworkID framework_id = 2;
+
+ // Time, since the epoch, when this status was last updated.
+ required TimeInfo timestamp = 3;
+
+ // TODO(jmlvanre): Capture decline message.
+}
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/maintenance/maintenance.proto
----------------------------------------------------------------------
diff --git a/include/mesos/maintenance/maintenance.proto b/include/mesos/maintenance/maintenance.proto
index 458b427..4afae5c 100644
--- a/include/mesos/maintenance/maintenance.proto
+++ b/include/mesos/maintenance/maintenance.proto
@@ -15,7 +15,7 @@
// limitations under the License.
import "mesos/mesos.proto";
-import "mesos/master/allocator.proto";
+import "mesos/allocator/allocator.proto";
package mesos.maintenance;
@@ -76,7 +76,7 @@ message ClusterStatus {
// A list of the most recent responses to inverse offers from frameworks
// running on this draining machine.
- repeated master.InverseOfferStatus statuses = 2;
+ repeated allocator.InverseOfferStatus statuses = 2;
}
repeated DrainingMachine draining_machines = 1;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/master/allocator.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/master/allocator.hpp b/include/mesos/master/allocator.hpp
deleted file mode 100644
index a4743c5..0000000
--- a/include/mesos/master/allocator.hpp
+++ /dev/null
@@ -1,395 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#ifndef __MESOS_MASTER_ALLOCATOR_HPP__
-#define __MESOS_MASTER_ALLOCATOR_HPP__
-
-#include <string>
-#include <vector>
-
-// ONLY USEFUL AFTER RUNNING PROTOC.
-#include <mesos/master/allocator.pb.h>
-
-#include <mesos/maintenance/maintenance.hpp>
-
-#include <mesos/quota/quota.hpp>
-
-#include <mesos/resources.hpp>
-
-#include <process/future.hpp>
-
-#include <stout/duration.hpp>
-#include <stout/hashmap.hpp>
-#include <stout/hashset.hpp>
-#include <stout/lambda.hpp>
-#include <stout/option.hpp>
-#include <stout/try.hpp>
-
-namespace mesos {
-namespace master {
-namespace allocator {
-
-/**
- * Basic model of an allocator: resources are allocated to a framework
- * in the form of offers. A framework can refuse some resources in
- * offers and run tasks in others. Allocated resources can have offer
- * operations applied to them in order for frameworks to alter the
- * resource metadata (e.g. creating persistent volumes). Resources can
- * be recovered from a framework when tasks finish/fail (or are lost
- * due to an agent failure) or when an offer is rescinded.
- *
- * This is the public API for resource allocators.
- */
-class Allocator
-{
-public:
- /**
- * Attempts either to create a built-in DRF allocator or to load an
- * allocator instance from a module using the given name. If `Try`
- * does not report an error, the wrapped `Allocator*` is not null.
- *
- * @param name Name of the allocator.
- */
- static Try<Allocator*> create(const std::string& name);
-
- Allocator() {}
-
- virtual ~Allocator() {}
-
- /**
- * Initializes the allocator when the master starts up. Any errors in
- * initialization should fail fast and result in an ABORT. The master expects
- * the allocator to be successfully initialized if this call returns.
- *
- * @param allocationInterval The allocate interval for the allocator, it
- * determines how often the allocator should perform the batch
- * allocation. An allocator may also perform allocation based on events
- * (a framework is added and so on), this depends on the implementation.
- * @param offerCallback A callback the allocator uses to send allocations
- * to the frameworks.
- * @param inverseOfferCallback A callback the allocator uses to send reclaim
- * allocations from the frameworks.
- * @param weights Configured per-role weights. Any roles that do not
- * appear in this map will be assigned the default weight of 1.
- */
- virtual void initialize(
- const Duration& allocationInterval,
- const lambda::function<
- void(const FrameworkID&,
- const hashmap<SlaveID, Resources>&)>& offerCallback,
- const lambda::function<
- void(const FrameworkID&,
- const hashmap<SlaveID, UnavailableResources>&)>&
- inverseOfferCallback,
- const hashmap<std::string, double>& weights) = 0;
-
- /**
- * Informs the allocator of the recovered state from the master.
- *
- * Because it is hard to define recovery for a running allocator, this
- * method should be called after `initialize()`, but before actual
- * allocation starts (i.e. `addSlave()` is called).
- *
- * TODO(alexr): Consider extending the signature with expected
- * frameworks count once it is available upon the master failover.
- *
- * @param quotas A (possibly empty) collection of quotas, keyed by
- * their role, known to the master.
- */
- virtual void recover(
- const int expectedAgentCount,
- const hashmap<std::string, Quota>& quotas) = 0;
-
- /**
- * Adds a framework to the Mesos cluster. The allocator is invoked when
- * a new framework joins the Mesos cluster and is entitled to participate
- * in resource sharing.
- *
- * @param used Resources used by this framework. The allocator should
- * account for these resources when updating the allocation of this
- * framework.
- */
- virtual void addFramework(
- const FrameworkID& frameworkId,
- const FrameworkInfo& frameworkInfo,
- const hashmap<SlaveID, Resources>& used) = 0;
-
- /**
- * Removes a framework from the Mesos cluster. It is up to an allocator to
- * decide what to do with framework's resources. For example, they may be
- * released and added back to the shared pool of resources.
- */
- virtual void removeFramework(
- const FrameworkID& frameworkId) = 0;
-
- /**
- * Activates a framework in the Mesos cluster.
- * Offers are only sent to active frameworks.
- */
- virtual void activateFramework(
- const FrameworkID& frameworkId) = 0;
-
- /**
- * Deactivates a framework in the Mesos cluster.
- * Resource offers are not sent to deactivated frameworks.
- */
- virtual void deactivateFramework(
- const FrameworkID& frameworkId) = 0;
-
- /**
- * Updates capabilities of a framework in the Mesos cluster.
- *
- * This will be invoked when a framework is re-added. As some of the
- * framework's capabilities may be updated when re-added, this API should
- * update the capabilities of the newly added framework to Mesos cluster to
- * reflect the latest framework info. Please refer to the design document here
- * https://cwiki.apache.org/confluence/display/MESOS/Design+doc:+Updating+Framework+Info // NOLINT
- * for more details related to framework update.
- */
- virtual void updateFramework(
- const FrameworkID& frameworkId,
- const FrameworkInfo& frameworkInfo) = 0;
-
- /**
- * Adds or re-adds an agent to the Mesos cluster. It is invoked when a
- * new agent joins the cluster or in case of agent recovery.
- *
- * @param slaveId ID of the agent to be added or re-added.
- * @param slaveInfo Detailed info of the agent. The slaveInfo resources
- * correspond directly to the static --resources flag value on the agent.
- * @param total The `total` resources are passed explicitly because it
- * includes resources that are dynamically "checkpointed" on the agent
- * (e.g. persistent volumes, dynamic reservations, etc).
- * @param used Resources that are allocated on the current agent.
- */
- virtual void addSlave(
- const SlaveID& slaveId,
- const SlaveInfo& slaveInfo,
- const Option<Unavailability>& unavailability,
- const Resources& total,
- const hashmap<FrameworkID, Resources>& used) = 0;
-
- /**
- * Removes an agent from the Mesos cluster. All resources belonging to this
- * agent should be released by the allocator.
- */
- virtual void removeSlave(
- const SlaveID& slaveId) = 0;
-
- /**
- * Updates an agent.
- *
- * Updates the latest oversubscribed resources for an agent.
- * TODO(vinod): Instead of just oversubscribed resources have this
- * method take total resources. We can then reuse this method to
- * update Agent's total resources in the future.
- *
- * @param oversubscribed The new oversubscribed resources estimate from
- * the agent. The oversubscribed resources include the total amount
- * of oversubscribed resources that are allocated and available.
- */
- virtual void updateSlave(
- const SlaveID& slave,
- const Resources& oversubscribed) = 0;
-
- /**
- * Activates an agent. This is invoked when an agent reregisters. Offers
- * are only sent for activated agents.
- */
- virtual void activateSlave(
- const SlaveID& slaveId) = 0;
-
- /**
- * Deactivates an agent.
- *
- * This is triggered if an agent disconnects from the master. The allocator
- * should treat all offers from the deactivated agent as rescinded. (There
- * is no separate call to the allocator to handle this). Resources aren't
- * "recovered" when an agent deactivates because the resources are lost.
- */
- virtual void deactivateSlave(
- const SlaveID& slaveId) = 0;
-
- /**
- * Updates the list of trusted agents.
- *
- * This is invoked when the master starts up with the --whitelist flag.
- *
- * @param whitelist A set of agents that are allowed to contribute
- * their resources to the resource pool.
- */
- virtual void updateWhitelist(
- const Option<hashset<std::string>>& whitelist) = 0;
-
- /**
- * Requests resources for a framework.
- *
- * A framework may request resources via this call. It is up to the allocator
- * how to react to this request. For example, a request may be ignored, or
- * may influence internal priorities the allocator may keep for frameworks.
- */
- virtual void requestResources(
- const FrameworkID& frameworkId,
- const std::vector<Request>& requests) = 0;
-
- /**
- * Updates allocation by applying offer operations.
- *
- * This call is mainly intended to support persistence-related features
- * (dynamic reservation and persistent volumes). The allocator may react
- * differently for certain offer operations. The allocator should use this
- * call to update bookkeeping information related to the framework.
- */
- virtual void updateAllocation(
- const FrameworkID& frameworkId,
- const SlaveID& slaveId,
- const std::vector<Offer::Operation>& operations) = 0;
-
- /**
- * Updates available resources on an agent based on a sequence of offer
- * operations. Operations may include reserve, unreserve, create or destroy.
- *
- * @param slaveId ID of the agent.
- * @param operations The offer operations to apply to this agent's resources.
- */
- virtual process::Future<Nothing> updateAvailable(
- const SlaveID& slaveId,
- const std::vector<Offer::Operation>& operations) = 0;
-
- /**
- * Updates unavailability for an agent.
- *
- * We currently support storing the next unavailability, if there is one,
- * per agent. If `unavailability` is not set then there is no known upcoming
- * unavailability. This might require the implementation of the function to
- * remove any inverse offers that are outstanding.
- */
- virtual void updateUnavailability(
- const SlaveID& slaveId,
- const Option<Unavailability>& unavailability) = 0;
-
- /**
- * Updates inverse offer.
- *
- * Informs the allocator that the inverse offer has been responded to or
- * revoked.
- *
- * @param unavailableResources The `unavailableResources` can be used by the
- * allocator to distinguish between different inverse offers sent to the
- * same framework for the same slave.
- * @param status If `status` is not set then the inverse offer was not
- * responded to, possibly because the offer timed out or was rescinded.
- * This might require the implementation of the function to remove any
- * inverse offers that are outstanding.
- * @param filters A filter attached to the inverse offer can be used by the
- * framework to control when it wants to be contacted again with the
- * inverse offer. The "filters" for InverseOffers are identical to the
- * existing mechanism for re-offering Offers to frameworks.
- */
- virtual void updateInverseOffer(
- const SlaveID& slaveId,
- const FrameworkID& frameworkId,
- const Option<UnavailableResources>& unavailableResources,
- const Option<InverseOfferStatus>& status,
- const Option<Filters>& filters = None()) = 0;
-
- /**
- * Retrieves the status of all inverse offers maintained by the allocator.
- */
- virtual process::Future<
- hashmap<SlaveID, hashmap<FrameworkID, mesos::master::InverseOfferStatus>>>
- getInverseOfferStatuses() = 0;
-
- /**
- * Recovers resources.
- *
- * Used to update the set of available resources for a specific agent. This
- * method is invoked to inform the allocator about allocated resources that
- * have been refused or are no longer in use.
- */
- virtual void recoverResources(
- const FrameworkID& frameworkId,
- const SlaveID& slaveId,
- const Resources& resources,
- const Option<Filters>& filters) = 0;
-
- /**
- * Suppresses offers.
- *
- * Informs the allocator to stop sending offers to the framework.
- */
- virtual void suppressOffers(
- const FrameworkID& frameworkId) = 0;
-
- /**
- * Revives offers for a framework. This is invoked by a framework when
- * it wishes to receive filtered resources or offers immediately.
- */
- virtual void reviveOffers(
- const FrameworkID& frameworkId) = 0;
-
- /**
- * Informs the allocator to set quota for the given role.
- *
- * It is up to the allocator implementation how to satisfy quota. An
- * implementation may employ different strategies for roles with or
- * without quota. Hence an empty (or zero) quota is not necessarily the
- * same as an absence of quota. Logically, this method implies that the
- * given role should be transitioned to the group of roles with quota
- * set. An allocator implementation may assert quota for the given role
- * is not set prior to the call and react accordingly if this assumption
- * is violated (i.e. fail).
- *
- * TODO(alexr): Consider returning a future which an allocator can fail
- * in order to report failure.
- *
- * TODO(alexr): Consider adding an `updateQuota()` method which allows
- * updating existing quota.
- */
- virtual void setQuota(
- const std::string& role,
- const Quota& quota) = 0;
-
- /**
- * Informs the allocator to remove quota for the given role.
- *
- * An allocator implementation may employ different strategies for roles
- * with or without quota. Hence an empty (or zero) quota is not necessarily
- * the same as an absence of quota. Logically, this method implies that the
- * given role should be transitioned to the group of roles without quota
- * set (absence of quota). An allocator implementation may assert quota
- * for the given role is set prior to the call and react accordingly if
- * this assumption is violated (i.e. fail).
- *
- * TODO(alexr): Consider returning a future which an allocator can fail in
- * order to report failure.
- */
- virtual void removeQuota(
- const std::string& role) = 0;
-
- /**
- * Updates the weight of each provided role.
- * Subsequent allocation calculations will use these updated weights.
- */
- virtual void updateWeights(
- const std::vector<WeightInfo>& weightInfos) = 0;
-};
-
-} // namespace allocator {
-} // namespace master {
-} // namespace mesos {
-
-#endif // __MESOS_MASTER_ALLOCATOR_HPP__
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/master/allocator.proto
----------------------------------------------------------------------
diff --git a/include/mesos/master/allocator.proto b/include/mesos/master/allocator.proto
deleted file mode 100644
index 8252abf..0000000
--- a/include/mesos/master/allocator.proto
+++ /dev/null
@@ -1,51 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import "mesos/mesos.proto";
-
-package mesos.master;
-
-
-/**
- * Describes the status of an inverse offer.
- *
- * This is a protobuf so as to be able to share the status to inverse offers
- * through endpoints such as the maintenance status endpoint.
- */
-message InverseOfferStatus {
- enum Status {
- // We have not received a response yet. This is the default state before
- // receiving a response.
- UNKNOWN = 1;
- // The framework is ok with the inverse offer. This means it will not
- // violate any SLAs and will attempt to evacuate any tasks running on the
- // agent. If the tasks are not evacuated by the framework, the operator can
- // manually shut down the slave knowing that the framework will not have
- // violated its SLAs.
- ACCEPT = 2;
- // The framework wants to block the maintenance operation from happening. An
- // example would be that it can not meet its SLA by losing resources.
- DECLINE = 3;
- }
-
- required Status status = 1;
- required FrameworkID framework_id = 2;
-
- // Time, since the epoch, when this status was last updated.
- required TimeInfo timestamp = 3;
-
- // TODO(jmlvanre): Capture decline message.
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/include/mesos/module/allocator.hpp
----------------------------------------------------------------------
diff --git a/include/mesos/module/allocator.hpp b/include/mesos/module/allocator.hpp
index 5e65e69..048ebca 100644
--- a/include/mesos/module/allocator.hpp
+++ b/include/mesos/module/allocator.hpp
@@ -20,20 +20,20 @@
#include <mesos/mesos.hpp>
#include <mesos/module.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
namespace mesos {
namespace modules {
template <>
-inline const char* kind<mesos::master::allocator::Allocator>()
+inline const char* kind<mesos::allocator::Allocator>()
{
return "Allocator";
}
template <>
-struct Module<mesos::master::allocator::Allocator> : ModuleBase
+struct Module<mesos::allocator::Allocator> : ModuleBase
{
Module(
const char* _moduleApiVersion,
@@ -42,19 +42,19 @@ struct Module<mesos::master::allocator::Allocator> : ModuleBase
const char* _authorEmail,
const char* _description,
bool (*_compatible)(),
- mesos::master::allocator::Allocator*
+ mesos::allocator::Allocator*
(*_create)(const Parameters& parameters))
: ModuleBase(
_moduleApiVersion,
_mesosVersion,
- mesos::modules::kind<mesos::master::allocator::Allocator>(),
+ mesos::modules::kind<mesos::allocator::Allocator>(),
_authorName,
_authorEmail,
_description,
_compatible),
create(_create) {}
- mesos::master::allocator::Allocator* (*create)(const Parameters& parameters);
+ mesos::allocator::Allocator* (*create)(const Parameters& parameters);
};
} // namespace modules {
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 872a102..97cc96d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -21,7 +21,7 @@ include(MesosProtobuf)
# Build the protobuf structs.
PROTOC_TO_INCLUDE_DIR(ACLS mesos/authorizer/acls)
PROTOC_TO_INCLUDE_DIR(AGENT mesos/agent/agent)
-PROTOC_TO_INCLUDE_DIR(ALLOCATOR mesos/master/allocator)
+PROTOC_TO_INCLUDE_DIR(ALLOCATOR mesos/allocator/allocator)
PROTOC_TO_INCLUDE_DIR(APPC_SPEC mesos/appc/spec)
PROTOC_TO_INCLUDE_DIR(AUTHENTICATION mesos/authentication/authentication)
PROTOC_TO_INCLUDE_DIR(AUTHORIZATION mesos/authorizer/authorizer)
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/Makefile.am
----------------------------------------------------------------------
diff --git a/src/Makefile.am b/src/Makefile.am
index e52f47e..86c39fd 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -207,7 +207,7 @@ MESOS_CPPFLAGS += -DHAS_AUTHENTICATION=1
ACLS_PROTO = $(top_srcdir)/include/mesos/authorizer/acls.proto
AGENT_PROTO = $(top_srcdir)/include/mesos/agent/agent.proto
-ALLOCATOR_PROTO = $(top_srcdir)/include/mesos/master/allocator.proto
+ALLOCATOR_PROTO = $(top_srcdir)/include/mesos/allocator/allocator.proto
APPC_SPEC_PROTO = $(top_srcdir)/include/mesos/appc/spec.proto
AUTHENTICATION_PROTO = $(top_srcdir)/include/mesos/authentication/authentication.proto
AUTHORIZATION_PROTO = $(top_srcdir)/include/mesos/authorizer/authorizer.proto
@@ -242,6 +242,8 @@ CXX_PROTOS = \
../include/mesos/mesos.pb.h \
../include/mesos/agent/agent.pb.cc \
../include/mesos/agent/agent.pb.h \
+ ../include/mesos/allocator/allocator.pb.cc \
+ ../include/mesos/allocator/allocator.pb.h \
../include/mesos/appc/spec.pb.cc \
../include/mesos/appc/spec.pb.h \
../include/mesos/authentication/authentication.pb.cc \
@@ -264,8 +266,6 @@ CXX_PROTOS = \
../include/mesos/fetcher/fetcher.pb.h \
../include/mesos/maintenance/maintenance.pb.cc \
../include/mesos/maintenance/maintenance.pb.h \
- ../include/mesos/master/allocator.pb.cc \
- ../include/mesos/master/allocator.pb.h \
../include/mesos/master/master.pb.cc \
../include/mesos/master/master.pb.h \
../include/mesos/module/module.pb.cc \
@@ -464,6 +464,15 @@ nodist_pkginclude_HEADERS = \
../include/mesos/version.hpp \
../include/mesos/mesos.pb.h
+allocatordir = $(pkgincludedir)/allocator
+
+allocator_HEADERS = \
+ $(top_srcdir)/include/mesos/allocator/allocator.hpp \
+ $(top_srcdir)/include/mesos/allocator/allocator.proto
+
+nodist_allocator_HEADERS = \
+ ../include/mesos/allocator/allocator.pb.h
+
appcdir = $(pkgincludedir)/appc
appc_HEADERS = \
@@ -556,15 +565,12 @@ nodist_maintenance_HEADERS = \
masterdir = $(pkgincludedir)/master
master_HEADERS = \
- $(top_srcdir)/include/mesos/master/allocator.hpp \
- $(top_srcdir)/include/mesos/master/allocator.proto \
$(top_srcdir)/include/mesos/master/contender.hpp \
$(top_srcdir)/include/mesos/master/detector.hpp \
$(top_srcdir)/include/mesos/master/master.hpp \
$(top_srcdir)/include/mesos/master/master.proto
nodist_master_HEADERS = \
- ../include/mesos/master/allocator.pb.h \
../include/mesos/master/master.pb.h
moduledir = $(pkgincludedir)/module
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/examples/test_allocator_module.cpp
----------------------------------------------------------------------
diff --git a/src/examples/test_allocator_module.cpp b/src/examples/test_allocator_module.cpp
index bc28eb4..f591415 100644
--- a/src/examples/test_allocator_module.cpp
+++ b/src/examples/test_allocator_module.cpp
@@ -17,7 +17,7 @@
#include <mesos/mesos.hpp>
#include <mesos/module.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/allocator.hpp>
@@ -29,7 +29,7 @@
using namespace mesos;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::internal::master::allocator::HierarchicalDRFAllocator;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/local/local.cpp
----------------------------------------------------------------------
diff --git a/src/local/local.cpp b/src/local/local.cpp
index b40ca7c..a543aef 100644
--- a/src/local/local.cpp
+++ b/src/local/local.cpp
@@ -23,7 +23,7 @@
#include <mesos/authorizer/authorizer.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/anonymous.hpp>
#include <mesos/module/authorizer.hpp>
@@ -80,7 +80,7 @@ using namespace mesos::internal::log;
using mesos::log::Log;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::master::contender::MasterContender;
using mesos::master::contender::StandaloneMasterContender;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/local/local.hpp
----------------------------------------------------------------------
diff --git a/src/local/local.hpp b/src/local/local.hpp
index 0c86f97..16999a0 100644
--- a/src/local/local.hpp
+++ b/src/local/local.hpp
@@ -17,7 +17,7 @@
#ifndef __MESOS_LOCAL_HPP__
#define __MESOS_LOCAL_HPP__
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/process.hpp>
@@ -38,7 +38,7 @@ namespace local {
// Launch a local cluster with the given flags.
process::PID<master::Master> launch(
const Flags& flags,
- mesos::master::allocator::Allocator* _allocator = nullptr);
+ mesos::allocator::Allocator* _allocator = nullptr);
void shutdown();
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/allocator/allocator.cpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/allocator.cpp b/src/master/allocator/allocator.cpp
index 8e76a3a..e3dd737 100644
--- a/src/master/allocator/allocator.cpp
+++ b/src/master/allocator/allocator.cpp
@@ -14,7 +14,7 @@
// See the License for the specific language governing permissions and
// limitations under the License.
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/allocator.hpp>
@@ -29,7 +29,6 @@ using std::string;
using mesos::internal::master::allocator::HierarchicalDRFAllocator;
namespace mesos {
-namespace master {
namespace allocator {
Try<Allocator*> Allocator::create(const string& name)
@@ -46,5 +45,4 @@ Try<Allocator*> Allocator::create(const string& name)
}
} // namespace allocator {
-} // namespace master {
} // namespace mesos {
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/allocator/mesos/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/allocator.hpp b/src/master/allocator/mesos/allocator.hpp
index 64bce0f..f096d2b 100644
--- a/src/master/allocator/mesos/allocator.hpp
+++ b/src/master/allocator/mesos/allocator.hpp
@@ -17,7 +17,7 @@
#ifndef __MASTER_ALLOCATOR_MESOS_ALLOCATOR_HPP__
#define __MASTER_ALLOCATOR_MESOS_ALLOCATOR_HPP__
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/dispatch.hpp>
#include <process/future.hpp>
@@ -38,11 +38,11 @@ class MesosAllocatorProcess;
// lifetime. We ensure the template parameter AllocatorProcess
// implements MesosAllocatorProcess by storing a pointer to it.
template <typename AllocatorProcess>
-class MesosAllocator : public mesos::master::allocator::Allocator
+class MesosAllocator : public mesos::allocator::Allocator
{
public:
// Factory to allow for typed tests.
- static Try<mesos::master::allocator::Allocator*> create();
+ static Try<mesos::allocator::Allocator*> create();
~MesosAllocator();
@@ -123,11 +123,12 @@ public:
const SlaveID& slaveId,
const FrameworkID& frameworkId,
const Option<UnavailableResources>& unavailableResources,
- const Option<mesos::master::InverseOfferStatus>& status,
+ const Option<mesos::allocator::InverseOfferStatus>& status,
const Option<Filters>& filters);
process::Future<
- hashmap<SlaveID, hashmap<FrameworkID, mesos::master::InverseOfferStatus>>>
+ hashmap<SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>>>
getInverseOfferStatuses();
void recoverResources(
@@ -250,11 +251,12 @@ public:
const SlaveID& slaveId,
const FrameworkID& frameworkId,
const Option<UnavailableResources>& unavailableResources,
- const Option<mesos::master::InverseOfferStatus>& status,
+ const Option<mesos::allocator::InverseOfferStatus>& status,
const Option<Filters>& filters = None()) = 0;
virtual process::Future<
- hashmap<SlaveID, hashmap<FrameworkID, mesos::master::InverseOfferStatus>>>
+ hashmap<SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>>>
getInverseOfferStatuses() = 0;
virtual void recoverResources(
@@ -282,10 +284,10 @@ public:
template <typename AllocatorProcess>
-Try<mesos::master::allocator::Allocator*>
+Try<mesos::allocator::Allocator*>
MesosAllocator<AllocatorProcess>::create()
{
- mesos::master::allocator::Allocator* allocator =
+ mesos::allocator::Allocator* allocator =
new MesosAllocator<AllocatorProcess>();
return CHECK_NOTNULL(allocator);
}
@@ -539,7 +541,7 @@ inline void MesosAllocator<AllocatorProcess>::updateInverseOffer(
const SlaveID& slaveId,
const FrameworkID& frameworkId,
const Option<UnavailableResources>& unavailableResources,
- const Option<mesos::master::InverseOfferStatus>& status,
+ const Option<mesos::allocator::InverseOfferStatus>& status,
const Option<Filters>& filters)
{
return process::dispatch(
@@ -555,7 +557,8 @@ inline void MesosAllocator<AllocatorProcess>::updateInverseOffer(
template <typename AllocatorProcess>
inline process::Future<
- hashmap<SlaveID, hashmap<FrameworkID, mesos::master::InverseOfferStatus>>>
+ hashmap<SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>>>
MesosAllocator<AllocatorProcess>::getInverseOfferStatuses()
{
return process::dispatch(
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/allocator/mesos/hierarchical.cpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.cpp b/src/master/allocator/mesos/hierarchical.cpp
index 5b2331b..c363934 100644
--- a/src/master/allocator/mesos/hierarchical.cpp
+++ b/src/master/allocator/mesos/hierarchical.cpp
@@ -35,7 +35,7 @@
using std::string;
using std::vector;
-using mesos::master::InverseOfferStatus;
+using mesos::allocator::InverseOfferStatus;
using process::Failure;
using process::Future;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/allocator/mesos/hierarchical.hpp
----------------------------------------------------------------------
diff --git a/src/master/allocator/mesos/hierarchical.hpp b/src/master/allocator/mesos/hierarchical.hpp
index c9cb1e1..98a1f69 100644
--- a/src/master/allocator/mesos/hierarchical.hpp
+++ b/src/master/allocator/mesos/hierarchical.hpp
@@ -168,11 +168,12 @@ public:
const SlaveID& slaveId,
const FrameworkID& frameworkId,
const Option<UnavailableResources>& unavailableResources,
- const Option<mesos::master::InverseOfferStatus>& status,
+ const Option<mesos::allocator::InverseOfferStatus>& status,
const Option<Filters>& filters);
process::Future<
- hashmap<SlaveID, hashmap<FrameworkID, mesos::master::InverseOfferStatus>>>
+ hashmap<SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>>>
getInverseOfferStatuses();
void recoverResources(
@@ -359,7 +360,7 @@ protected:
// allocator will send out new inverse offers and re-collect the
// information. This is similar to all the outstanding offers from an old
// master being invalidated, and new offers being sent out.
- hashmap<FrameworkID, mesos::master::InverseOfferStatus> statuses;
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus> statuses;
// Represents the "unit of accounting" for maintenance. When a
// `FrameworkID` is present in the hashset it means an inverse offer has
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index ad3f723..d55aa05 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -3420,10 +3420,9 @@ Future<mesos::maintenance::ClusterStatus>
return master->allocator->getInverseOfferStatuses()
.then(defer(
master->self(),
- [=](
- hashmap<
- SlaveID,
- hashmap<FrameworkID, mesos::master::InverseOfferStatus>> result)
+ [=](hashmap<
+ SlaveID,
+ hashmap<FrameworkID, mesos::allocator::InverseOfferStatus>> result)
-> Future<mesos::maintenance::ClusterStatus> {
// Unwrap the master's machine information into two arrays of machines.
// The data is coming from the allocator and therefore could be stale.
@@ -3444,7 +3443,7 @@ Future<mesos::maintenance::ClusterStatus>
foreach (const SlaveID& slave, machine.slaves) {
if (result.contains(slave)) {
foreachvalue (
- const mesos::master::InverseOfferStatus& status,
+ const mesos::allocator::InverseOfferStatus& status,
result[slave]) {
drainingMachine->add_statuses()->CopyFrom(status);
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/main.cpp
----------------------------------------------------------------------
diff --git a/src/master/main.cpp b/src/master/main.cpp
index 01c8276..84f3b07 100644
--- a/src/master/main.cpp
+++ b/src/master/main.cpp
@@ -26,7 +26,7 @@
#include <mesos/authorizer/authorizer.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/master/contender.hpp>
#include <mesos/master/detector.hpp>
@@ -88,7 +88,7 @@ using mesos::Parameters;
using mesos::log::Log;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::master::contender::MasterContender;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index d89c049..907233b 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -33,7 +33,7 @@
#include <mesos/authorizer/authorizer.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/master/contender.hpp>
#include <mesos/master/detector.hpp>
@@ -124,7 +124,7 @@ namespace master {
namespace authentication = process::http::authentication;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::master::contender::MasterContender;
@@ -4025,8 +4025,8 @@ void Master::acceptInverseOffers(
CHECK(inverseOffer->has_slave_id());
slaveId = inverseOffer->slave_id();
- mesos::master::InverseOfferStatus status;
- status.set_status(mesos::master::InverseOfferStatus::ACCEPT);
+ mesos::allocator::InverseOfferStatus status;
+ status.set_status(mesos::allocator::InverseOfferStatus::ACCEPT);
status.mutable_framework_id()->CopyFrom(inverseOffer->framework_id());
status.mutable_timestamp()->CopyFrom(protobuf::getCurrentTime());
@@ -4115,8 +4115,8 @@ void Master::declineInverseOffers(
// longer valid.
InverseOffer* inverseOffer = getInverseOffer(offerId);
if (inverseOffer != nullptr) { // If this is an inverse offer.
- mesos::master::InverseOfferStatus status;
- status.set_status(mesos::master::InverseOfferStatus::DECLINE);
+ mesos::allocator::InverseOfferStatus status;
+ status.set_status(mesos::allocator::InverseOfferStatus::DECLINE);
status.mutable_framework_id()->CopyFrom(inverseOffer->framework_id());
status.mutable_timestamp()->CopyFrom(protobuf::getCurrentTime());
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index e983d1b..648f1a2 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -32,7 +32,7 @@
#include <mesos/maintenance/maintenance.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/master/contender.hpp>
#include <mesos/master/detector.hpp>
#include <mesos/master/master.hpp>
@@ -392,7 +392,7 @@ struct HttpConnection
class Master : public ProtobufProcess<Master>
{
public:
- Master(mesos::master::allocator::Allocator* allocator,
+ Master(mesos::allocator::Allocator* allocator,
Registrar* registrar,
Files* files,
mesos::master::contender::MasterContender* contender,
@@ -1471,7 +1471,7 @@ private:
Option<MasterInfo> leader; // Current leading master.
- mesos::master::allocator::Allocator* allocator;
+ mesos::allocator::Allocator* allocator;
WhitelistWatcher* whitelistWatcher;
Registrar* registrar;
Files* files;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/allocator.hpp
----------------------------------------------------------------------
diff --git a/src/tests/allocator.hpp b/src/tests/allocator.hpp
index 4081193..bc2d89e 100644
--- a/src/tests/allocator.hpp
+++ b/src/tests/allocator.hpp
@@ -19,7 +19,7 @@
#include <gmock/gmock.h>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/future.hpp>
#include <process/gmock.hpp>
@@ -203,17 +203,17 @@ ACTION_P(InvokeUpdateWeights, allocator)
template <typename T = master::allocator::HierarchicalDRFAllocator>
-mesos::master::allocator::Allocator* createAllocator()
+mesos::allocator::Allocator* createAllocator()
{
// T represents the allocator type. It can be a default built-in
// allocator, or one provided by an allocator module.
- Try<mesos::master::allocator::Allocator*> instance = T::create();
+ Try<mesos::allocator::Allocator*> instance = T::create();
CHECK_SOME(instance);
return CHECK_NOTNULL(instance.get());
}
template <typename T = master::allocator::HierarchicalDRFAllocator>
-class TestAllocator : public mesos::master::allocator::Allocator
+class TestAllocator : public mesos::allocator::Allocator
{
public:
// Actual allocation is done by an instance of real allocator,
@@ -433,13 +433,13 @@ public:
const SlaveID&,
const FrameworkID&,
const Option<UnavailableResources>&,
- const Option<mesos::master::InverseOfferStatus>&,
+ const Option<mesos::allocator::InverseOfferStatus>&,
const Option<Filters>&));
MOCK_METHOD0(getInverseOfferStatuses, process::Future<
hashmap<SlaveID, hashmap<
FrameworkID,
- mesos::master::InverseOfferStatus>>>());
+ mesos::allocator::InverseOfferStatus>>>());
MOCK_METHOD4(recoverResources, void(
const FrameworkID&,
@@ -463,7 +463,7 @@ public:
MOCK_METHOD1(updateWeights, void(
const std::vector<WeightInfo>&));
- process::Owned<mesos::master::allocator::Allocator> real;
+ process::Owned<mesos::allocator::Allocator> real;
};
} // namespace tests {
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/cluster.cpp
----------------------------------------------------------------------
diff --git a/src/tests/cluster.cpp b/src/tests/cluster.cpp
index f25b887..e1be275 100644
--- a/src/tests/cluster.cpp
+++ b/src/tests/cluster.cpp
@@ -24,7 +24,7 @@
#include <mesos/log/log.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/slave/resource_estimator.hpp>
@@ -104,7 +104,7 @@ namespace cluster {
Try<process::Owned<Master>> Master::start(
const master::Flags& flags,
const Option<zookeeper::URL>& zookeeperUrl,
- const Option<mesos::master::allocator::Allocator*>& allocator,
+ const Option<mesos::allocator::Allocator*>& allocator,
const Option<Authorizer*>& authorizer,
const Option<std::shared_ptr<process::RateLimiter>>& slaveRemovalLimiter)
{
@@ -113,7 +113,7 @@ Try<process::Owned<Master>> Master::start(
// If the allocator is not provided, create a default one.
if (allocator.isNone()) {
- Try<mesos::master::allocator::Allocator*> _allocator =
+ Try<mesos::allocator::Allocator*> _allocator =
master::allocator::HierarchicalDRFAllocator::create();
if (_allocator.isError()) {
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/cluster.hpp
----------------------------------------------------------------------
diff --git a/src/tests/cluster.hpp b/src/tests/cluster.hpp
index 3b37f96..55dbaae 100644
--- a/src/tests/cluster.hpp
+++ b/src/tests/cluster.hpp
@@ -26,7 +26,7 @@
#include <mesos/log/log.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/master/contender.hpp>
#include <mesos/master/detector.hpp>
@@ -82,7 +82,7 @@ public:
static Try<process::Owned<Master>> start(
const master::Flags& flags = master::Flags(),
const Option<zookeeper::URL>& zookeeperUrl = None(),
- const Option<mesos::master::allocator::Allocator*>& allocator = None(),
+ const Option<mesos::allocator::Allocator*>& allocator = None(),
const Option<Authorizer*>& authorizer = None(),
const Option<std::shared_ptr<process::RateLimiter>>&
slaveRemovalLimiter = None());
@@ -112,7 +112,7 @@ private:
Files files;
// Dependencies that are created by the factory method.
- process::Owned<mesos::master::allocator::Allocator> allocator;
+ process::Owned<mesos::allocator::Allocator> allocator;
process::Owned<Authorizer> authorizer;
process::Owned<mesos::master::contender::MasterContender> contender;
process::Owned<mesos::master::detector::MasterDetector> detector;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/fault_tolerance_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/fault_tolerance_tests.cpp b/src/tests/fault_tolerance_tests.cpp
index 5109b83..57b1503 100644
--- a/src/tests/fault_tolerance_tests.cpp
+++ b/src/tests/fault_tolerance_tests.cpp
@@ -25,7 +25,7 @@
#include <mesos/authentication/authentication.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/scheduler/scheduler.hpp>
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/hierarchical_allocator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/hierarchical_allocator_tests.cpp b/src/tests/hierarchical_allocator_tests.cpp
index 6de0702..eb11ff6 100644
--- a/src/tests/hierarchical_allocator_tests.cpp
+++ b/src/tests/hierarchical_allocator_tests.cpp
@@ -22,7 +22,7 @@
#include <gmock/gmock.h>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/clock.hpp>
#include <process/future.hpp>
@@ -55,7 +55,7 @@ using mesos::internal::master::allocator::HierarchicalDRFAllocator;
using mesos::internal::protobuf::createLabel;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using process::Clock;
using process::Future;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/master_allocator_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_allocator_tests.cpp b/src/tests/master_allocator_tests.cpp
index 0425266..7910f55 100644
--- a/src/tests/master_allocator_tests.cpp
+++ b/src/tests/master_allocator_tests.cpp
@@ -23,7 +23,7 @@
#include <mesos/executor.hpp>
#include <mesos/scheduler.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/allocator.hpp>
@@ -52,7 +52,7 @@
using google::protobuf::RepeatedPtrField;
-using mesos::master::allocator::Allocator;
+using mesos::allocator::Allocator;
using mesos::internal::master::allocator::HierarchicalDRFAllocator;
using mesos::internal::master::Master;
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/master_authorization_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_authorization_tests.cpp b/src/tests/master_authorization_tests.cpp
index 9ae6b9d..1cda523 100644
--- a/src/tests/master_authorization_tests.cpp
+++ b/src/tests/master_authorization_tests.cpp
@@ -24,7 +24,7 @@
#include <mesos/authorizer/authorizer.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/module/authorizer.hpp>
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/master_maintenance_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_maintenance_tests.cpp b/src/tests/master_maintenance_tests.cpp
index b104385..2d4b45f 100644
--- a/src/tests/master_maintenance_tests.cpp
+++ b/src/tests/master_maintenance_tests.cpp
@@ -1300,7 +1300,7 @@ TEST_F(MasterMaintenanceTest, InverseOffers)
ASSERT_EQ(1, statuses.get().draining_machines(0).statuses().size());
ASSERT_EQ(
- mesos::master::InverseOfferStatus::DECLINE,
+ mesos::allocator::InverseOfferStatus::DECLINE,
statuses.get().draining_machines(0).statuses(0).status());
ASSERT_EQ(
@@ -1363,7 +1363,7 @@ TEST_F(MasterMaintenanceTest, InverseOffers)
ASSERT_EQ(1, statuses.get().draining_machines(0).statuses().size());
ASSERT_EQ(
- mesos::master::InverseOfferStatus::ACCEPT,
+ mesos::allocator::InverseOfferStatus::ACCEPT,
statuses.get().draining_machines(0).statuses(0).status());
ASSERT_EQ(
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/master_slave_reconciliation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_slave_reconciliation_tests.cpp b/src/tests/master_slave_reconciliation_tests.cpp
index f67bfd2..fc02ca6 100644
--- a/src/tests/master_slave_reconciliation_tests.cpp
+++ b/src/tests/master_slave_reconciliation_tests.cpp
@@ -22,7 +22,7 @@
#include <mesos/mesos.hpp>
#include <mesos/scheduler.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/future.hpp>
#include <process/gmock.hpp>
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/master_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/master_tests.cpp b/src/tests/master_tests.cpp
index ce9c192..ddbab7a 100644
--- a/src/tests/master_tests.cpp
+++ b/src/tests/master_tests.cpp
@@ -25,7 +25,7 @@
#include <mesos/executor.hpp>
#include <mesos/scheduler.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/scheduler/scheduler.hpp>
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/mesos.cpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.cpp b/src/tests/mesos.cpp
index 6918343..a433e5b 100644
--- a/src/tests/mesos.cpp
+++ b/src/tests/mesos.cpp
@@ -252,7 +252,7 @@ Try<Owned<cluster::Master>> MesosTest::StartMaster(
Try<Owned<cluster::Master>> MesosTest::StartMaster(
- mesos::master::allocator::Allocator* allocator,
+ mesos::allocator::Allocator* allocator,
const Option<master::Flags>& flags)
{
return cluster::Master::start(
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/mesos.hpp
----------------------------------------------------------------------
diff --git a/src/tests/mesos.hpp b/src/tests/mesos.hpp
index bcd060e..3173bf9 100644
--- a/src/tests/mesos.hpp
+++ b/src/tests/mesos.hpp
@@ -127,7 +127,7 @@ protected:
// Starts a master with the specified allocator process and flags.
virtual Try<process::Owned<cluster::Master>> StartMaster(
- mesos::master::allocator::Allocator* allocator,
+ mesos::allocator::Allocator* allocator,
const Option<master::Flags>& flags = None());
// Starts a master with the specified authorizer and flags.
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/rate_limiting_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/rate_limiting_tests.cpp b/src/tests/rate_limiting_tests.cpp
index 5d68ac1..6167415 100644
--- a/src/tests/rate_limiting_tests.cpp
+++ b/src/tests/rate_limiting_tests.cpp
@@ -16,7 +16,7 @@
#include <gmock/gmock.h>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <mesos/scheduler/scheduler.hpp>
http://git-wip-us.apache.org/repos/asf/mesos/blob/170ac150/src/tests/reservation_tests.cpp
----------------------------------------------------------------------
diff --git a/src/tests/reservation_tests.cpp b/src/tests/reservation_tests.cpp
index 2cc352d..d7e90bc 100644
--- a/src/tests/reservation_tests.cpp
+++ b/src/tests/reservation_tests.cpp
@@ -25,7 +25,7 @@
#include <mesos/executor.hpp>
#include <mesos/scheduler.hpp>
-#include <mesos/master/allocator.hpp>
+#include <mesos/allocator/allocator.hpp>
#include <process/clock.hpp>
#include <process/future.hpp>