aboutsummaryrefslogtreecommitdiff
path: root/src/zenstore
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2024-05-02 17:01:09 +0200
committerGitHub Enterprise <[email protected]>2024-05-02 17:01:09 +0200
commit375fa71cb816acb25bd2eaf24ef5cc292a1f2c36 (patch)
tree7d8e20b99bd65af37f75cb95f18c0c0001e58dcd /src/zenstore
parentbatch cache put (#67) (diff)
downloadzen-375fa71cb816acb25bd2eaf24ef5cc292a1f2c36.tar.xz
zen-375fa71cb816acb25bd2eaf24ef5cc292a1f2c36.zip
use write and move in place for safer writing of files (#70)
* use write and move in place for safer writing of files
Diffstat (limited to 'src/zenstore')
-rw-r--r--src/zenstore/cache/cachedisklayer.cpp4
-rw-r--r--src/zenstore/cas.cpp14
-rw-r--r--src/zenstore/gc.cpp2
3 files changed, 4 insertions, 16 deletions
diff --git a/src/zenstore/cache/cachedisklayer.cpp b/src/zenstore/cache/cachedisklayer.cpp
index a497c8969..6cb749b5a 100644
--- a/src/zenstore/cache/cachedisklayer.cpp
+++ b/src/zenstore/cache/cachedisklayer.cpp
@@ -398,7 +398,7 @@ BucketManifestSerializer::GenerateNewManifest(std::filesystem::path ManifestPath
Writer << "BucketId"sv << BucketId;
Writer << "Version"sv << CurrentDiskBucketVersion;
Manifest = Writer.Save();
- WriteFile(ManifestPath, Manifest.GetBuffer().AsIoBuffer());
+ TemporaryFile::SafeWriteFile(ManifestPath, Manifest.GetBuffer().GetView());
return BucketId;
}
@@ -1647,7 +1647,7 @@ ZenCacheDiskLayer::CacheBucket::SaveSnapshot(const std::function<uint64_t()>& Cl
}
std::filesystem::path ManifestPath = GetManifestPath(m_BucketDir, m_BucketName);
- WriteFile(ManifestPath, Buffer);
+ TemporaryFile::SafeWriteFile(ManifestPath, Buffer.GetView());
}
catch (const std::exception& Err)
{
diff --git a/src/zenstore/cas.cpp b/src/zenstore/cas.cpp
index 67790e2c6..f300c08e3 100644
--- a/src/zenstore/cas.cpp
+++ b/src/zenstore/cas.cpp
@@ -220,19 +220,7 @@ CasImpl::UpdateManifest()
ZEN_TRACE("Writing new manifest to '{}'", ManifestPath);
- TemporaryFile Marker;
- std::error_code Ec;
- Marker.CreateTemporary(ManifestPath.parent_path(), Ec);
- if (Ec)
- {
- throw std::system_error(Ec, fmt::format("Failed to create temp file for cas manifest at '{}'", ManifestPath));
- }
- Marker.Write(m_ManifestObject.GetBuffer(), 0);
- Marker.MoveTemporaryIntoPlace(ManifestPath, Ec);
- if (Ec)
- {
- throw std::system_error(Ec, fmt::format("Failed to move temp file '{}' to '{}'", Marker.GetPath(), ManifestPath));
- }
+ TemporaryFile::SafeWriteFile(ManifestPath, m_ManifestObject.GetBuffer().GetView());
}
CasStore::InsertResult
diff --git a/src/zenstore/gc.cpp b/src/zenstore/gc.cpp
index 39a747dae..e8cf6ec5e 100644
--- a/src/zenstore/gc.cpp
+++ b/src/zenstore/gc.cpp
@@ -169,7 +169,7 @@ LoadCompactBinaryObject(const fs::path& Path)
void
SaveCompactBinaryObject(const fs::path& Path, const CbObject& Object)
{
- WriteFile(Path, Object.GetBuffer().AsIoBuffer());
+ TemporaryFile::SafeWriteFile(Path, Object.GetBuffer().GetView());
}
//////////////////////////////////////////////////////////////////////////