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/04/30 03:31:46 UTC
svn commit: r1477443 - in /incubator/mesos/trunk/src: master/http.cpp
master/master.cpp master/master.hpp webui/master/static/controllers.js
webui/master/static/home.html
Author: bmahler
Date: Tue Apr 30 01:31:45 2013
New Revision: 1477443
URL: http://svn.apache.org/r1477443
Log:
Removed the hostname:port slave map from the Master.
Review: https://reviews.apache.org/r/10534
Modified:
incubator/mesos/trunk/src/master/http.cpp
incubator/mesos/trunk/src/master/master.cpp
incubator/mesos/trunk/src/master/master.hpp
incubator/mesos/trunk/src/webui/master/static/controllers.js
incubator/mesos/trunk/src/webui/master/static/home.html
Modified: incubator/mesos/trunk/src/master/http.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/master/http.cpp?rev=1477443&r1=1477442&r2=1477443&view=diff
==============================================================================
--- incubator/mesos/trunk/src/master/http.cpp (original)
+++ incubator/mesos/trunk/src/master/http.cpp Tue Apr 30 01:31:45 2013
@@ -265,9 +265,8 @@ Future<Response> stats(
object.values["elected"] = master.elected; // Note: using int not bool.
object.values["total_schedulers"] = master.frameworks.size();
object.values["active_schedulers"] = master.getActiveFrameworks().size();
- object.values["activated_slaves"] = master.slavePIDs.size();
- object.values["deactivated_slaves"] = master.deactivatedSlavePIDs.size();
- object.values["connected_slaves"] = master.slaves.size();
+ object.values["activated_slaves"] = master.slaves.size();
+ object.values["deactivated_slaves"] = master.deactivatedSlaves.size();
object.values["staged_tasks"] = master.stats.tasks[TASK_STAGING];
object.values["started_tasks"] = master.stats.tasks[TASK_STARTING];
object.values["finished_tasks"] = master.stats.tasks[TASK_FINISHED];
@@ -318,9 +317,8 @@ Future<Response> state(
object.values["start_time"] = master.startTime;
object.values["id"] = master.info.id();
object.values["pid"] = string(master.self());
- object.values["activated_slaves"] = master.slavePIDs.size();
- object.values["deactivated_slaves"] = master.deactivatedSlavePIDs.size();
- object.values["connected_slaves"] = master.slaves.size();
+ object.values["activated_slaves"] = master.slaves.size();
+ object.values["deactivated_slaves"] = master.deactivatedSlaves.size();
object.values["staged_tasks"] = master.stats.tasks[TASK_STAGING];
object.values["started_tasks"] = master.stats.tasks[TASK_STARTING];
object.values["finished_tasks"] = master.stats.tasks[TASK_FINISHED];
Modified: incubator/mesos/trunk/src/master/master.cpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/master/master.cpp?rev=1477443&r1=1477442&r2=1477443&view=diff
==============================================================================
--- incubator/mesos/trunk/src/master/master.cpp (original)
+++ incubator/mesos/trunk/src/master/master.cpp Tue Apr 30 01:31:45 2013
@@ -172,8 +172,7 @@ protected:
void deactivate()
{
- dispatch(
- master, &Master::deactivateSlave, slaveInfo.hostname(), slave.port);
+ dispatch(master, &Master::deactivateSlave, slaveId);
}
private:
@@ -460,18 +459,18 @@ void Master::exited(const UPID& pid)
removeSlave(slave);
return;
} else {
- // If a slave is checkpointing, remove frameworks from this
- // slave that have disabled checkpointing.
+ // If a slave is checkpointing, remove all non-checkpointing
+ // frameworks from the slave.
hashset<FrameworkID> ids;
foreachvalue (Task* task, utils::copy(slave->tasks)) {
if (!ids.contains(task->framework_id())) {
ids.insert(task->framework_id());
Framework* framework = getFramework(task->framework_id());
if (framework != NULL && !framework->info.checkpoint()) {
- LOG(INFO) << "Removing framework " << task->framework_id()
+ LOG(INFO) << "Removing non-checkpointing framework "
+ << task->framework_id()
<< " from disconnected slave " << slave->id
- << "(" << slave->info.hostname() << ") "
- << "because it is not checkpointing!";
+ << "(" << slave->info.hostname() << ")";
removeFramework(slave, framework);
}
@@ -915,13 +914,13 @@ void Master::reregisterSlave(const Slave
if (slaveId == "") {
LOG(ERROR) << "Slave " << from << " re-registered without an id!";
reply(ShutdownMessage());
- } else if (deactivatedSlavePIDs.contains(slaveInfo.hostname(), from.port)) {
+ } else if (deactivatedSlaves.contains(from)) {
// We disallow deactivated slaves from re-registering. This is
// to ensure that when a master deactivates a slave that was
// partitioned, we don't allow the slave to re-register, as we've
// already informed frameworks that the tasks were lost.
- LOG(ERROR) << "Slave " << from
- << " attempted to re-register after deactivation";
+ LOG(ERROR) << "Slave " << slaveId << " at " << from
+ << "attempted to re-register after deactivation";
reply(ShutdownMessage());
} else {
Slave* slave = getSlave(slaveId);
@@ -1186,24 +1185,23 @@ void Master::exitedExecutor(const SlaveI
}
-void Master::deactivateSlave(const string& hostname, uint16_t port)
+void Master::deactivateSlave(const SlaveID& slaveId)
{
- if (slavePIDs.contains(hostname, port)) {
- // Look for a connected slave and remove it.
- foreachvalue (Slave* slave, slaves) {
- if (slave->info.hostname() == hostname && slave->pid.port == port) {
- LOG(WARNING) << "Removing slave " << slave->id << " at "
- << hostname << ":" << port
- << " because it has been deactivated";
- send(slave->pid, ShutdownMessage());
- removeSlave(slave);
- break;
- }
- }
-
- LOG(INFO) << "Master now considering a slave at "
- << hostname << ":" << port << " as inactive";
+ if (!slaves.contains(slaveId)) {
+ // Possible when the SlaveObserver dispatched to deactivate a slave,
+ // but exited() was already called for this slave.
+ LOG(WARNING) << "Unable to deactivate unknown slave " << slaveId;
+ return;
}
+
+ Slave* slave = slaves[slaveId];
+ CHECK_NOTNULL(slave);
+
+ LOG(WARNING) << "Removing slave " << slave->id << " at " << slave->pid
+ << " because it has been deactivated";
+
+ send(slave->pid, ShutdownMessage());
+ removeSlave(slave);
}
@@ -1848,8 +1846,7 @@ void Master::addSlave(Slave* slave, bool
<< " at " << slave->info.hostname()
<< " with " << slave->info.resources();
- slavePIDs.put(slave->info.hostname(), slave->pid.port);
- deactivatedSlavePIDs.remove(slave->info.hostname(), slave->pid.port);
+ deactivatedSlaves.erase(slave->pid);
slaves[slave->id] = slave;
link(slave->pid);
@@ -2024,9 +2021,8 @@ void Master::removeSlave(Slave* slave)
// TODO(benh): unlink(slave->pid);
- // Delete it.
- slavePIDs.remove(slave->info.hostname(), slave->pid.port);
- deactivatedSlavePIDs.put(slave->info.hostname(), slave->pid.port);
+ // Mark the slave as deactivated.
+ deactivatedSlaves.insert(slave->pid);
slaves.erase(slave->id);
delete slave;
}
Modified: incubator/mesos/trunk/src/master/master.hpp
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/master/master.hpp?rev=1477443&r1=1477442&r2=1477443&view=diff
==============================================================================
--- incubator/mesos/trunk/src/master/master.hpp (original)
+++ incubator/mesos/trunk/src/master/master.hpp Tue Apr 30 01:31:45 2013
@@ -115,7 +115,7 @@ public:
const FrameworkID& frameworkId,
const ExecutorID& executorId,
int32_t status);
- void deactivateSlave(const std::string& hostname, uint16_t port);
+ void deactivateSlave(const SlaveID& slaveId);
void frameworkFailoverTimeout(const FrameworkID& frameworkId,
double reregisteredTime);
@@ -225,9 +225,9 @@ private:
MasterInfo info;
hashmap<FrameworkID, Framework*> frameworks;
+
hashmap<SlaveID, Slave*> slaves;
- multihashmap<std::string, uint16_t> slavePIDs;
- multihashmap<std::string, uint16_t> deactivatedSlavePIDs;
+ hashset<UPID> deactivatedSlaves;
hashmap<OfferID, Offer*> offers;
Modified: incubator/mesos/trunk/src/webui/master/static/controllers.js
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/webui/master/static/controllers.js?rev=1477443&r1=1477442&r2=1477443&view=diff
==============================================================================
--- incubator/mesos/trunk/src/webui/master/static/controllers.js (original)
+++ incubator/mesos/trunk/src/webui/master/static/controllers.js Tue Apr 30 01:31:45 2013
@@ -186,7 +186,7 @@ function update($scope, $defer, data) {
$scope.lost_tasks = $scope.state.lost_tasks;
$scope.activated_slaves = $scope.state.activated_slaves;
- $scope.connected_slaves = $scope.state.connected_slaves;
+ $scope.deactivated_slaves = $scope.state.deactivated_slaves;
_.each($scope.slaves, function(slave) {
$scope.total_cpus += slave.resources.cpus;
Modified: incubator/mesos/trunk/src/webui/master/static/home.html
URL: http://svn.apache.org/viewvc/incubator/mesos/trunk/src/webui/master/static/home.html?rev=1477443&r1=1477442&r2=1477443&view=diff
==============================================================================
--- incubator/mesos/trunk/src/webui/master/static/home.html (original)
+++ incubator/mesos/trunk/src/webui/master/static/home.html Tue Apr 30 01:31:45 2013
@@ -44,13 +44,13 @@
<table class="table table-condensed">
<tbody>
<tr>
- <th>Connected</th>
- <td>{{connected_slaves | number}}</td>
- </tr>
- <tr>
<th>Activated</th>
<td>{{activated_slaves | number}}</td>
</tr>
+ <tr>
+ <th>Deactivated</th>
+ <td>{{deactivated_slaves | number}}</td>
+ </tr>
</tbody>
</table>