diff options
| author | Dan Engelbrecht <[email protected]> | 2023-01-26 01:17:22 -0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-01-26 01:17:22 -0800 |
| commit | 049991ce460fe65be29ccc3b6bf7bf77a5f225f1 (patch) | |
| tree | 75f7b9dcdc6f0e72ddaae48708038b8eaf65f5b5 /zenserver/projectstore.cpp | |
| parent | Better error responses/logging in project store request (#217) (diff) | |
| download | zen-049991ce460fe65be29ccc3b6bf7bf77a5f225f1.tar.xz zen-049991ce460fe65be29ccc3b6bf7bf77a5f225f1.zip | |
Retain memory buffer when replaying oplog (#216)
* Retain memory buffer when replaying oplog
* changelog
Diffstat (limited to 'zenserver/projectstore.cpp')
| -rw-r--r-- | zenserver/projectstore.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/zenserver/projectstore.cpp b/zenserver/projectstore.cpp index 1885a6b1c..216a8cbf6 100644 --- a/zenserver/projectstore.cpp +++ b/zenserver/projectstore.cpp @@ -152,6 +152,7 @@ struct ProjectStore::OplogStorage : public RefCounted uint64_t InvalidEntries = 0; + IoBuffer OpBuffer; m_Oplog.Replay( [&](const OplogEntry& LogEntry) { if (LogEntry.OpCoreSize == 0) @@ -161,14 +162,17 @@ struct ProjectStore::OplogStorage : public RefCounted return; } - IoBuffer OpBuffer(LogEntry.OpCoreSize); + if (OpBuffer.GetSize() < LogEntry.OpCoreSize) + { + OpBuffer = IoBuffer(LogEntry.OpCoreSize); + } const uint64_t OpFileOffset = LogEntry.OpCoreOffset * m_OpsAlign; m_OpBlobs.Read((void*)OpBuffer.Data(), LogEntry.OpCoreSize, OpFileOffset); // Verify checksum, ignore op data if incorrect - const auto OpCoreHash = uint32_t(XXH3_64bits(OpBuffer.Data(), OpBuffer.Size()) & 0xffffFFFF); + const auto OpCoreHash = uint32_t(XXH3_64bits(OpBuffer.Data(), LogEntry.OpCoreSize) & 0xffffFFFF); if (OpCoreHash != LogEntry.OpCoreHash) { @@ -176,7 +180,7 @@ struct ProjectStore::OplogStorage : public RefCounted return; } - CbObject Op(SharedBuffer::MakeView(OpBuffer.Data(), OpBuffer.Size())); + CbObject Op(SharedBuffer::MakeView(OpBuffer.Data(), LogEntry.OpCoreSize)); m_NextOpsOffset = Max(m_NextOpsOffset.load(std::memory_order_relaxed), RoundUp(OpFileOffset + LogEntry.OpCoreSize, m_OpsAlign)); |