diff options
| author | Dan Engelbrecht <[email protected]> | 2024-05-02 17:01:09 +0200 |
|---|---|---|
| committer | GitHub Enterprise <[email protected]> | 2024-05-02 17:01:09 +0200 |
| commit | 375fa71cb816acb25bd2eaf24ef5cc292a1f2c36 (patch) | |
| tree | 7d8e20b99bd65af37f75cb95f18c0c0001e58dcd /src/zenstore | |
| parent | batch cache put (#67) (diff) | |
| download | zen-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.cpp | 4 | ||||
| -rw-r--r-- | src/zenstore/cas.cpp | 14 | ||||
| -rw-r--r-- | src/zenstore/gc.cpp | 2 |
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()); } ////////////////////////////////////////////////////////////////////////// |