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 145a115b9 [agent] Add executor_id / framework_id query parameters in /containers. 145a115b9 is described below commit 145a115b9440077a93e2186512ec7079aa7c686c Author: None <None> AuthorDate: Thu May 23 19:02:13 2024 -0400 [agent] Add executor_id / framework_id query parameters in /containers. We now allow filtering by framework ID and executor ID in addition to the original functionality of filtering by container ID. Please note that the /containers endooint only allows select combinations of these query parameter fields to be populated at once. We will return a failure if we see that the combination of query paramters is invalid. We currently accept: * no query parameters * only container id * only framework id * only framework id and executor id Review: https://reviews.apache.org/r/75009/ --- src/slave/http.cpp | 29 +++++++++++++++++++++++++---- src/slave/http.hpp | 2 ++ 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/slave/http.cpp b/src/slave/http.cpp index ff3408f65..b35207c02 100644 --- a/src/slave/http.cpp +++ b/src/slave/http.cpp @@ -2838,6 +2838,8 @@ Future<Response> Http::getContainers( return __containers( approvers, None(), + None(), + None(), call.get_containers().show_nested(), call.get_containers().show_standalone()); })) @@ -2856,6 +2858,14 @@ Future<Response> Http::_containers( const Option<Principal>& principal) const { Option<string> containerId = request.url.query.get("container_id"); + Option<string> frameworkId = request.url.query.get("framework_id"); + Option<string> executorId = request.url.query.get("executor_id"); + + if ((containerId.isSome() && !(executorId.isNone() && frameworkId.isNone())) + || (containerId.isNone() && executorId.isSome() && frameworkId.isNone())) { + return BadRequest("Supported query parameters are container_id only," + " framework_id only, or executor_id and framework_id only"); + } return ObjectApprovers::create( slave->authorizer, @@ -2863,12 +2873,16 @@ Future<Response> Http::_containers( {VIEW_CONTAINER, VIEW_STANDALONE_CONTAINER}) .then(defer( slave->self(), - [this, containerId](const Owned<ObjectApprovers>& approvers) { + [this, containerId, executorId, frameworkId](const Owned<ObjectApprovers>& approvers) { IDAcceptor<ContainerID> selectContainerId(containerId); + IDAcceptor<FrameworkID> selectFrameworkId(frameworkId); + IDAcceptor<ExecutorID> selectExecutorId(executorId); return __containers( approvers, selectContainerId, + selectFrameworkId, + selectExecutorId, false, false); })) @@ -2881,6 +2895,8 @@ Future<Response> Http::_containers( Future<JSON::Array> Http::__containers( const Owned<ObjectApprovers>& approvers, Option<IDAcceptor<ContainerID>> selectContainerId, + Option<IDAcceptor<FrameworkID>> selectFrameworkId, + Option<IDAcceptor<ExecutorID>> selectExecutorId, bool showNestedContainers, bool showStandaloneContainers) const { @@ -2894,6 +2910,10 @@ Future<JSON::Array> Http::__containers( hashset<ContainerID> authorizedExecutorContainerIds; foreachvalue (const Framework* framework, slave->frameworks) { + if (selectFrameworkId.isSome() && !selectFrameworkId->accept(framework->id())) { + continue; + } + foreachvalue (const Executor* executor, framework->executors) { // No need to get statistics and status if we know that the // executor has already terminated. @@ -2902,13 +2922,14 @@ Future<JSON::Array> Http::__containers( } const ExecutorInfo& info = executor->info; + const ExecutorID& executorId = executor->id; const ContainerID& containerId = executor->containerId; executorContainerIds.insert(containerId); - if ((selectContainerId.isSome() && - !selectContainerId->accept(containerId)) || - !approvers->approved<VIEW_CONTAINER>(info, framework->info)) { + if ((selectContainerId.isSome() && !selectContainerId->accept(containerId)) + || (selectExecutorId.isSome() && !selectExecutorId->accept(executorId)) + || !approvers->approved<VIEW_CONTAINER>(info, framework->info)) { continue; } diff --git a/src/slave/http.hpp b/src/slave/http.hpp index 92114ea5e..ff39b3f84 100644 --- a/src/slave/http.hpp +++ b/src/slave/http.hpp @@ -123,6 +123,8 @@ private: process::Future<JSON::Array> __containers( const process::Owned<ObjectApprovers>& approvers, Option<IDAcceptor<ContainerID>> selectContainerId, + Option<IDAcceptor<FrameworkID>> selectFrameworkId, + Option<IDAcceptor<ExecutorID>> selectExecutorId, bool showNestedContainers, bool showStandaloneContainers) const;