This is an automated email from the ASF dual-hosted git repository. gilbert pushed a commit to branch 1.6.x in repository https://gitbox.apache.org/repos/asf/mesos.git
commit e8af5d07f3a0936afb221c988b93e8eb2c4b8590 Author: Gilbert Song <[email protected]> AuthorDate: Mon Apr 15 21:47:10 2019 -0700 Supported docker manifest v2s2 config with image GC. After the docker manifest v2 schema2 support, the manifest config is saved as a layer in image store. However, the config file cannot survive if the image GC is triggered. This patch supports checkpointing the config path in provisioner, so that the provisioner has the information of configs so that they will not be deleted during GC. (cherry picked from commit cd75916020080232a27df4597f9de4dc2dc961d9) --- .../mesos/provisioner/docker/metadata_manager.cpp | 4 ++++ src/slave/containerizer/mesos/provisioner/docker/store.cpp | 4 ++++ src/slave/containerizer/mesos/provisioner/provisioner.cpp | 12 ++++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/slave/containerizer/mesos/provisioner/docker/metadata_manager.cpp b/src/slave/containerizer/mesos/provisioner/docker/metadata_manager.cpp index 516cada..17db6e6 100644 --- a/src/slave/containerizer/mesos/provisioner/docker/metadata_manager.cpp +++ b/src/slave/containerizer/mesos/provisioner/docker/metadata_manager.cpp @@ -201,6 +201,10 @@ Future<hashset<string>> MetadataManagerProcess::prune( foreach (const string& layerId, image->layer_ids()) { retainedLayers.insert(layerId); } + + if (image->has_config_digest()) { + retainedLayers.insert(image->config_digest()); + } } storedImages = std::move(retainedImages); diff --git a/src/slave/containerizer/mesos/provisioner/docker/store.cpp b/src/slave/containerizer/mesos/provisioner/docker/store.cpp index d4858c1..4e66eed 100644 --- a/src/slave/containerizer/mesos/provisioner/docker/store.cpp +++ b/src/slave/containerizer/mesos/provisioner/docker/store.cpp @@ -406,6 +406,10 @@ Future<ImageInfo> StoreProcess::__get( v1.error()); } + if (image.has_config_digest()) { + return ImageInfo{layerPaths, v1.get(), None(), configPath}; + } + return ImageInfo{layerPaths, v1.get()}; } diff --git a/src/slave/containerizer/mesos/provisioner/provisioner.cpp b/src/slave/containerizer/mesos/provisioner/provisioner.cpp index b3ed4ff..6b05198 100644 --- a/src/slave/containerizer/mesos/provisioner/provisioner.cpp +++ b/src/slave/containerizer/mesos/provisioner/provisioner.cpp @@ -442,6 +442,10 @@ Future<Nothing> ProvisionerProcess::recover( layers->paths().begin(), layers->paths().end(), std::back_inserter(info->layers.get())); + + if (layers->has_config()) { + info->layers->push_back(layers->config()); + } } } @@ -556,6 +560,10 @@ Future<ProvisionInfo> ProvisionerProcess::_provision( infos[containerId]->rootfses[backend].insert(rootfsId); infos[containerId]->layers = imageInfo.layers; + if (imageInfo.config.isSome()) { + infos[containerId]->layers->push_back(imageInfo.config.get()); + } + string backendDir = provisioner::paths::getBackendDir( rootDir, containerId, @@ -575,6 +583,10 @@ Future<ProvisionInfo> ProvisionerProcess::_provision( containerLayers.add_paths(layer); } + if (imageInfo.config.isSome()) { + containerLayers.set_config(imageInfo.config.get()); + } + Try<Nothing> checkpoint = slave::state::checkpoint(path, containerLayers); if (checkpoint.isError()) { return Failure(
