Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:favogt:ovlsyncfail
transactional-update
0001-Preserve-overlay-stack-if-syncing-fails.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0001-Preserve-overlay-stack-if-syncing-fails.patch of Package transactional-update
From 23049eb34e3ef58fc2032c932960b2b0dfa9cb6e Mon Sep 17 00:00:00 2001 From: Fabian Vogt <fvogt@suse.de> Date: Mon, 23 Oct 2023 10:44:12 +0200 Subject: [PATCH] Preserve overlay stack if syncing fails --- lib/Overlay.cpp | 17 ++++++++++++----- lib/Overlay.hpp | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/Overlay.cpp b/lib/Overlay.cpp index 50682f8..4f2c4a3 100644 --- a/lib/Overlay.cpp +++ b/lib/Overlay.cpp @@ -90,12 +90,12 @@ bool Overlay::references(string snapshot) { return false; } -void Overlay::sync(string base, fs::path snapRoot) { +bool Overlay::sync(string base, fs::path snapRoot) { Overlay baseOverlay = Overlay{base}; auto previousSnapId = baseOverlay.getPreviousSnapshotOvlId(); if (previousSnapId.empty()) { tulog.info("No previous snapshot to sync with - skipping"); - return; + return false; } unique_ptr<Snapshot> previousSnapshot; @@ -103,7 +103,7 @@ void Overlay::sync(string base, fs::path snapRoot) { previousSnapshot = snapMgr->open(previousSnapId); } catch (std::invalid_argument &e) { tulog.info("Parent snapshot ", previousSnapId, " does not exist any more - skipping rsync"); - return; + return false; } unique_ptr<Mount> previousEtc{new Mount("/etc")}; previousEtc->setTabSource(previousSnapshot->getRoot() / "etc" / "fstab"); @@ -131,6 +131,8 @@ void Overlay::sync(string base, fs::path snapRoot) { tulog.info("Retrying rsync without SELinux xattrs..."); Util::exec("rsync --quiet --archive --inplace --xattrs --filter='-x security.selinux' --exclude='/fstab' --acls --delete " + syncSource + " " + string(snapRoot) + "/etc"); } + + return true; } void Overlay::setMountOptions(unique_ptr<Mount>& mount) { @@ -223,8 +225,13 @@ void Overlay::create(string base, string snapshot, fs::path snapRoot) { lowerdirs.push_back(*it); } } else { - lowerdirs.push_back(parent.lowerdirs.back()); - sync(base, snapRoot); + if (sync(base, snapRoot)) { + lowerdirs.push_back(parent.lowerdirs.back()); + } else { + for (auto it = parent.lowerdirs.begin(); it != parent.lowerdirs.end(); it++) { + lowerdirs.push_back(*it); + } + } } } diff --git a/lib/Overlay.hpp b/lib/Overlay.hpp index a28fbc8..c912794 100644 --- a/lib/Overlay.hpp +++ b/lib/Overlay.hpp @@ -24,7 +24,7 @@ public: void create(std::string base, std::string snapshot, std::filesystem::path snapRoot); std::string getPreviousSnapshotOvlId(); bool references(std::string snapshot); - void sync(std::string base, std::filesystem::path snapRoot); + bool sync(std::string base, std::filesystem::path snapRoot); void setMountOptions(std::unique_ptr<Mount>& mount); void setMountOptionsForMount(std::unique_ptr<Mount>& mount); -- 2.42.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor