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 2017/12/01 00:06:01 UTC

[07/10] mesos git commit: Windows: Added `os::get_job_info` to stout.

Windows: Added `os::get_job_info` to stout.

This returns a `JOBOBJECT_BASIC_ACCOUNTING_INFORMATION`, which can be
inspected for basic CPU / process accounting information for a group of
processes within a job object.

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


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

Branch: refs/heads/master
Commit: 7d1c58041d0f619306af13cb3ee4645b14355d15
Parents: 2aad4d8
Author: Andrew Schwartzmeyer <an...@schwartzmeyer.com>
Authored: Fri Oct 13 11:39:20 2017 -0700
Committer: Andrew Schwartzmeyer <an...@schwartzmeyer.com>
Committed: Thu Nov 30 15:54:53 2017 -0800

----------------------------------------------------------------------
 3rdparty/stout/include/stout/windows/os.hpp | 41 ++++++++++++++++++++++--
 1 file changed, 39 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/7d1c5804/3rdparty/stout/include/stout/windows/os.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/stout/include/stout/windows/os.hpp b/3rdparty/stout/include/stout/windows/os.hpp
index a22e435..57481be 100644
--- a/3rdparty/stout/include/stout/windows/os.hpp
+++ b/3rdparty/stout/include/stout/windows/os.hpp
@@ -211,10 +211,10 @@ inline void setenv(
 {
   // Do not set the variable if already set and `overwrite` was not specified.
   //
-  // Per MSDN[1], `GetEnvironmentVariable` returns 0 on error and sets the
+  // Per MSDN, `GetEnvironmentVariable` returns 0 on error and sets the
   // error code to `ERROR_ENVVAR_NOT_FOUND` if the variable was not found.
   //
-  // [1] https://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v=vs.85).aspx
+  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms683188(v=vs.85).aspx // NOLINT(whitespace/line_length)
   if (!overwrite &&
       ::GetEnvironmentVariableW(wide_stringify(key).data(), nullptr, 0) != 0 &&
       ::GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
@@ -723,6 +723,43 @@ inline Try<SharedHandle> create_job(const std::wstring& name)
 }
 
 
+// `get_job_info` gets the job object information for the process group
+// represented by `pid`, assuming it is assigned to a job object. This function
+// will fail otherwise.
+//
+// https://msdn.microsoft.com/en-us/library/windows/desktop/ms684925(v=vs.85).aspx // NOLINT(whitespace/line_length)
+inline Try<JOBOBJECT_BASIC_ACCOUNTING_INFORMATION> get_job_info(pid_t pid)
+{
+  Try<std::wstring> name = os::name_job(pid);
+  if (name.isError()) {
+    return Error(name.error());
+  }
+
+  Try<SharedHandle> job_handle = os::open_job(
+      JOB_OBJECT_QUERY,
+      false,
+      name.get());
+  if (job_handle.isError()) {
+    return Error(job_handle.error());
+  }
+
+  JOBOBJECT_BASIC_ACCOUNTING_INFORMATION info = {};
+
+  BOOL result = ::QueryInformationJobObject(
+    job_handle.get().get_handle(),
+    JobObjectBasicAccountingInformation,
+    &info,
+    sizeof(info),
+    nullptr);
+  if (result == FALSE) {
+    return WindowsError(
+      "os::get_job_info: call to `QueryInformationJobObject` failed");
+  }
+
+  return info;
+}
+
+
 // `set_job_cpu_limit` sets a CPU limit for the process represented by
 // `pid`, assuming it is assigned to a job object. This function will fail
 // otherwise. This limit is a hard cap enforced by the OS.