This is an automated email from the ASF dual-hosted git repository.
bmahler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push:
new 2453aa4 Added an UPDATE_FRAMEWORK scheduler::Call.
2453aa4 is described below
commit 2453aa4f2dd19b861b082e10caef73f7747fd0c4
Author: Andrei Sekretenko <[email protected]>
AuthorDate: Mon May 20 09:10:34 2019 -0400
Added an UPDATE_FRAMEWORK scheduler::Call.
This patch definies the call to be used by a framework for updating its
FrameworkInfo fields without re-subscribing.
It is based on the previous implementation attempt:
https://reviews.apache.org/r/66228/
Review: https://reviews.apache.org/r/70532/
---
include/mesos/scheduler/scheduler.proto | 30 ++++++++++++++++++++++
include/mesos/v1/scheduler/scheduler.proto | 30 ++++++++++++++++++++++
.../jni/org_apache_mesos_v1_scheduler_V0Mesos.cpp | 3 ++-
src/master/http.cpp | 3 +++
src/master/master.cpp | 7 +++++
src/master/validation.cpp | 3 +++
6 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/include/mesos/scheduler/scheduler.proto
b/include/mesos/scheduler/scheduler.proto
index b6d79b1..6e1639a 100644
--- a/include/mesos/scheduler/scheduler.proto
+++ b/include/mesos/scheduler/scheduler.proto
@@ -267,6 +267,7 @@ message Call {
MESSAGE = 10; // See 'Message' below.
REQUEST = 11; // See 'Request' below.
SUPPRESS = 12; // Inform master to stop sending offers to the framework.
+ UPDATE_FRAMEWORK = 17; // See `UpdateFramework` below.
// TODO(benh): Consider adding an 'ACTIVATE' and 'DEACTIVATE' for
// already subscribed frameworks as a way of stopping offers from
@@ -488,6 +489,34 @@ message Call {
repeated string roles = 1;
}
+ // Updates the FrameworkInfo. All fields can be updated except for:
+ //
+ // * FrameworkInfo.checkpoint
+ // * FrameworkInfo.principal
+ // * FrameworkInfo.user
+ //
+ // The call returns after the update is either applied completely or
+ // not applied at all. No incomplete updates occur.
+ //
+ // The HTTP response codes specific to this call are:
+ //
+ // * 200 OK: update operation was successfully completed.
+ // * 400 Bad Request: the requested update is not valid.
+ // * 403 Forbidden: framework is not authorized to use some entities
+ // requested by the update (e.g. not authorized to use some of the
+ // supplied roles).
+ // * 409 Conflict: framework disappeared while this call was being processed
+ // (example: the framework was removed by a concurrent TEARDOWN call).
+ //
+ message UpdateFramework {
+ required FrameworkInfo framework_info = 1;
+
+ // List of suppressed roles for which the framework does not wish to be
+ // offered resources. The framework can decide to suppress all or a subset
+ // of roles provided in the new `framework_info`.
+ repeated string suppressed_roles = 2;
+ }
+
// Identifies who generated this call. Master assigns a framework id
// when a new scheduler subscribes for the first time. Once assigned,
// the scheduler must set the 'framework_id' here and within its
@@ -517,4 +546,5 @@ message Call {
optional Message message = 10;
optional Request request = 11;
optional Suppress suppress = 16;
+ optional UpdateFramework update_framework = 19;
}
diff --git a/include/mesos/v1/scheduler/scheduler.proto
b/include/mesos/v1/scheduler/scheduler.proto
index bddd5c4..eb5fdeb 100644
--- a/include/mesos/v1/scheduler/scheduler.proto
+++ b/include/mesos/v1/scheduler/scheduler.proto
@@ -265,6 +265,7 @@ message Call {
MESSAGE = 10; // See 'Message' below.
REQUEST = 11; // See 'Request' below.
SUPPRESS = 12; // Inform master to stop sending offers to the framework.
+ UPDATE_FRAMEWORK = 17; // See 'UpdateFramework' below.
// TODO(benh): Consider adding an 'ACTIVATE' and 'DEACTIVATE' for
// already subscribed frameworks as a way of stopping offers from
@@ -480,6 +481,34 @@ message Call {
repeated string roles = 1;
}
+ // Updates the FrameworkInfo. All fields can be updated except for:
+ //
+ // * FrameworkInfo.checkpoint
+ // * FrameworkInfo.principal
+ // * FrameworkInfo.user
+ //
+ // The call returns after the update is either applied completely or
+ // not applied at all. No incomplete updates occur.
+ //
+ // The HTTP response codes specific to this call are:
+ //
+ // * 200 OK: update operation was successfully completed.
+ // * 400 Bad Request: the requested update is not valid.
+ // * 403 Forbidden: framework is not authorized to use some entities
+ // requested by the update (e.g. not authorized to use some of the
+ // supplied roles).
+ // * 409 Conflict: framework disappeared while this call was being processed
+ // (example: the framework was removed by a concurrent TEARDOWN call).
+ //
+ message UpdateFramework {
+ required FrameworkInfo framework_info = 1;
+
+ // List of suppressed roles for which the framework does not wish to be
+ // offered resources. The framework can decide to suppress all or a subset
+ // of roles provided in the new `framework_info`.
+ repeated string suppressed_roles = 2;
+ }
+
// Identifies who generated this call. Master assigns a framework id
// when a new scheduler subscribes for the first time. Once assigned,
// the scheduler must set the 'framework_id' here and within its
@@ -509,6 +538,7 @@ message Call {
optional Message message = 10;
optional Request request = 11;
optional Suppress suppress = 16;
+ optional UpdateFramework update_framework = 19;
}
/**
diff --git a/src/java/jni/org_apache_mesos_v1_scheduler_V0Mesos.cpp
b/src/java/jni/org_apache_mesos_v1_scheduler_V0Mesos.cpp
index 35a04a3..7afd0e9 100644
--- a/src/java/jni/org_apache_mesos_v1_scheduler_V0Mesos.cpp
+++ b/src/java/jni/org_apache_mesos_v1_scheduler_V0Mesos.cpp
@@ -600,7 +600,8 @@ void V0ToV1AdapterProcess::send(SchedulerDriver* driver,
const Call& _call)
case scheduler::Call::ACCEPT_INVERSE_OFFERS:
case scheduler::Call::DECLINE_INVERSE_OFFERS:
- case scheduler::Call::SHUTDOWN: {
+ case scheduler::Call::SHUTDOWN:
+ case scheduler::Call::UPDATE_FRAMEWORK: {
// TODO(anand): Throw java error.
LOG(ERROR) << "Received an unexpected " << call.type() << " call";
break;
diff --git a/src/master/http.cpp b/src/master/http.cpp
index c2c7b9b..1618794 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -715,6 +715,9 @@ Future<Response> Master::Http::scheduler(
master->request(framework, call.request());
return Accepted();
+ case scheduler::Call::UPDATE_FRAMEWORK:
+ return NotImplemented();
+
case scheduler::Call::UNKNOWN:
LOG(WARNING) << "Received 'UNKNOWN' call";
return NotImplemented();
diff --git a/src/master/master.cpp b/src/master/master.cpp
index c72b926..657a7e9 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -2490,6 +2490,13 @@ void Master::receive(
suppress(framework, call.suppress());
break;
+ case scheduler::Call::UPDATE_FRAMEWORK:
+ drop(
+ from,
+ call,
+ "'UPDATE_FRAMEWORK' is not supported by the v0 API");
+ break;
+
case scheduler::Call::UNKNOWN:
LOG(WARNING) << "'UNKNOWN' call";
break;
diff --git a/src/master/validation.cpp b/src/master/validation.cpp
index 9fb0850..764c846 100644
--- a/src/master/validation.cpp
+++ b/src/master/validation.cpp
@@ -725,6 +725,9 @@ Option<Error> validate(
}
return None();
+ case mesos::scheduler::Call::UPDATE_FRAMEWORK:
+ return Error("Call not implemented");
+
case mesos::scheduler::Call::UNKNOWN:
return None();
}