Added backport of r52910 to 1.1.x.
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/b7f0bc19 Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/b7f0bc19 Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/b7f0bc19 Branch: refs/heads/1.1.x Commit: b7f0bc1943bb5cbe5830df987a9888d90bbcd18e Parents: de3a1b5 Author: Qian Zhang <zhq527...@gmail.com> Authored: Wed Nov 23 17:49:17 2016 +0800 Committer: Qian Zhang <zhq527...@gmail.com> Committed: Thu Nov 24 09:37:56 2016 +0800 ---------------------------------------------------------------------- src/Makefile.am | 1 + .../containerizer/mesos/provisioner/backend.cpp | 9 ++--- .../mesos/provisioner/constants.hpp | 34 ++++++++++++++++++ .../mesos/provisioner/docker/paths.cpp | 4 ++- src/slave/flags.cpp | 4 ++- .../containerizer/provisioner_appc_tests.cpp | 13 ++++--- .../containerizer/provisioner_backend_tests.cpp | 37 ++++++++++++-------- 7 files changed, 76 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/Makefile.am ---------------------------------------------------------------------- diff --git a/src/Makefile.am b/src/Makefile.am index 3bcc0f2..73d337d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -967,6 +967,7 @@ libmesos_no_3rdparty_la_SOURCES += \ slave/containerizer/mesos/isolators/volume/sandbox_path.hpp \ slave/containerizer/mesos/isolators/windows.hpp \ slave/containerizer/mesos/provisioner/backend.hpp \ + slave/containerizer/mesos/provisioner/constants.hpp \ slave/containerizer/mesos/provisioner/paths.hpp \ slave/containerizer/mesos/provisioner/provisioner.hpp \ slave/containerizer/mesos/provisioner/store.hpp \ http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/slave/containerizer/mesos/provisioner/backend.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/backend.cpp b/src/slave/containerizer/mesos/provisioner/backend.cpp index 9c258ed..157967f 100644 --- a/src/slave/containerizer/mesos/provisioner/backend.cpp +++ b/src/slave/containerizer/mesos/provisioner/backend.cpp @@ -23,6 +23,7 @@ #endif #include "slave/containerizer/mesos/provisioner/backend.hpp" +#include "slave/containerizer/mesos/provisioner/constants.hpp" #ifdef __linux__ #include "slave/containerizer/mesos/provisioner/backends/aufs.hpp" @@ -46,14 +47,14 @@ hashmap<string, Owned<Backend>> Backend::create(const Flags& flags) hashmap<string, Try<Owned<Backend>>(*)(const Flags&)> creators; #ifdef __linux__ - creators.put("bind", &BindBackend::create); + creators.put(BIND_BACKEND, &BindBackend::create); Try<bool> aufsSupported = fs::supported("aufs"); if (aufsSupported.isError()) { LOG(WARNING) << "Failed to check aufs availability: '" << aufsSupported.error(); } else if (aufsSupported.get()) { - creators.put("aufs", &AufsBackend::create); + creators.put(AUFS_BACKEND, &AufsBackend::create); } Try<bool> overlayfsSupported = fs::supported("overlayfs"); @@ -61,11 +62,11 @@ hashmap<string, Owned<Backend>> Backend::create(const Flags& flags) LOG(WARNING) << "Failed to check overlayfs availability: '" << overlayfsSupported.error(); } else if (overlayfsSupported.get()) { - creators.put("overlay", &OverlayBackend::create); + creators.put(OVERLAY_BACKEND, &OverlayBackend::create); } #endif // __linux__ - creators.put("copy", &CopyBackend::create); + creators.put(COPY_BACKEND, &CopyBackend::create); hashmap<string, Owned<Backend>> backends; http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/slave/containerizer/mesos/provisioner/constants.hpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/constants.hpp b/src/slave/containerizer/mesos/provisioner/constants.hpp new file mode 100644 index 0000000..ab488eb --- /dev/null +++ b/src/slave/containerizer/mesos/provisioner/constants.hpp @@ -0,0 +1,34 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef __MESOS_PROVISIONER_CONSTANTS_HPP__ +#define __MESOS_PROVISIONER_CONSTANTS_HPP__ + +namespace mesos { +namespace internal { +namespace slave { + +// Provisioner backends. +constexpr char AUFS_BACKEND[] = "aufs"; +constexpr char BIND_BACKEND[] = "bind"; +constexpr char COPY_BACKEND[] = "copy"; +constexpr char OVERLAY_BACKEND[] = "overlay"; + +} // namespace slave { +} // namespace internal { +} // namespace mesos { + +#endif // __MESOS_PROVISIONER_CONSTANTS_HPP__ http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/slave/containerizer/mesos/provisioner/docker/paths.cpp ---------------------------------------------------------------------- diff --git a/src/slave/containerizer/mesos/provisioner/docker/paths.cpp b/src/slave/containerizer/mesos/provisioner/docker/paths.cpp index dea3756..cd684b3 100644 --- a/src/slave/containerizer/mesos/provisioner/docker/paths.cpp +++ b/src/slave/containerizer/mesos/provisioner/docker/paths.cpp @@ -14,6 +14,8 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include "slave/containerizer/mesos/provisioner/constants.hpp" + #include "slave/containerizer/mesos/provisioner/docker/paths.hpp" #include <stout/path.hpp> @@ -58,7 +60,7 @@ string getImageLayerManifestPath(const string& storeDir, const string& layerId) string getImageLayerRootfsPath(const string& layerPath, const string& backend) { - if (backend == "overlay") { + if (backend == OVERLAY_BACKEND) { return path::join(layerPath, "rootfs." + backend); } http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/slave/flags.cpp ---------------------------------------------------------------------- diff --git a/src/slave/flags.cpp b/src/slave/flags.cpp index 87d9e46..e837cfc 100644 --- a/src/slave/flags.cpp +++ b/src/slave/flags.cpp @@ -34,6 +34,8 @@ #include "slave/containerizer/mesos/linux_launcher.hpp" #endif // __linux__ +#include "slave/containerizer/mesos/provisioner/constants.hpp" + using std::string; mesos::internal::slave::Flags::Flags() @@ -128,7 +130,7 @@ mesos::internal::slave::Flags::Flags() "image_provisioner_backend", "Strategy for provisioning container rootfs from images,\n" "e.g., `aufs`, `bind`, `copy`, `overlay`.", - "copy"); + COPY_BACKEND); add(&Flags::appc_simple_discovery_uri_prefix, "appc_simple_discovery_uri_prefix", http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/tests/containerizer/provisioner_appc_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/provisioner_appc_tests.cpp b/src/tests/containerizer/provisioner_appc_tests.cpp index a999fc7..8b4b832 100644 --- a/src/tests/containerizer/provisioner_appc_tests.cpp +++ b/src/tests/containerizer/provisioner_appc_tests.cpp @@ -37,6 +37,7 @@ #include "slave/paths.hpp" +#include "slave/containerizer/mesos/provisioner/constants.hpp" #include "slave/containerizer/mesos/provisioner/paths.hpp" #include "slave/containerizer/mesos/provisioner/provisioner.hpp" @@ -63,6 +64,8 @@ using process::Process; using testing::_; using testing::Return; +using mesos::internal::slave::BIND_BACKEND; +using mesos::internal::slave::COPY_BACKEND; using mesos::internal::slave::Fetcher; using mesos::internal::slave::Provisioner; using mesos::internal::slave::appc::Store; @@ -284,7 +287,7 @@ TEST_F(ProvisionerAppcTest, ROOT_Provision) slave::Flags flags; flags.image_providers = "APPC"; flags.appc_store_dir = path::join(os::getcwd(), "store"); - flags.image_provisioner_backend = "bind"; + flags.image_provisioner_backend = BIND_BACKEND; flags.work_dir = path::join(sandbox.get(), "work_dir"); Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); @@ -348,7 +351,7 @@ TEST_F(ProvisionerAppcTest, ROOT_ProvisionNestedContainer) slave::Flags flags; flags.image_providers = "APPC"; flags.appc_store_dir = path::join(os::getcwd(), "store"); - flags.image_provisioner_backend = "bind"; + flags.image_provisioner_backend = BIND_BACKEND; flags.work_dir = path::join(sandbox.get(), "work_dir"); Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); @@ -418,7 +421,7 @@ TEST_F(ProvisionerAppcTest, Recover) slave::Flags flags; flags.image_providers = "APPC"; flags.appc_store_dir = path::join(os::getcwd(), "store"); - flags.image_provisioner_backend = "copy"; + flags.image_provisioner_backend = COPY_BACKEND; flags.work_dir = path::join(sandbox.get(), "work_dir"); Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); @@ -489,7 +492,7 @@ TEST_F(ProvisionerAppcTest, RecoverNestedContainer) slave::Flags flags; flags.image_providers = "APPC"; flags.appc_store_dir = path::join(os::getcwd(), "store"); - flags.image_provisioner_backend = "copy"; + flags.image_provisioner_backend = COPY_BACKEND; flags.work_dir = path::join(sandbox.get(), "work_dir"); Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); @@ -558,7 +561,7 @@ TEST_F(ProvisionerAppcTest, RecoverNestedContainerNoParentImage) slave::Flags flags; flags.image_providers = "APPC"; flags.appc_store_dir = path::join(os::getcwd(), "store"); - flags.image_provisioner_backend = "copy"; + flags.image_provisioner_backend = COPY_BACKEND; flags.work_dir = path::join(sandbox.get(), "work_dir"); Try<Owned<Provisioner>> provisioner = Provisioner::create(flags); http://git-wip-us.apache.org/repos/asf/mesos/blob/b7f0bc19/src/tests/containerizer/provisioner_backend_tests.cpp ---------------------------------------------------------------------- diff --git a/src/tests/containerizer/provisioner_backend_tests.cpp b/src/tests/containerizer/provisioner_backend_tests.cpp index 661977b..727bf64 100644 --- a/src/tests/containerizer/provisioner_backend_tests.cpp +++ b/src/tests/containerizer/provisioner_backend_tests.cpp @@ -33,12 +33,19 @@ #include "slave/containerizer/mesos/provisioner/backends/copy.hpp" #include "slave/containerizer/mesos/provisioner/backends/overlay.hpp" +#include "slave/containerizer/mesos/provisioner/constants.hpp" + #include "tests/flags.hpp" using namespace process; using namespace mesos::internal::slave; +using mesos::internal::slave::AUFS_BACKEND; +using mesos::internal::slave::BIND_BACKEND; +using mesos::internal::slave::COPY_BACKEND; +using mesos::internal::slave::OVERLAY_BACKEND; + using std::string; using std::vector; @@ -89,9 +96,9 @@ TEST_F(OverlayBackendTest, ROOT_OVERLAYFS_OverlayFSBackend) string rootfs = path::join(os::getcwd(), "rootfs"); hashmap<string, Owned<Backend>> backends = Backend::create(slave::Flags()); - ASSERT_TRUE(backends.contains("overlay")); + ASSERT_TRUE(backends.contains(OVERLAY_BACKEND)); - AWAIT_READY(backends["overlay"]->provision( + AWAIT_READY(backends[OVERLAY_BACKEND]->provision( {layer1, layer2}, rootfs, sandbox.get())); @@ -113,7 +120,7 @@ TEST_F(OverlayBackendTest, ROOT_OVERLAYFS_OverlayFSBackend) EXPECT_SOME_EQ("test3", os::read(path::join(rootfs, "file"))); EXPECT_SOME_EQ("test2", os::read(path::join(layer2, "file"))); - AWAIT_READY(backends["overlay"]->destroy(rootfs, sandbox.get())); + AWAIT_READY(backends[OVERLAY_BACKEND]->destroy(rootfs, sandbox.get())); EXPECT_FALSE(os::exists(rootfs)); } @@ -144,9 +151,9 @@ TEST_F(OverlayBackendTest, ROOT_OVERLAYFS_OverlayFSBackendWithManyLayers) string rootfs = path::join(sandbox.get(), "rootfs"); hashmap<string, Owned<Backend>> backends = Backend::create(slave::Flags()); - ASSERT_TRUE(backends.contains("overlay")); + ASSERT_TRUE(backends.contains(OVERLAY_BACKEND)); - AWAIT_READY(backends["overlay"]->provision( + AWAIT_READY(backends[OVERLAY_BACKEND]->provision( layers, rootfs, sandbox.get())); @@ -158,7 +165,7 @@ TEST_F(OverlayBackendTest, ROOT_OVERLAYFS_OverlayFSBackendWithManyLayers) strings::format("dir%d", i).get()))); } - AWAIT_READY(backends["overlay"]->destroy(rootfs, sandbox.get())); + AWAIT_READY(backends[OVERLAY_BACKEND]->destroy(rootfs, sandbox.get())); } @@ -176,11 +183,11 @@ TEST_F(BindBackendTest, ROOT_BindBackend) ASSERT_SOME(mkdir); hashmap<string, Owned<Backend>> backends = Backend::create(slave::Flags()); - ASSERT_TRUE(backends.contains("bind")); + ASSERT_TRUE(backends.contains(BIND_BACKEND)); string target = path::join(os::getcwd(), "target"); - AWAIT_READY(backends["bind"]->provision( + AWAIT_READY(backends[BIND_BACKEND]->provision( {rootfs}, target, sandbox.get())); @@ -193,7 +200,7 @@ TEST_F(BindBackendTest, ROOT_BindBackend) EXPECT_TRUE(os::Permissions(mode.get()).owner.w); EXPECT_ERROR(os::write(path::join(target, "tmp", "test"), "data")); - AWAIT_READY(backends["bind"]->destroy(target, sandbox.get())); + AWAIT_READY(backends[BIND_BACKEND]->destroy(target, sandbox.get())); EXPECT_FALSE(os::exists(target)); } @@ -220,9 +227,9 @@ TEST_F(AufsBackendTest, ROOT_AUFS_AufsBackend) string rootfs = path::join(os::getcwd(), "rootfs"); hashmap<string, Owned<Backend>> backends = Backend::create(slave::Flags()); - ASSERT_TRUE(backends.contains("aufs")); + ASSERT_TRUE(backends.contains(AUFS_BACKEND)); - AWAIT_READY(backends["aufs"]->provision( + AWAIT_READY(backends[AUFS_BACKEND]->provision( {layer1, layer2}, rootfs, sandbox.get())); @@ -244,7 +251,7 @@ TEST_F(AufsBackendTest, ROOT_AUFS_AufsBackend) EXPECT_SOME_EQ("test3", os::read(path::join(rootfs, "file"))); EXPECT_SOME_EQ("test2", os::read(path::join(layer2, "file"))); - AWAIT_READY(backends["aufs"]->destroy(rootfs, sandbox.get())); + AWAIT_READY(backends[AUFS_BACKEND]->destroy(rootfs, sandbox.get())); EXPECT_FALSE(os::exists(rootfs)); } @@ -272,9 +279,9 @@ TEST_F(CopyBackendTest, ROOT_CopyBackend) string rootfs = path::join(os::getcwd(), "rootfs"); hashmap<string, Owned<Backend>> backends = Backend::create(slave::Flags()); - ASSERT_TRUE(backends.contains("copy")); + ASSERT_TRUE(backends.contains(COPY_BACKEND)); - AWAIT_READY(backends["copy"]->provision( + AWAIT_READY(backends[COPY_BACKEND]->provision( {layer1, layer2}, rootfs, sandbox.get())); @@ -289,7 +296,7 @@ TEST_F(CopyBackendTest, ROOT_CopyBackend) EXPECT_TRUE(os::exists(path::join(rootfs, "file"))); EXPECT_SOME_EQ("test2", os::read(path::join(rootfs, "file"))); - AWAIT_READY(backends["copy"]->destroy(rootfs, sandbox.get())); + AWAIT_READY(backends[COPY_BACKEND]->destroy(rootfs, sandbox.get())); EXPECT_FALSE(os::exists(rootfs)); }