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 <bmah...@twitter.com> Authored: Thu Aug 22 10:52:50 2013 -0700 Committer: Benjamin Mahler <bmah...@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>