GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/catalog_downloader.cc
Date: 2025-07-13 02:35:07
Exec Total Coverage
Lines: 0 30 0.0%
Branches: 0 32 0.0%

Line Branch Exec Source
1 #include "catalog_downloader.h"
2
3 int kCatalogDownloadMultiplier = 32;
4
5 CatalogItem::CatalogItem(const shash::Any &hash) : hash_(hash) { }
6
7 void TaskCatalogDownload::Process(CatalogItem *input) {
8 std::string const catalog_path;
9 shash::Any const catalog_hash;
10 // will PANIC if download failed
11 // catalog_mgr_->LoadCatalog(PathString("") /* not used */, *input->GetHash(),
12 // &catalog_path, &catalog_hash, NULL);
13 catalog::CatalogContext context(*input->GetHash(), PathString(catalog_path));
14 catalog_mgr_->LoadCatalogByHash(&context);
15 NotifyListeners(
16 CatalogDownloadResult(catalog_path, input->GetHash()->ToString()));
17 tube_counter_->PopFront(); // pop after calling callback as callback could
18 // enqueue additional items
19 }
20
21 CatalogDownloadPipeline::CatalogDownloadPipeline(
22 catalog::SimpleCatalogManager *catalog_mgr)
23 : spawned_(false), catalog_mgr_(catalog_mgr) {
24 const unsigned int nfork_base = 1;
25
26 // spawn a bit more workers as this is just download task
27 for (unsigned i = 0; i < nfork_base * kCatalogDownloadMultiplier; ++i) {
28 TaskCatalogDownload *task = new TaskCatalogDownload(
29 catalog_mgr_, &tube_input_, &tube_counter_);
30 task->RegisterListener(&CatalogDownloadPipeline::OnFileProcessed, this);
31 tasks_download_.TakeConsumer(task);
32 }
33 }
34
35 CatalogDownloadPipeline::~CatalogDownloadPipeline() {
36 if (spawned_) {
37 tasks_download_.Terminate();
38 }
39 }
40
41 void CatalogDownloadPipeline::OnFileProcessed(
42 const CatalogDownloadResult &catalog_download_result) {
43 NotifyListeners(catalog_download_result);
44 }
45
46 void CatalogDownloadPipeline::Process(const shash::Any &catalog_hash) {
47 CatalogItem *catalog_item = new CatalogItem(catalog_hash);
48 tube_counter_.EnqueueBack(catalog_item);
49 tube_input_.EnqueueBack(catalog_item);
50 }
51
52 void CatalogDownloadPipeline::Spawn() {
53 tasks_download_.Spawn();
54 spawned_ = true;
55 }
56
57 void CatalogDownloadPipeline::WaitFor() { tube_counter_.Wait(); }
58