You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by an...@apache.org on 2016/07/07 18:20:03 UTC
[07/11] mesos git commit: Implemented `LIST_FILES` call in v1 master
API.
Implemented `LIST_FILES` call in v1 master API.
Review: https://reviews.apache.org/r/49446/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/2238ccf5
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/2238ccf5
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/2238ccf5
Branch: refs/heads/master
Commit: 2238ccf50211bd4b9606979f9cce8560dace1bf3
Parents: 74edde6
Author: Abhishek Dasgupta <a1...@linux.vnet.ibm.com>
Authored: Thu Jul 7 10:52:15 2016 -0700
Committer: Anand Mazumdar <an...@apache.org>
Committed: Thu Jul 7 11:05:43 2016 -0700
----------------------------------------------------------------------
include/mesos/master/master.proto | 4 ++-
include/mesos/v1/master/master.proto | 4 ++-
src/master/http.cpp | 52 +++++++++++++++++++++++++++++--
src/master/master.hpp | 5 +++
4 files changed, 61 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/2238ccf5/include/mesos/master/master.proto
----------------------------------------------------------------------
diff --git a/include/mesos/master/master.proto b/include/mesos/master/master.proto
index 236a286..d82b245 100644
--- a/include/mesos/master/master.proto
+++ b/include/mesos/master/master.proto
@@ -108,6 +108,7 @@ message Call {
required DurationInfo duration = 2;
}
+ // Provides the file listing for a directory.
message ListFiles {
required string path = 1;
}
@@ -261,8 +262,9 @@ message Response {
required uint32 level = 1;
}
+ // Contains the file listing(similar to `ls -l`) for a directory.
message ListFiles {
- repeated string files = 1;
+ repeated FileInfo file_infos = 1;
}
message GetFileContents {
http://git-wip-us.apache.org/repos/asf/mesos/blob/2238ccf5/include/mesos/v1/master/master.proto
----------------------------------------------------------------------
diff --git a/include/mesos/v1/master/master.proto b/include/mesos/v1/master/master.proto
index 55eb2d8..711a664 100644
--- a/include/mesos/v1/master/master.proto
+++ b/include/mesos/v1/master/master.proto
@@ -108,6 +108,7 @@ message Call {
required DurationInfo duration = 2;
}
+ // Provides the file listing for a directory.
message ListFiles {
required string path = 1;
}
@@ -262,8 +263,9 @@ message Response {
required uint32 level = 1;
}
+ // Contains the file listing(similar to `ls -l`) for a directory.
message ListFiles {
- repeated string files = 1;
+ repeated FileInfo file_infos = 1;
}
message GetFileContents {
http://git-wip-us.apache.org/repos/asf/mesos/blob/2238ccf5/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index bff1fd5..8b7e917 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -517,7 +517,7 @@ Future<Response> Master::Http::api(
return setLoggingLevel(call, principal, acceptType);
case mesos::master::Call::LIST_FILES:
- return NotImplemented();
+ return listFiles(call, principal, acceptType);
case mesos::master::Call::READ_FILE:
return NotImplemented();
@@ -3237,6 +3237,54 @@ Future<Response> Master::Http::roles(
}
+Future<Response> Master::Http::listFiles(
+ const mesos::master::Call& call,
+ const Option<string>& principal,
+ ContentType contentType) const
+{
+ CHECK_EQ(mesos::master::Call::LIST_FILES, call.type());
+
+ const string& path = call.list_files().path();
+
+ return master->files->browse(path, principal)
+ .then([contentType](const Try<list<FileInfo>, FilesError>& result)
+ -> Future<Response> {
+ if (result.isError()) {
+ const FilesError& error = result.error();
+
+ switch (error.type) {
+ case FilesError::Type::INVALID:
+ return BadRequest(error.message);
+
+ case FilesError::Type::UNAUTHORIZED:
+ return Forbidden(error.message);
+
+ case FilesError::Type::NOT_FOUND:
+ return NotFound(error.message);
+
+ case FilesError::Type::UNKNOWN:
+ return InternalServerError(error.message);
+ }
+
+ UNREACHABLE();
+ }
+
+ mesos::master::Response response;
+ response.set_type(mesos::master::Response::LIST_FILES);
+
+ mesos::master::Response::ListFiles* listFiles =
+ response.mutable_list_files();
+
+ foreach (const FileInfo& fileInfo, result.get()) {
+ listFiles->add_file_infos()->CopyFrom(fileInfo);
+ }
+
+ return OK(serialize(contentType, evolve(response)),
+ stringify(contentType));
+ });
+}
+
+
// This duplicates the functionality offered by `roles()`. This was necessary
// as the JSON object returned by `roles()` was not specified in a formal way
// i.e. via a corresponding protobuf object and would have been very hard to
@@ -4229,7 +4277,7 @@ Future<Response> Master::Http::maintenanceStatus(
return _getMaintenanceStatus()
.then([request](const mesos::maintenance::ClusterStatus& status)
- -> Response {
+ -> Response {
return OK(JSON::protobuf(status), request.url.query.get("jsonp"));
});
}
http://git-wip-us.apache.org/repos/asf/mesos/blob/2238ccf5/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 60efd22..845f2f6 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -1425,6 +1425,11 @@ private:
const Option<std::string>& principal,
ContentType contentType) const;
+ process::Future<process::http::Response> listFiles(
+ const mesos::master::Call& call,
+ const Option<std::string>& principal,
+ ContentType contentType) const;
+
process::Future<process::http::Response> getLeadingMaster(
const mesos::master::Call& call,
const Option<std::string>& principal,