Printed fatal messages in lambdas where errors happen in SLRP. Review: https://reviews.apache.org/r/64587/
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/cac8fdf0 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/cac8fdf0 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/cac8fdf0 Branch: refs/heads/master Commit: cac8fdf0159bd112a1b8a6cc28e90613ab7950d4 Parents: 99db5fa Author: Chun-Hung Hsiao <[email protected]> Authored: Wed Dec 13 20:49:38 2017 -0800 Committer: Jie Yu <[email protected]> Committed: Wed Dec 13 20:49:38 2017 -0800 ---------------------------------------------------------------------- src/resource_provider/storage/provider.cpp | 87 +++++++++++++++---------- 1 file changed, 51 insertions(+), 36 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/cac8fdf0/src/resource_provider/storage/provider.cpp ---------------------------------------------------------------------- diff --git a/src/resource_provider/storage/provider.cpp b/src/resource_provider/storage/provider.cpp index e239317..f00fe58 100644 --- a/src/resource_provider/storage/provider.cpp +++ b/src/resource_provider/storage/provider.cpp @@ -327,7 +327,7 @@ private: }; void initialize() override; - void fatal(const string& messsage, const string& failure); + void fatal(); Future<Nothing> recover(); Future<Nothing> recoverServices(); @@ -518,7 +518,8 @@ void StorageLocalResourceProviderProcess::initialize() Try<string> _bootId = os::bootId(); if (_bootId.isError()) { - return fatal("Failed to get boot ID", _bootId.error()); + LOG(ERROR) << "Failed to get boot ID: " << _bootId.error(); + return fatal(); } bootId = _bootId.get(); @@ -553,25 +554,24 @@ void StorageLocalResourceProviderProcess::initialize() defaultProfile.capability.mutable_access_mode() ->set_mode(csi::VolumeCapability::AccessMode::SINGLE_NODE_WRITER); - const string message = - "Failed to recover resource provider with type '" + info.type() + - "' and name '" + info.name() + "'"; + auto die = [=](const string& message) { + LOG(ERROR) + << "Failed to recover resource provider with type '" << info.type() + << "' and name '" << info.name() << "': " << message; + fatal(); + }; // NOTE: Most resource provider events rely on the plugins being // prepared. To avoid race conditions, we connect to the agent after // preparing the plugins. recover() - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded(defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); } -void StorageLocalResourceProviderProcess::fatal( - const string& message, - const string& failure) +void StorageLocalResourceProviderProcess::fatal() { - LOG(ERROR) << message << ": " << failure; - // Force the disconnection early. driver.reset(); @@ -937,14 +937,16 @@ Future<Nothing> StorageLocalResourceProviderProcess::recoverStatusUpdates() ? operation.framework_id() : Option<FrameworkID>::none(), slaveId); - const string message = - "Failed to update status of offer operation with UUID " + - stringify(uuid); + auto die = [=](const string& message) { + LOG(ERROR) + << "Failed to update status of offer operation with UUID " << uuid + << ": " << message; + fatal(); + }; statusUpdateManager.update(std::move(update)) - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded( - defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); } } @@ -1093,14 +1095,18 @@ void StorageLocalResourceProviderProcess::subscribed( info.id()); } - const string message = - "Failed to reconcile resource provider " + stringify(info.id()); + auto die = [=](const string& message) { + LOG(ERROR) + << "Failed to reconcile resource provider " << info.id() << ": " + << message; + fatal(); + }; // Reconcile resources after obtaining the resource provider ID. // TODO(chhsiao): Do the reconciliation early. reconcileResourceProviderState() - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded(defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); } @@ -1367,13 +1373,16 @@ void StorageLocalResourceProviderProcess::reconcileOfferOperations( None(), slaveId); - const string message = - "Failed to update status of offer operation with UUID " + - stringify(uuid.get()); + auto die = [=](const string& message) { + LOG(ERROR) + << "Failed to update status of offer operation with UUID " << uuid.get() + << ": " << message; + fatal(); + }; statusUpdateManager.update(std::move(update)) - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded(defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); } } @@ -1570,13 +1579,16 @@ Future<csi::Client> StorageLocalResourceProviderProcess::getService( "': " + checkpoint.error()); } - const string message = - "Container daemon for '" + stringify(containerId) + "' failed"; + auto die = [=](const string& message) { + LOG(ERROR) + << "Container daemon for '" << containerId << "' failed: " << message; + fatal(); + }; daemons[containerId] = daemon.get(); daemon.get()->wait() - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded(defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); return services.at(containerId)->future(); } @@ -2652,13 +2664,16 @@ Try<Nothing> StorageLocalResourceProviderProcess::updateOfferOperationStatus( ? operation.framework_id() : Option<FrameworkID>::none(), slaveId); - const string message = - "Failed to update status of offer operation with UUID " + - stringify(operationUuid); + auto die = [=](const string& message) { + LOG(ERROR) + << "Failed to update status of offer operation with UUID " + << operationUuid << ": " << message; + fatal(); + }; statusUpdateManager.update(std::move(update)) - .onFailed(defer(self(), &Self::fatal, message, lambda::_1)) - .onDiscarded(defer(self(), &Self::fatal, message, "future discarded")); + .onFailed(defer(self(), std::bind(die, lambda::_1))) + .onDiscarded(defer(self(), std::bind(die, "future discarded"))); return error.isNone() ? Nothing() : Try<Nothing>::error(error.get()); }
