Repository: mesos Updated Branches: refs/heads/master 18d3957f2 -> 63ed98634
Added kill() to freezerTimedOut() in cgroups.cpp. This is a short-term fix for MESOS-1758. Review: https://reviews.apache.org/r/25457 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/63ed9863 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/63ed9863 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/63ed9863 Branch: refs/heads/master Commit: 63ed98634444f927beb2cf074aacc838fb601329 Parents: 18d3957 Author: Vinod Kone <[email protected]> Authored: Mon Sep 8 15:40:54 2014 -0700 Committer: Vinod Kone <[email protected]> Committed: Mon Sep 8 15:41:59 2014 -0700 ---------------------------------------------------------------------- src/linux/cgroups.cpp | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/63ed9863/src/linux/cgroups.cpp ---------------------------------------------------------------------- diff --git a/src/linux/cgroups.cpp b/src/linux/cgroups.cpp index c6464ab..5093b4c 100644 --- a/src/linux/cgroups.cpp +++ b/src/linux/cgroups.cpp @@ -1372,7 +1372,7 @@ public: } if (state.get() == "FROZEN") { - LOG(INFO) << "Successfullly froze cgroup " + LOG(INFO) << "Successfully froze cgroup " << path::join(hierarchy, cgroup) << " after " << (Clock::now() - start); promise.set(Nothing()); @@ -1479,18 +1479,21 @@ protected: private: static Future<Nothing> freezeTimedout( Future<Nothing> future, - const PID<TasksKiller>& pid, - const string& hierarchy, - const string& cgroup) + const PID<TasksKiller>& pid) { // Cancel the freeze operation. // TODO(jieyu): Wait until 'future' is in DISCARDED state before // starting retry. future.discard(); - // Thaw the cgroup before trying to freeze again to allow any + // We attempt to kill the processes before we thaw again, + // due to a bug in the kernel. See MESOS-1758 for more details. + // We thaw the cgroup before trying to freeze again to allow any // pending signals to be delivered. See MESOS-1689 for details. - return cgroups::freezer::thaw(hierarchy, cgroup) + // This is a short term hack until we have PID namespace support. + return Future<bool>(true) + .then(defer(pid, &Self::kill)) + .then(defer(pid, &Self::thaw)) .then(defer(pid, &Self::freeze)); } @@ -1510,12 +1513,7 @@ private: // away from freezer once we have pid namespace support. return cgroups::freezer::freeze(hierarchy, cgroup).after( FREEZE_RETRY_INTERVAL, - lambda::bind( - &freezeTimedout, - lambda::_1, - self(), - hierarchy, - cgroup)); + lambda::bind(&freezeTimedout, lambda::_1, self())); } Future<Nothing> kill()
