You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by bm...@apache.org on 2013/08/24 00:12:27 UTC

[1/2] git commit: Added a re-registration time for slaves.

Updated Branches:
  refs/heads/master 82fa5bff4 -> 58c400745


Added a re-registration time for slaves.

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


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

Branch: refs/heads/master
Commit: 58c4007450eb3541de0619e929dca386f81c60c3
Parents: 450e3aa
Author: Benjamin Mahler <bm...@twitter.com>
Authored: Thu Aug 22 10:52:50 2013 -0700
Committer: Benjamin Mahler <bm...@twitter.com>
Committed: Fri Aug 23 14:40:30 2013 -0700

----------------------------------------------------------------------
 src/master/http.cpp                 |  5 +++++
 src/master/master.cpp               |  3 +++
 src/master/master.hpp               |  7 +++++++
 src/webui/master/static/slaves.html | 16 ++++++++++++++++
 4 files changed, 31 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/58c40074/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 1ac84a9..f2a535a 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -208,6 +208,11 @@ JSON::Object model(const Slave& slave)
   object.values["pid"] = string(slave.pid);
   object.values["hostname"] = slave.info.hostname();
   object.values["registered_time"] = slave.registeredTime.secs();
+
+  if (slave.reregisteredTime.isSome()) {
+    object.values["reregistered_time"] = slave.reregisteredTime.get().secs();
+  }
+
   object.values["resources"] = model(slave.info.resources());
   object.values["attributes"] = model(slave.info.attributes());
   return object;

http://git-wip-us.apache.org/repos/asf/mesos/blob/58c40074/src/master/master.cpp
----------------------------------------------------------------------
diff --git a/src/master/master.cpp b/src/master/master.cpp
index d53b8bb..69479e4 100644
--- a/src/master/master.cpp
+++ b/src/master/master.cpp
@@ -1075,6 +1075,8 @@ void Master::reregisterSlave(const SlaveID& slaveId,
   } else {
     Slave* slave = getSlave(slaveId);
     if (slave != NULL) {
+      slave->reregisteredTime = Clock::now();
+
       // NOTE: This handles the case where a slave tries to
       // re-register with an existing master (e.g. because of a
       // spurious Zookeeper session expiration or after the slave
@@ -1119,6 +1121,7 @@ void Master::reregisterSlave(const SlaveID& slaveId,
       // NOTE: This handles the case when the slave tries to
       // re-register with a failed over master.
       slave = new Slave(slaveInfo, slaveId, from, Clock::now());
+      slave->reregisteredTime = Clock::now();
 
       LOG(INFO) << "Attempting to re-register slave " << slave->id << " at "
                 << slave->pid << " (" << slave->info.hostname() << ")";

http://git-wip-us.apache.org/repos/asf/mesos/blob/58c40074/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index 30752d2..6bd8998 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -247,6 +247,12 @@ private:
   hashmap<FrameworkID, Framework*> frameworks;
 
   hashmap<SlaveID, Slave*> slaves;
+
+  // Ideally we could use SlaveIDs to track deactivated slaves.
+  // However, we would not know when to remove the SlaveID from this
+  // set. After deactivation, the same slave machine can register with
+  // the same. Using PIDs allows us to remove the deactivated
+  // slave PID once any slave registers with the same PID!
   hashset<UPID> deactivatedSlaves;
 
   hashmap<OfferID, Offer*> offers;
@@ -383,6 +389,7 @@ struct Slave
   UPID pid;
 
   Time registeredTime;
+  Option<Time> reregisteredTime;
   Time lastHeartbeat;
 
   // We mark a slave 'disconnected' when it has checkpointing

http://git-wip-us.apache.org/repos/asf/mesos/blob/58c40074/src/webui/master/static/slaves.html
----------------------------------------------------------------------
diff --git a/src/webui/master/static/slaves.html b/src/webui/master/static/slaves.html
index 15877b7..99b1c35 100644
--- a/src/webui/master/static/slaves.html
+++ b/src/webui/master/static/slaves.html
@@ -36,6 +36,10 @@
           ng-click="selectColumn('slaves', 'registered_time')">
         Registered
       </th>
+      <th ng-class="columnClass('slaves', 'reregistered_time')"
+          ng-click="selectColumn('slaves', 'reregistered_time')">
+        Re-Registered
+      </th>
     </tr>
   </thead>
   <tr ng-repeat="slave in _.values(slaves) | orderBy:tables['slaves'].selected_column:tables['slaves'].reverse">
@@ -66,5 +70,17 @@
         <i class="icon-file"></i>
       </button>
     </td>
+    <td>
+      <abbr title="{{slave.reregistered_time * 1000 | isoDate}}">
+        {{slave.reregistered_time * 1000 | relativeDate}}</abbr>
+      <button class="btn btn-mini btn-toggle"
+          clipboard
+          data-clipboard-text="{{slave.reregistered_time * 1000 | isoDate}}"
+          tooltip="Copy timestamp"
+          tooltip-placement="right"
+          tooltip-trigger="clipboardhover">
+        <i class="icon-file"></i>
+      </button>
+    </td>
   </tr>
 </table>


[2/2] git commit: Removed internal logging from state::checkpoint().

Posted by bm...@apache.org.
Removed internal logging from state::checkpoint().

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


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

Branch: refs/heads/master
Commit: 450e3aa199987f03d72c66526e6477d8768d8b1c
Parents: 82fa5bf
Author: Benjamin Mahler <bm...@twitter.com>
Authored: Tue Aug 20 19:56:49 2013 -0700
Committer: Benjamin Mahler <bm...@twitter.com>
Committed: Fri Aug 23 14:40:30 2013 -0700

----------------------------------------------------------------------
 src/launcher/launcher.cpp           | 13 +++++++++++--
 src/slave/slave.cpp                 | 10 ++++++++++
 src/slave/state.cpp                 |  8 --------
 src/slave/status_update_manager.hpp |  2 +-
 4 files changed, 22 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/450e3aa1/src/launcher/launcher.cpp
----------------------------------------------------------------------
diff --git a/src/launcher/launcher.cpp b/src/launcher/launcher.cpp
index 8d4e53d..004d90e 100644
--- a/src/launcher/launcher.cpp
+++ b/src/launcher/launcher.cpp
@@ -105,8 +105,17 @@ int ExecutorLauncher::setup()
         frameworkId,
         executorId,
         uuid);
-    cout << "Checkpointing forked pid " << getpid() << endl;
-    slave::state::checkpoint(path, stringify(getpid()));
+    cout << "Checkpointing executor's forked pid " << getpid()
+         << " to '" << path <<  "'" << endl;
+
+    Try<Nothing> checkpoint =
+      slave::state::checkpoint(path, stringify(getpid()));
+
+    if (checkpoint.isError()) {
+      cerr << "Failed to checkpoint executor's forked pid to '"
+           << path << "': " << checkpoint.error();
+      return -1;
+    }
   }
 
   const string& cwd = os::getcwd();

http://git-wip-us.apache.org/repos/asf/mesos/blob/450e3aa1/src/slave/slave.cpp
----------------------------------------------------------------------
diff --git a/src/slave/slave.cpp b/src/slave/slave.cpp
index 563a099..dd599a7 100644
--- a/src/slave/slave.cpp
+++ b/src/slave/slave.cpp
@@ -619,6 +619,7 @@ void Slave::registered(const SlaveID& slaveId)
         // Checkpoint slave info.
         const string& path = paths::getSlaveInfoPath(metaDir, slaveId);
 
+        LOG(INFO) << "Checkpointing SlaveInfo to '" << path << "'";
         CHECK_SOME(state::checkpoint(path, info));
       }
       break;
@@ -1336,6 +1337,8 @@ void Slave::updateFramework(const FrameworkID& frameworkId, const string& pid)
         const string& path = paths::getFrameworkPidPath(
             metaDir, info.id(), frameworkId);
 
+        LOG(INFO) << "Checkpointing framework pid '"
+                  << framework->pid << "' to '" << path << "'";
         CHECK_SOME(state::checkpoint(path, framework->pid));
       }
       break;
@@ -1519,6 +1522,8 @@ void Slave::registerExecutor(
             executor->id,
             executor->uuid);
 
+        LOG(INFO) << "Checkpointing executor pid '"
+                  << executor->pid << "' to '" << path << "'";
         CHECK_SOME(state::checkpoint(path, executor->pid));
       }
 
@@ -2807,12 +2812,15 @@ Framework::Framework(
     string path = paths::getFrameworkInfoPath(
         slave->metaDir, slave->info.id(), id);
 
+    LOG(INFO) << "Checkpointing FrameworkInfo to '" << path << "'";
     CHECK_SOME(state::checkpoint(path, info));
 
     // Checkpoint the framework pid.
     path = paths::getFrameworkPidPath(
         slave->metaDir, slave->info.id(), id);
 
+    LOG(INFO) << "Checkpointing framework pid '"
+              << pid << "' to '" << path << "'";
     CHECK_SOME(state::checkpoint(path, pid));
   }
 }
@@ -3051,6 +3059,7 @@ Executor::Executor(
     const string& path = paths::getExecutorInfoPath(
         slave->metaDir, slave->info.id(), frameworkId, id);
 
+    LOG(INFO) << "Checkpointing ExecutorInfo to '" << path << "'";
     CHECK_SOME(state::checkpoint(path, info));
 
     // Create the meta executor directory.
@@ -3138,6 +3147,7 @@ void Executor::checkpointTask(const TaskInfo& task)
     const string& path = paths::getTaskInfoPath(
         slave->metaDir, slave->info.id(), frameworkId, id, uuid, t.task_id());
 
+    LOG(INFO) << "Checkpointing TaskInfo to '" << path << "'";
     CHECK_SOME(state::checkpoint(path, t));
   }
 }

http://git-wip-us.apache.org/repos/asf/mesos/blob/450e3aa1/src/slave/state.cpp
----------------------------------------------------------------------
diff --git a/src/slave/state.cpp b/src/slave/state.cpp
index aab8d0b..b66aaa3 100644
--- a/src/slave/state.cpp
+++ b/src/slave/state.cpp
@@ -548,16 +548,11 @@ Try<TaskState> TaskState::recover(
 
 
 // Helpers to checkpoint string/protobuf to disk, with necessary error checking.
-// NOTE: We don't use 'glog' to log these messages because they could be
-// called from within a forked executor process, leading to potential deadlock.
 
 Try<Nothing> checkpoint(
     const string& path,
     const google::protobuf::Message& message)
 {
-  std::cout << "Checkpointing " << message.GetDescriptor()->name()
-            << " to '" << path << "'" << std::endl;
-
   // Create the base directory.
   Try<Nothing> result = os::mkdir(os::dirname(path).get());
   if (result.isError()) {
@@ -578,9 +573,6 @@ Try<Nothing> checkpoint(
 
 Try<Nothing> checkpoint(const std::string& path, const std::string& message)
 {
-  std::cout << "Checkpointing '" << message << "' to '" << path << "'"
-            << std::endl;
-
   // Create the base directory.
   Try<Nothing> result = os::mkdir(os::dirname(path).get());
   if (result.isError()) {

http://git-wip-us.apache.org/repos/asf/mesos/blob/450e3aa1/src/slave/status_update_manager.hpp
----------------------------------------------------------------------
diff --git a/src/slave/status_update_manager.hpp b/src/slave/status_update_manager.hpp
index a032646..1f55f86 100644
--- a/src/slave/status_update_manager.hpp
+++ b/src/slave/status_update_manager.hpp
@@ -177,7 +177,7 @@ struct StatusUpdateStream
           O_CREAT | O_WRONLY | O_APPEND | O_SYNC,
           S_IRUSR | S_IWUSR | S_IRGRP | S_IRWXO);
 
-      if(result.isError()) {
+      if (result.isError()) {
         error = "Failed to open '" + path.get() + "' for status updates";
         return;
       }