GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/catalog_downloader.cc
Date: 2025-06-22 02:36:02
Exec Total Coverage
Lines: 0 31 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(), &catalog_path, &catalog_hash, NULL);
12 catalog::CatalogContext context(*input->GetHash(), PathString(catalog_path));
13 catalog_mgr_->LoadCatalogByHash(&context);
14 NotifyListeners(CatalogDownloadResult(catalog_path, input->GetHash()->ToString()));
15 tube_counter_->PopFront(); // pop after calling callback as callback could enqueue additional items
16 }
17
18 CatalogDownloadPipeline::CatalogDownloadPipeline(
19 catalog::SimpleCatalogManager *catalog_mgr)
20 : spawned_(false)
21 , catalog_mgr_(catalog_mgr)
22 {
23 const unsigned int nfork_base = 1;
24
25 // spawn a bit more workers as this is just download task
26 for (unsigned i = 0; i < nfork_base * kCatalogDownloadMultiplier; ++i) {
27 TaskCatalogDownload *task =
28 new TaskCatalogDownload(catalog_mgr_, &tube_input_, &tube_counter_);
29 task->RegisterListener(&CatalogDownloadPipeline::OnFileProcessed, this);
30 tasks_download_.TakeConsumer(task);
31 }
32 }
33
34 CatalogDownloadPipeline::~CatalogDownloadPipeline() {
35 if (spawned_) {
36 tasks_download_.Terminate();
37 }
38 }
39
40 void CatalogDownloadPipeline::OnFileProcessed(
41 const CatalogDownloadResult &catalog_download_result)
42 {
43 NotifyListeners(catalog_download_result);
44 }
45
46 void CatalogDownloadPipeline::Process(
47 const shash::Any &catalog_hash)
48 {
49 CatalogItem *catalog_item = new CatalogItem(catalog_hash);
50 tube_counter_.EnqueueBack(catalog_item);
51 tube_input_.EnqueueBack(catalog_item);
52 }
53
54 void CatalogDownloadPipeline::Spawn() {
55 tasks_download_.Spawn();
56 spawned_ = true;
57 }
58
59 void CatalogDownloadPipeline::WaitFor() {
60 tube_counter_.Wait();
61 }
62