aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/projectstore
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-08-26 11:43:37 +0200
committerGitHub Enterprise <[email protected]>2025-08-26 11:43:37 +0200
commitfb137cf9c8b7a9d1659b03472c9591c4863e9173 (patch)
treebbd0df09d4b425ef668d22f3b12ea2cb3482bf66 /src/zenserver/projectstore
parentMerge pull request #139 from ue-foundation/de/zen-service-command (diff)
downloadzen-fb137cf9c8b7a9d1659b03472c9591c4863e9173.tar.xz
zen-fb137cf9c8b7a9d1659b03472c9591c4863e9173.zip
revert multi-cid store (#475)
Diffstat (limited to 'src/zenserver/projectstore')
-rw-r--r--src/zenserver/projectstore/httpprojectstore.cpp167
-rw-r--r--src/zenserver/projectstore/httpprojectstore.h7
-rw-r--r--src/zenserver/projectstore/projectstore.cpp169
-rw-r--r--src/zenserver/projectstore/projectstore.h8
4 files changed, 99 insertions, 252 deletions
diff --git a/src/zenserver/projectstore/httpprojectstore.cpp b/src/zenserver/projectstore/httpprojectstore.cpp
index 9600133f3..317a419eb 100644
--- a/src/zenserver/projectstore/httpprojectstore.cpp
+++ b/src/zenserver/projectstore/httpprojectstore.cpp
@@ -235,11 +235,13 @@ namespace {
//////////////////////////////////////////////////////////////////////////
-HttpProjectService::HttpProjectService(ProjectStore* Projects,
+HttpProjectService::HttpProjectService(CidStore& Store,
+ ProjectStore* Projects,
HttpStatusService& StatusService,
HttpStatsService& StatsService,
AuthMgr& AuthMgr)
: m_Log(logging::Get("project"))
+, m_CidStore(Store)
, m_ProjectStore(Projects)
, m_StatusService(StatusService)
, m_StatsService(StatsService)
@@ -405,45 +407,8 @@ HttpProjectService::HandleStatsRequest(HttpServerRequest& HttpReq)
{
ZEN_TRACE_CPU("ProjectService::Stats");
- bool ShowCidStoreStats = HttpReq.GetQueryParams().GetValue("cidstorestats") == "true";
-
- const GcStorageSize StoreSize = m_ProjectStore->StorageSize();
- uint64_t TotalChunkHitCount = 0;
- uint64_t TotalChunkMissCount = 0;
- uint64_t TotalChunkWriteCount = 0;
- CidStoreSize TotalCidSize;
-
- tsl::robin_map<CidStore*, std::string> UniqueStores;
- {
- m_ProjectStore->IterateProjects([&UniqueStores](ProjectStore::Project& Project) {
- CidStore* Store = &Project.GetCidStore();
- if (auto It = UniqueStores.find(Store); It == UniqueStores.end())
- {
- UniqueStores.insert_or_assign(Store, Project.Identifier);
- }
- else
- {
- UniqueStores.insert_or_assign(Store, std::string{});
- }
- });
-
- for (auto It : UniqueStores)
- {
- CidStore* ChunkStore = It.first;
-
- CidStoreStats ChunkStoreStats = ChunkStore->Stats();
- CidStoreSize ChunkStoreSize = ChunkStore->TotalSize();
-
- TotalChunkHitCount += ChunkStoreStats.HitCount;
- TotalChunkMissCount += ChunkStoreStats.MissCount;
- TotalChunkWriteCount += ChunkStoreStats.WriteCount;
-
- TotalCidSize.TinySize += ChunkStoreSize.TinySize;
- TotalCidSize.SmallSize += ChunkStoreSize.SmallSize;
- TotalCidSize.LargeSize += ChunkStoreSize.LargeSize;
- TotalCidSize.TotalSize += ChunkStoreSize.TotalSize;
- }
- }
+ const GcStorageSize StoreSize = m_ProjectStore->StorageSize();
+ const CidStoreSize CidSize = m_CidStore.TotalSize();
CbObjectWriter Cbo;
@@ -495,66 +460,12 @@ HttpProjectService::HandleStatsRequest(HttpServerRequest& HttpReq)
{
Cbo.BeginObject("size");
{
- Cbo << "tiny" << TotalCidSize.TinySize;
- Cbo << "small" << TotalCidSize.SmallSize;
- Cbo << "large" << TotalCidSize.LargeSize;
- Cbo << "total" << TotalCidSize.TotalSize;
+ Cbo << "tiny" << CidSize.TinySize;
+ Cbo << "small" << CidSize.SmallSize;
+ Cbo << "large" << CidSize.LargeSize;
+ Cbo << "total" << CidSize.TotalSize;
}
Cbo.EndObject();
-
- if (ShowCidStoreStats)
- {
- Cbo << "cidhits" << TotalChunkHitCount << "cidmisses" << TotalChunkMissCount << "cidwrites" << TotalChunkWriteCount;
- const uint64_t TotalChunkCount = TotalChunkHitCount + TotalChunkMissCount;
- Cbo << "cidhit_ratio" << (TotalChunkHitCount ? (double(TotalChunkCount) / double(TotalChunkHitCount)) : 0.0);
-
- Cbo.BeginObject("store");
-
- auto OutputStats = [&](CidStore& ChunkStore) {
- CidStoreStats StoreStats = ChunkStore.Stats();
- Cbo << "hits" << StoreStats.HitCount << "misses" << StoreStats.MissCount << "writes" << StoreStats.WriteCount;
- const uint64_t Count = StoreStats.HitCount + StoreStats.MissCount;
- Cbo << "hit_ratio" << (Count ? (double(StoreStats.HitCount) / double(Count)) : 0.0);
- EmitSnapshot("read", StoreStats.FindChunkOps, Cbo);
- EmitSnapshot("write", StoreStats.AddChunkOps, Cbo);
- };
-
- if (UniqueStores.size() > 1)
- {
- Cbo.BeginArray("projects");
- for (auto It : UniqueStores)
- {
- CidStore* ChunkStore = It.first;
- const std::string& ProjectId = It.second;
- CidStoreSize ChunkStoreSize = ChunkStore->TotalSize();
-
- Cbo.BeginObject();
- {
- Cbo << "project" << ProjectId;
- Cbo.BeginObject("stats");
- OutputStats(*ChunkStore);
- Cbo.EndObject();
-
- Cbo.BeginObject("size");
- {
- Cbo << "tiny" << ChunkStoreSize.TinySize;
- Cbo << "small" << ChunkStoreSize.SmallSize;
- Cbo << "large" << ChunkStoreSize.LargeSize;
- Cbo << "total" << ChunkStoreSize.TotalSize;
- }
- Cbo.EndObject();
- }
- Cbo.EndObject();
- }
- Cbo.EndArray(); // projects
- }
- else if (UniqueStores.size() != 0)
- {
- CidStore& ChunkStore = *UniqueStores.begin()->first;
- OutputStats(ChunkStore);
- }
- Cbo.EndObject();
- }
}
Cbo.EndObject();
@@ -1214,8 +1125,6 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
}
Project->TouchOplog(OplogId);
- CidStore& ChunkStore = Project->GetCidStore();
-
ProjectStore::Oplog& Oplog = *FoundLog;
IoBuffer Payload = HttpReq.ReadPayload();
@@ -1228,7 +1137,7 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
std::vector<IoHash> MissingChunks;
CbPackage::AttachmentResolver Resolver = [&](const IoHash& Hash) -> SharedBuffer {
- if (ChunkStore.ContainsChunk(Hash))
+ if (m_CidStore.ContainsChunk(Hash))
{
// Return null attachment as we already have it, no point in reading it and storing it again
return {};
@@ -1484,8 +1393,6 @@ HttpProjectService::HandleOpLogOpRequest(HttpRouterRequest& Req)
}
Project->TouchOplog(OplogId);
- CidStore& ChunkStore = Project->GetCidStore();
-
ProjectStore::Oplog& Oplog = *FoundLog;
if (const std::optional<int32_t> OpId = ParseInt<uint32_t>(OpIdString))
@@ -1500,7 +1407,7 @@ HttpProjectService::HandleOpLogOpRequest(HttpRouterRequest& Req)
Op.IterateAttachments([&](CbFieldView FieldView) {
const IoHash AttachmentHash = FieldView.AsAttachment();
- IoBuffer Payload = ChunkStore.FindChunkByCid(AttachmentHash);
+ IoBuffer Payload = m_CidStore.FindChunkByCid(AttachmentHash);
if (Payload)
{
switch (Payload.GetContentType())
@@ -2129,14 +2036,11 @@ HttpProjectService::HandleDetailsRequest(HttpRouterRequest& Req)
CSVHeader(Details, AttachmentDetails, CSVWriter);
m_ProjectStore->IterateProjects([&](ProjectStore::Project& Project) {
- CidStore& ChunkStore = Project.GetCidStore();
-
Project.IterateOplogs([&](const RwLock::SharedLockScope&, ProjectStore::Oplog& Oplog) {
- Oplog.IterateOplogWithKey([this, &Project, &Oplog, &ChunkStore, &CSVWriter, Details, AttachmentDetails](uint32_t LSN,
- const Oid& Key,
- CbObjectView Op) {
- CSVWriteOp(ChunkStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
- });
+ Oplog.IterateOplogWithKey(
+ [this, &Project, &Oplog, &CSVWriter, Details, AttachmentDetails](uint32_t LSN, const Oid& Key, CbObjectView Op) {
+ CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
+ });
});
});
@@ -2150,9 +2054,8 @@ HttpProjectService::HandleDetailsRequest(HttpRouterRequest& Req)
m_ProjectStore->DiscoverProjects();
m_ProjectStore->IterateProjects([&](ProjectStore::Project& Project) {
- CidStore& ChunkStore = Project.GetCidStore();
- std::vector<std::string> OpLogs = Project.ScanForOplogs();
- CbWriteProject(ChunkStore, Project, OpLogs, Details, OpDetails, AttachmentDetails, Cbo);
+ std::vector<std::string> OpLogs = Project.ScanForOplogs();
+ CbWriteProject(m_CidStore, Project, OpLogs, Details, OpDetails, AttachmentDetails, Cbo);
});
}
Cbo.EndArray();
@@ -2181,8 +2084,7 @@ HttpProjectService::HandleProjectDetailsRequest(HttpRouterRequest& Req)
{
return HttpReq.WriteResponse(HttpResponseCode::NotFound);
}
- ProjectStore::Project& Project = *FoundProject.Get();
- CidStore& ChunkStore = Project.GetCidStore();
+ ProjectStore::Project& Project = *FoundProject.Get();
if (CSV)
{
@@ -2190,11 +2092,10 @@ HttpProjectService::HandleProjectDetailsRequest(HttpRouterRequest& Req)
CSVHeader(Details, AttachmentDetails, CSVWriter);
FoundProject->IterateOplogs([&](const RwLock::SharedLockScope&, ProjectStore::Oplog& Oplog) {
- Oplog.IterateOplogWithKey([this, &Project, &Oplog, &ChunkStore, &CSVWriter, Details, AttachmentDetails](uint32_t LSN,
- const Oid& Key,
- CbObjectView Op) {
- CSVWriteOp(ChunkStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
- });
+ Oplog.IterateOplogWithKey(
+ [this, &Project, &Oplog, &CSVWriter, Details, AttachmentDetails](uint32_t LSN, const Oid& Key, CbObjectView Op) {
+ CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
+ });
});
HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, CSVWriter.ToView());
}
@@ -2204,7 +2105,7 @@ HttpProjectService::HandleProjectDetailsRequest(HttpRouterRequest& Req)
std::vector<std::string> OpLogs = FoundProject->ScanForOplogs();
Cbo.BeginArray("projects");
{
- CbWriteProject(ChunkStore, Project, OpLogs, Details, OpDetails, AttachmentDetails, Cbo);
+ CbWriteProject(m_CidStore, Project, OpLogs, Details, OpDetails, AttachmentDetails, Cbo);
}
Cbo.EndArray();
HttpReq.WriteResponse(HttpResponseCode::OK, Cbo.Save());
@@ -2240,17 +2141,16 @@ HttpProjectService::HandleOplogDetailsRequest(HttpRouterRequest& Req)
return HttpReq.WriteResponse(HttpResponseCode::NotFound);
}
- ProjectStore::Project& Project = *FoundProject.Get();
- CidStore& ChunkStore = Project.GetCidStore();
- ProjectStore::Oplog& Oplog = *FoundLog;
+ ProjectStore::Project& Project = *FoundProject.Get();
+ ProjectStore::Oplog& Oplog = *FoundLog;
if (CSV)
{
ExtendableStringBuilder<4096> CSVWriter;
CSVHeader(Details, AttachmentDetails, CSVWriter);
Oplog.IterateOplogWithKey(
- [this, &Project, &Oplog, &ChunkStore, &CSVWriter, Details, AttachmentDetails](uint32_t LSN, const Oid& Key, CbObjectView Op) {
- CSVWriteOp(ChunkStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
+ [this, &Project, &Oplog, &CSVWriter, Details, AttachmentDetails](uint32_t LSN, const Oid& Key, CbObjectView Op) {
+ CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN, Key, Op, CSVWriter);
});
HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, CSVWriter.ToView());
}
@@ -2259,7 +2159,7 @@ HttpProjectService::HandleOplogDetailsRequest(HttpRouterRequest& Req)
CbObjectWriter Cbo;
Cbo.BeginArray("oplogs");
{
- CbWriteOplog(ChunkStore, Oplog, Details, OpDetails, AttachmentDetails, Cbo);
+ CbWriteOplog(m_CidStore, Oplog, Details, OpDetails, AttachmentDetails, Cbo);
}
Cbo.EndArray();
HttpReq.WriteResponse(HttpResponseCode::OK, Cbo.Save());
@@ -2304,10 +2204,9 @@ HttpProjectService::HandleOplogOpDetailsRequest(HttpRouterRequest& Req)
fmt::format("Chunk info request for invalid chunk id '{}/{}'/'{}'", ProjectId, OplogId, OpId));
}
- const Oid ObjId = Oid::FromHexString(OpId);
- ProjectStore::Project& Project = *FoundProject.Get();
- CidStore& ChunkStore = Project.GetCidStore();
- ProjectStore::Oplog& Oplog = *FoundLog;
+ const Oid ObjId = Oid::FromHexString(OpId);
+ ProjectStore::Project& Project = *FoundProject.Get();
+ ProjectStore::Oplog& Oplog = *FoundLog;
std::optional<CbObject> Op = Oplog.GetOpByKey(ObjId);
if (!Op.has_value())
@@ -2325,7 +2224,7 @@ HttpProjectService::HandleOplogOpDetailsRequest(HttpRouterRequest& Req)
ExtendableStringBuilder<4096> CSVWriter;
CSVHeader(Details, AttachmentDetails, CSVWriter);
- CSVWriteOp(ChunkStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN.value(), ObjId, Op.value(), CSVWriter);
+ CSVWriteOp(m_CidStore, Project.Identifier, Oplog.OplogId(), Details, AttachmentDetails, LSN.value(), ObjId, Op.value(), CSVWriter);
HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, CSVWriter.ToView());
}
else
@@ -2333,7 +2232,7 @@ HttpProjectService::HandleOplogOpDetailsRequest(HttpRouterRequest& Req)
CbObjectWriter Cbo;
Cbo.BeginArray("ops");
{
- CbWriteOp(ChunkStore, Details, OpDetails, AttachmentDetails, LSN.value(), ObjId, Op.value(), Cbo);
+ CbWriteOp(m_CidStore, Details, OpDetails, AttachmentDetails, LSN.value(), ObjId, Op.value(), Cbo);
}
Cbo.EndArray();
HttpReq.WriteResponse(HttpResponseCode::OK, Cbo.Save());
diff --git a/src/zenserver/projectstore/httpprojectstore.h b/src/zenserver/projectstore/httpprojectstore.h
index 5782188e6..295defa5c 100644
--- a/src/zenserver/projectstore/httpprojectstore.h
+++ b/src/zenserver/projectstore/httpprojectstore.h
@@ -35,7 +35,11 @@ class ProjectStore;
class HttpProjectService : public HttpService, public IHttpStatusProvider, public IHttpStatsProvider
{
public:
- HttpProjectService(ProjectStore* InProjectStore, HttpStatusService& StatusService, HttpStatsService& StatsService, AuthMgr& AuthMgr);
+ HttpProjectService(CidStore& Store,
+ ProjectStore* InProjectStore,
+ HttpStatusService& StatusService,
+ HttpStatsService& StatsService,
+ AuthMgr& AuthMgr);
~HttpProjectService();
virtual const char* BaseUri() const override;
@@ -88,6 +92,7 @@ private:
inline LoggerRef Log() { return m_Log; }
LoggerRef m_Log;
+ CidStore& m_CidStore;
HttpRequestRouter m_Router;
Ref<ProjectStore> m_ProjectStore;
HttpStatusService& m_StatusService;
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 7463e9caa..a5ab24cfb 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -3832,7 +3832,7 @@ ProjectStore::Project::LastOplogAccessTime(std::string_view Oplog) const
//////////////////////////////////////////////////////////////////////////
-ProjectStore::ProjectStore(GetCidStoreFunc&& GetCidStore,
+ProjectStore::ProjectStore(CidStore& Store,
std::filesystem::path BasePath,
GcManager& Gc,
JobQueue& JobQueue,
@@ -3840,7 +3840,7 @@ ProjectStore::ProjectStore(GetCidStoreFunc&& GetCidStore,
const Configuration& Config)
: m_Log(logging::Get("project"))
, m_Gc(Gc)
-, m_GetCidStore(std::move(GetCidStore))
+, m_CidStore(Store)
, m_JobQueue(JobQueue)
, m_OpenProcessCache(InOpenProcessCache)
, m_ProjectBasePath(BasePath)
@@ -4025,8 +4025,6 @@ ProjectStore::OpenProject(std::string_view ProjectId)
}
}
- CidStore& ChunkStore = m_GetCidStore(ProjectId);
-
RwLock::ExclusiveLockScope _(m_ProjectsLock);
if (auto ProjIt = m_Projects.find(std::string{ProjectId}); ProjIt != m_Projects.end())
{
@@ -4043,7 +4041,7 @@ ProjectStore::OpenProject(std::string_view ProjectId)
Ref<Project>& Prj =
m_Projects
- .try_emplace(std::string{ProjectId}, Ref<ProjectStore::Project>(new ProjectStore::Project(this, ChunkStore, BasePath)))
+ .try_emplace(std::string{ProjectId}, Ref<ProjectStore::Project>(new ProjectStore::Project(this, m_CidStore, BasePath)))
.first->second;
Prj->Identifier = ProjectId;
Prj->Read();
@@ -4070,14 +4068,12 @@ ProjectStore::NewProject(const std::filesystem::path& BasePath,
ZEN_MEMSCOPE(GetProjectstoreTag());
ZEN_TRACE_CPU("Store::NewProject");
- CidStore& ChunkStore = m_GetCidStore(ProjectId);
-
RwLock::ExclusiveLockScope _(m_ProjectsLock);
ZEN_INFO("project '{}': creating project at '{}'", ProjectId, BasePath);
Ref<Project>& Prj =
- m_Projects.try_emplace(std::string{ProjectId}, Ref<ProjectStore::Project>(new ProjectStore::Project(this, ChunkStore, BasePath)))
+ m_Projects.try_emplace(std::string{ProjectId}, Ref<ProjectStore::Project>(new ProjectStore::Project(this, m_CidStore, BasePath)))
.first->second;
Prj->Identifier = ProjectId;
Prj->RootDir = RootDir;
@@ -4806,7 +4802,7 @@ ProjectStore::GetChunk(const std::string_view ProjectId,
}
const IoHash Hash = IoHash::FromHexString(Cid);
- OutChunk = Project->GetCidStore().FindChunkByCid(Hash);
+ OutChunk = m_CidStore.FindChunkByCid(Hash);
if (!OutChunk)
{
@@ -4869,7 +4865,7 @@ ProjectStore::PutChunk(const std::string_view ProjectId,
}
FoundLog->CaptureAddedAttachments(std::vector<IoHash>{Hash});
- CidStore::InsertResult Result = Project->GetCidStore().AddChunk(Chunk, Hash);
+ CidStore::InsertResult Result = m_CidStore.AddChunk(Chunk, Hash);
return {Result.New ? HttpResponseCode::Created : HttpResponseCode::OK, {}};
}
@@ -4898,19 +4894,18 @@ ProjectStore::GetChunks(const std::string_view ProjectId,
}
Project->TouchOplog(OplogId);
- CidStore& ChunkStore = Project->GetCidStore();
-
if (RequestObject["chunks"sv].IsArray())
{
// Legacy full chunks only by rawhash
- CbArrayView ChunksArray = RequestObject["chunks"sv].AsArrayView();
+ CbArrayView ChunksArray = RequestObject["chunks"sv].AsArrayView();
+
CbObjectWriter ResponseWriter;
ResponseWriter.BeginArray("chunks"sv);
for (CbFieldView FieldView : ChunksArray)
{
IoHash RawHash = FieldView.AsHash();
- IoBuffer ChunkBuffer = ChunkStore.FindChunkByCid(RawHash);
+ IoBuffer ChunkBuffer = m_CidStore.FindChunkByCid(RawHash);
if (ChunkBuffer)
{
CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(std::move(ChunkBuffer));
@@ -5062,7 +5057,7 @@ ProjectStore::GetChunks(const std::string_view ProjectId,
if (ChunkRequest.Input.Id.index() == 0)
{
const IoHash& ChunkHash = std::get<IoHash>(ChunkRequest.Input.Id);
- IoBuffer Payload = ChunkStore.FindChunkByCid(ChunkHash);
+ IoBuffer Payload = m_CidStore.FindChunkByCid(ChunkHash);
if (Payload)
{
ChunkRequest.Output.Exists = true;
@@ -5249,7 +5244,7 @@ ProjectStore::WriteOplog(const std::string_view ProjectId, const std::string_vie
return {HttpResponseCode::BadRequest, "Invalid payload format"};
}
- CidStore& ChunkStore = Project->GetCidStore();
+ CidStore& ChunkStore = m_CidStore;
RwLock AttachmentsLock;
tsl::robin_set<IoHash, IoHash::Hasher> Attachments;
@@ -5355,7 +5350,7 @@ ProjectStore::ReadOplog(const std::string_view ProjectId,
}
}
- CidStore& ChunkStore = Project->GetCidStore();
+ CidStore& ChunkStore = m_CidStore;
RemoteProjectStore::LoadContainerResult ContainerResult = BuildContainer(
ChunkStore,
@@ -5467,8 +5462,6 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
}
Project->TouchOplog(OplogId);
- CidStore& ChunkStore = Project->GetCidStore();
-
if (Method == "import"sv)
{
if (!AreDiskWritesAllowed())
@@ -5550,7 +5543,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
}
Oplog->CaptureAddedAttachments(WriteRawHashes);
- ChunkStore.AddChunks(WriteAttachmentBuffers, WriteRawHashes, CidStore::InsertMode::kCopyOnly);
+ m_CidStore.AddChunks(WriteAttachmentBuffers, WriteRawHashes, CidStore::InsertMode::kCopyOnly);
}
HttpReq.WriteResponse(HttpResponseCode::OK);
return true;
@@ -5723,14 +5716,14 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
ResponseObj.EndArray();
}
- // Ops that have moved chunks to a compressed buffer for storage in ChunkStore have been rewritten with references to the new
- // chunk(s). Make sure we add the chunks to ChunkStore, and do it after we update the oplog so GC doesn't think we have
+ // Ops that have moved chunks to a compressed buffer for storage in m_CidStore have been rewritten with references to the new
+ // chunk(s). Make sure we add the chunks to m_CidStore, and do it after we update the oplog so GC doesn't think we have
// unreferenced chunks.
for (auto It : AddedChunks)
{
const IoHash& RawHash = It.first;
AddedChunk& Chunk = It.second;
- CidStore::InsertResult Result = ChunkStore.AddChunk(Chunk.Buffer, RawHash);
+ CidStore::InsertResult Result = m_CidStore.AddChunk(Chunk.Buffer, RawHash);
if (Result.New)
{
InlinedBytes += Chunk.RawSize;
@@ -5793,7 +5786,7 @@ ProjectStore::Export(Ref<ProjectStore::Project> Project, ProjectStore::Oplog& Op
NiceBytes(MaxBlockSize),
NiceBytes(MaxChunkEmbedSize)));
- RemoteProjectStore::Result Result = SaveOplog(Project->GetCidStore(),
+ RemoteProjectStore::Result Result = SaveOplog(m_CidStore,
*ActualRemoteStore,
*Project.Get(),
*OplogPtr,
@@ -5838,12 +5831,11 @@ ProjectStore::Import(ProjectStore::Project& Project, ProjectStore::Oplog& Oplog,
}
std::shared_ptr<RemoteProjectStore> RemoteStore = std::move(RemoteStoreResult.Store);
RemoteProjectStore::RemoteStoreInfo StoreInfo = RemoteStore->GetInfo();
- CidStore& ChunkStore = Project.GetCidStore();
JobId JobId = m_JobQueue.QueueJob(
fmt::format("Import oplog '{}/{}'", Project.Identifier, Oplog.OplogId()),
[this,
- ChunkStore = &ChunkStore,
+ ChunkStore = &m_CidStore,
ActualRemoteStore = std::move(RemoteStore),
OplogPtr = &Oplog,
Force,
@@ -5855,7 +5847,7 @@ ProjectStore::Import(ProjectStore::Project& Project, ProjectStore::Oplog& Oplog,
ActualRemoteStore->GetInfo().Description));
RemoteProjectStore::Result Result =
- LoadOplog(*ChunkStore, *ActualRemoteStore, *OplogPtr, Force, IgnoreMissingAttachments, CleanOplog, &Context);
+ LoadOplog(m_CidStore, *ActualRemoteStore, *OplogPtr, Force, IgnoreMissingAttachments, CleanOplog, &Context);
auto Response = ConvertResult(Result);
ZEN_INFO("LoadOplog: Status: {} '{}'", ToString(Response.first), Response.second);
if (!IsHttpSuccessCode(Response.first))
@@ -6894,11 +6886,6 @@ namespace testutils {
return BuildChunksRequest<IoHash>(SkipData, "RawHash", Chunks, Ranges, ModTags);
}
- ProjectStore::GetCidStoreFunc SingleChunkStore(CidStore& ChunkStore)
- {
- return [ChunkStore = &ChunkStore](std::string_view) -> CidStore& { return *ChunkStore; };
- }
-
} // namespace testutils
TEST_CASE("project.opkeys")
@@ -6961,18 +6948,13 @@ TEST_CASE("project.store.create")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas", .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::string_view ProjectName("proj1"sv);
std::filesystem::path BasePath = TempDir.Path() / "projectstore";
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root";
std::filesystem::path EngineRootDir = TempDir.Path() / "engine";
std::filesystem::path ProjectRootDir = TempDir.Path() / "game";
@@ -6997,17 +6979,12 @@ TEST_CASE("project.store.lifetimes")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas", .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore";
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root";
std::filesystem::path EngineRootDir = TempDir.Path() / "engine";
std::filesystem::path ProjectRootDir = TempDir.Path() / "game";
@@ -7065,17 +7042,12 @@ TEST_CASE_TEMPLATE("project.store.export",
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas", .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore";
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root";
std::filesystem::path EngineRootDir = TempDir.Path() / "engine";
std::filesystem::path ProjectRootDir = TempDir.Path() / "game";
@@ -7109,7 +7081,7 @@ TEST_CASE_TEMPLATE("project.store.export",
std::shared_ptr<RemoteProjectStore> RemoteStore = CreateFileRemoteStore(Options);
RemoteProjectStore::RemoteStoreInfo StoreInfo = RemoteStore->GetInfo();
- RemoteProjectStore::Result ExportResult = SaveOplog(ChunkStore,
+ RemoteProjectStore::Result ExportResult = SaveOplog(CidStore,
*RemoteStore,
*Project.Get(),
*Oplog,
@@ -7126,7 +7098,7 @@ TEST_CASE_TEMPLATE("project.store.export",
ProjectStore::Oplog* OplogImport = Project->NewOplog("oplog2", {});
CHECK(OplogImport != nullptr);
- RemoteProjectStore::Result ImportResult = LoadOplog(ChunkStore,
+ RemoteProjectStore::Result ImportResult = LoadOplog(CidStore,
*RemoteStore,
*OplogImport,
/*Force*/ false,
@@ -7135,7 +7107,7 @@ TEST_CASE_TEMPLATE("project.store.export",
nullptr);
CHECK(ImportResult.ErrorCode == 0);
- RemoteProjectStore::Result ImportForceResult = LoadOplog(ChunkStore,
+ RemoteProjectStore::Result ImportForceResult = LoadOplog(CidStore,
*RemoteStore,
*OplogImport,
/*Force*/ true,
@@ -7144,7 +7116,7 @@ TEST_CASE_TEMPLATE("project.store.export",
nullptr);
CHECK(ImportForceResult.ErrorCode == 0);
- RemoteProjectStore::Result ImportCleanResult = LoadOplog(ChunkStore,
+ RemoteProjectStore::Result ImportCleanResult = LoadOplog(CidStore,
*RemoteStore,
*OplogImport,
/*Force*/ false,
@@ -7153,7 +7125,7 @@ TEST_CASE_TEMPLATE("project.store.export",
nullptr);
CHECK(ImportCleanResult.ErrorCode == 0);
- RemoteProjectStore::Result ImportForceCleanResult = LoadOplog(ChunkStore,
+ RemoteProjectStore::Result ImportForceCleanResult = LoadOplog(CidStore,
*RemoteStore,
*OplogImport,
/*Force*/ true,
@@ -7173,17 +7145,12 @@ TEST_CASE("project.store.gc")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas", .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore";
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root";
std::filesystem::path EngineRootDir = TempDir.Path() / "engine";
@@ -7379,17 +7346,12 @@ TEST_CASE("project.store.gc.prep")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas", .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore";
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root";
std::filesystem::path EngineRootDir = TempDir.Path() / "engine";
@@ -7432,7 +7394,7 @@ TEST_CASE("project.store.gc.prep")
// Equivalent of a `prep` existance check call
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7446,7 +7408,7 @@ TEST_CASE("project.store.gc.prep")
// If a gc comes in between our prep and op write the chunks will be removed
for (auto Attachment : OpAttachments)
{
- CHECK(!ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(!CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7466,7 +7428,7 @@ TEST_CASE("project.store.gc.prep")
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7480,7 +7442,7 @@ TEST_CASE("project.store.gc.prep")
// Attachments should now be retained
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7494,7 +7456,7 @@ TEST_CASE("project.store.gc.prep")
// Attachments should now be retained across multiple GCs if retain time is still valud
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7506,7 +7468,7 @@ TEST_CASE("project.store.gc.prep")
}
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
Ref<ProjectStore::Project> Project1 = ProjectStore.OpenProject("proj1"sv);
@@ -7523,7 +7485,7 @@ TEST_CASE("project.store.gc.prep")
for (auto Attachment : OpAttachments)
{
- CHECK(!ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(!CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
{
@@ -7556,7 +7518,7 @@ TEST_CASE("project.store.gc.prep")
}
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
Sleep(200);
@@ -7571,7 +7533,7 @@ TEST_CASE("project.store.gc.prep")
}
for (auto Attachment : OpAttachments)
{
- CHECK(ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
// This pass the retention time has expired and the last GC pass cleared the entries
@@ -7585,7 +7547,7 @@ TEST_CASE("project.store.gc.prep")
for (auto Attachment : OpAttachments)
{
- CHECK(!ChunkStore.ContainsChunk(Attachment.second.DecodeRawHash()));
+ CHECK(!CidStore.ContainsChunk(Attachment.second.DecodeRawHash()));
}
}
@@ -7599,17 +7561,12 @@ TEST_CASE("project.store.rpc.getchunks")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas"sv, .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore"sv;
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root"sv;
std::filesystem::path EngineRootDir = TempDir.Path() / "engine"sv;
@@ -8526,17 +8483,12 @@ TEST_CASE("project.store.partial.read")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas"sv, .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore"sv;
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root"sv;
std::filesystem::path EngineRootDir = TempDir.Path() / "engine"sv;
@@ -8709,17 +8661,12 @@ TEST_CASE("project.store.iterateoplog")
auto JobQueue = MakeJobQueue(1, ""sv);
OpenProcessCache ProcessCache;
GcManager Gc;
- CidStore ChunkStore(Gc);
+ CidStore CidStore(Gc);
CidStoreConfiguration CidConfig = {.RootDirectory = TempDir.Path() / "cas"sv, .TinyValueThreshold = 1024, .HugeValueThreshold = 4096};
- ChunkStore.Initialize(CidConfig);
+ CidStore.Initialize(CidConfig);
std::filesystem::path BasePath = TempDir.Path() / "projectstore"sv;
- ProjectStore ProjectStore(testutils::SingleChunkStore(ChunkStore),
- BasePath,
- Gc,
- *JobQueue,
- ProcessCache,
- ProjectStore::Configuration{});
+ ProjectStore ProjectStore(CidStore, BasePath, Gc, *JobQueue, ProcessCache, ProjectStore::Configuration{});
std::filesystem::path RootDir = TempDir.Path() / "root"sv;
std::filesystem::path EngineRootDir = TempDir.Path() / "enginesv";
diff --git a/src/zenserver/projectstore/projectstore.h b/src/zenserver/projectstore/projectstore.h
index eb27665f9..2595d7198 100644
--- a/src/zenserver/projectstore/projectstore.h
+++ b/src/zenserver/projectstore/projectstore.h
@@ -68,9 +68,7 @@ public:
{
};
- typedef std::function<CidStore&(std::string_view Context)> GetCidStoreFunc;
-
- ProjectStore(GetCidStoreFunc&& GetCidStore,
+ ProjectStore(CidStore& Store,
std::filesystem::path BasePath,
GcManager& Gc,
JobQueue& JobQueue,
@@ -328,8 +326,6 @@ public:
Project(ProjectStore* PrjStore, CidStore& Store, std::filesystem::path BasePath);
virtual ~Project();
- CidStore& GetCidStore() { return m_CidStore; };
-
void Read();
void Write();
[[nodiscard]] static bool Exists(const std::filesystem::path& BasePath);
@@ -503,7 +499,7 @@ public:
private:
LoggerRef m_Log;
GcManager& m_Gc;
- GetCidStoreFunc m_GetCidStore;
+ CidStore& m_CidStore;
JobQueue& m_JobQueue;
OpenProcessCache& m_OpenProcessCache;
std::filesystem::path m_ProjectBasePath;