You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ji...@apache.org on 2018/08/14 21:00:11 UTC
[mesos] 02/03: Used state::checkpoint instead in CNI isolator.
This is an automated email from the ASF dual-hosted git repository.
jieyu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 64400867a984794320cd38e43dc694a863128f9e
Author: Jie Yu <yu...@gmail.com>
AuthorDate: Mon Aug 13 15:53:33 2018 -0700
Used state::checkpoint instead in CNI isolator.
This is to ensure all or nothing semantics. We don't want to deal with a
particially written file in case agent crashes.
Review: https://reviews.apache.org/r/68334
---
.../containerizer/mesos/isolators/network/cni/cni.cpp | 19 ++++++++++++-------
1 file changed, 12 insertions(+), 7 deletions(-)
diff --git a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
index cbbf029..a743e65 100644
--- a/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
+++ b/src/slave/containerizer/mesos/isolators/network/cni/cni.cpp
@@ -44,6 +44,8 @@
#include "linux/fs.hpp"
#include "linux/ns.hpp"
+#include "slave/state.hpp"
+
namespace io = process::io;
namespace paths = mesos::internal::slave::cni::paths;
namespace spec = mesos::internal::slave::cni::spec;
@@ -1283,13 +1285,14 @@ Future<Nothing> NetworkCniIsolatorProcess::attach(
containerId,
networkName);
- Try<Nothing> write =
- os::write(networkConfigPath, stringify(networkConfigJSON.get()));
+ Try<Nothing> checkpoint = slave::state::checkpoint(
+ networkConfigPath,
+ stringify(networkConfigJSON.get()));
- if (write.isError()) {
+ if (checkpoint.isError()) {
return Failure(
"Failed to checkpoint the CNI network configuration '" +
- stringify(networkConfigJSON.get()) + "': " + write.error());
+ stringify(networkConfigJSON.get()) + "': " + checkpoint.error());
}
VLOG(1) << "Invoking CNI plugin '" << plugin.get()
@@ -1404,11 +1407,13 @@ Future<Nothing> NetworkCniIsolatorProcess::_attach(
networkName,
containerNetwork.ifName);
- Try<Nothing> write = os::write(networkInfoPath, output.get());
- if (write.isError()) {
+ Try<Nothing> checkpoint =
+ slave::state::checkpoint(networkInfoPath, output.get());
+
+ if (checkpoint.isError()) {
return Failure(
"Failed to checkpoint the output of CNI plugin '" +
- output.get() + "': " + write.error());
+ output.get() + "': " + checkpoint.error());
}
containerNetwork.cniNetworkInfo = parse.get();