GCC Code Coverage Report


Directory: cvmfs/
File: cvmfs/receiver/params.cc
Date: 2024-04-28 02:33:07
Exec Total Coverage
Lines: 0 84 0.0%
Branches: 0 188 0.0%

Line Branch Exec Source
1 /**
2 * This file is part of the CernVM File System.
3 */
4
5 #include "params.h"
6
7 #include <vector>
8
9 #include "options.h"
10 #include "util/string.h"
11
12 namespace receiver {
13
14 std::string GetSpoolerTempDir(const std::string& spooler_config) {
15 const std::vector<std::string> tokens = SplitString(spooler_config, ',');
16 assert(tokens.size() == 3);
17 return tokens[1];
18 }
19
20 bool GetParamsFromFile(const std::string& repo_name, Params* params) {
21 const std::string repo_config_file =
22 "/etc/cvmfs/repositories.d/" + repo_name + "/server.conf";
23
24 SimpleOptionsParser parser = SimpleOptionsParser(
25 new DefaultOptionsTemplateManager(repo_name));
26 if (!parser.TryParsePath(repo_config_file)) {
27 LogCvmfs(kLogReceiver, kLogSyslogErr,
28 "Could not parse repository configuration: %s.",
29 repo_config_file.c_str());
30 return false;
31 }
32
33 if (!parser.GetValue("CVMFS_STRATUM0", &params->stratum0)) {
34 LogCvmfs(kLogReceiver, kLogSyslogErr,
35 "Missing parameter %s in repository configuration file.",
36 "CVMFS_STRATUM0");
37 return false;
38 }
39
40 if (parser.IsDefined("CVMFS_SERVER_PROXY")) {
41 parser.GetValue("CVMFS_SERVER_PROXY", &params->proxy);
42 }
43
44 // Note: TEST_CVMFS_RECEIVER_UPSTREAM_STORAGE is used to provide an
45 // an overriding value for CVMFS_UPSTREAM_STORAGE, to be used
46 // only by the cvmfs_receiver application. Useful for testing
47 // when the release manager and the repository gateway are
48 // running on the same machine.
49 if (parser.IsDefined("TEST_CVMFS_RECEIVER_UPSTREAM_STORAGE")) {
50 parser.GetValue("TEST_CVMFS_RECEIVER_UPSTREAM_STORAGE",
51 &params->spooler_configuration);
52 } else {
53 if (!parser.GetValue("CVMFS_UPSTREAM_STORAGE",
54 &params->spooler_configuration)) {
55 LogCvmfs(kLogReceiver, kLogSyslogErr,
56 "Missing parameter %s in repository configuration file.",
57 "CVMFS_UPSTREAM_STORAGE");
58 return false;
59 }
60 }
61
62
63 std::string hash_algorithm_str;
64 if (!parser.GetValue("CVMFS_HASH_ALGORITHM", &hash_algorithm_str)) {
65 LogCvmfs(kLogReceiver, kLogSyslogErr,
66 "Missing parameter %s in repository configuration file.",
67 "CVMFS_HASH_ALGORITHM");
68 return false;
69 }
70 params->hash_alg = shash::ParseHashAlgorithm(hash_algorithm_str);
71 params->hash_alg_str = hash_algorithm_str;
72
73 // The receiver does not store files, only catalogs.
74 // We can safely hard-code the following options
75 params->generate_legacy_bulk_chunks = false;
76 params->compression_alg = zlib::kZlibDefault;
77
78 std::string use_chunking_str;
79 if (!parser.GetValue("CVMFS_USE_FILE_CHUNKING", &use_chunking_str)) {
80 LogCvmfs(kLogReceiver, kLogSyslogErr,
81 "Missing parameter %s in repository configuration file.",
82 "CVMFS_USE_FILE_CHUNKING");
83 return false;
84 }
85 params->use_file_chunking = parser.IsOn(use_chunking_str);
86
87 std::string min_chunk_size_str;
88 if (!parser.GetValue("CVMFS_MIN_CHUNK_SIZE", &min_chunk_size_str)) {
89 LogCvmfs(kLogReceiver, kLogSyslogErr,
90 "Missing parameter %s in repository configuration file.",
91 "CVMFS_MIN_CHUNK_SIZE");
92 return false;
93 }
94 params->min_chunk_size = String2Uint64(min_chunk_size_str);
95
96 std::string avg_chunk_size_str;
97 if (!parser.GetValue("CVMFS_AVG_CHUNK_SIZE", &avg_chunk_size_str)) {
98 LogCvmfs(kLogReceiver, kLogSyslogErr,
99 "Missing parameter %s in repository configuration file.",
100 "CVMFS_AVG_CHUNK_SIZE");
101 return false;
102 }
103 params->avg_chunk_size = String2Uint64(avg_chunk_size_str);
104
105 std::string max_chunk_size_str;
106 if (!parser.GetValue("CVMFS_MAX_CHUNK_SIZE", &max_chunk_size_str)) {
107 LogCvmfs(kLogReceiver, kLogSyslogErr,
108 "Missing parameter %s in repository configuration file.",
109 "CVMFS_MAX_CHUNK_SIZE");
110 return false;
111 }
112 params->max_chunk_size = String2Uint64(max_chunk_size_str);
113
114 std::string garbage_collection_str;
115 if (!parser.GetValue("CVMFS_GARBAGE_COLLECTION", &garbage_collection_str)) {
116 LogCvmfs(kLogReceiver, kLogSyslogErr,
117 "Missing parameter %s in repository configuration file.",
118 "CVMFS_GARBAGE_COLLECTION");
119 return false;
120 }
121 params->garbage_collection = parser.IsOn(garbage_collection_str);
122
123 std::string use_autocatalogs_str;
124 if (!parser.GetValue("CVMFS_AUTOCATALOGS", &use_autocatalogs_str)) {
125 LogCvmfs(kLogReceiver, kLogSyslogErr,
126 "Missing parameter %s in repository configuration file.",
127 "CVMFS_AUTOCATALOGS");
128 return false;
129 }
130 params->use_autocatalogs = parser.IsOn(use_autocatalogs_str);
131
132 std::string max_weight_str;
133 if (parser.GetValue("CVMFS_AUTOCATALOGS_MAX_WEIGHT", &max_weight_str)) {
134 params->max_weight = String2Uint64(max_weight_str);
135 }
136
137 std::string min_weight_str;
138 if (parser.GetValue("CVMFS_AUTOCATALOGS_MIN_WEIGHT", &min_weight_str)) {
139 params->min_weight = String2Uint64(min_weight_str);
140 }
141
142 std::string enforce_limits_str;
143 if (parser.GetValue("CVMFS_ENFORCE_LIMITS", &enforce_limits_str)) {
144 params->enforce_limits = parser.IsOn(enforce_limits_str);
145 }
146
147 // TODO(dwd): the next 3 limit variables should take defaults from
148 // SyncParameters
149 params->nested_kcatalog_limit = 0;
150 std::string nested_kcatalog_limit_str;
151 if (parser.GetValue("CVMFS_NESTED_KCATALOG_LIMIT",
152 &nested_kcatalog_limit_str)) {
153 params->nested_kcatalog_limit = String2Uint64(nested_kcatalog_limit_str);
154 }
155
156 params->root_kcatalog_limit = 0;
157 std::string root_kcatalog_limit_str;
158 if (parser.GetValue("CVMFS_ROOT_KCATALOG_LIMIT", &root_kcatalog_limit_str)) {
159 params->root_kcatalog_limit = String2Uint64(root_kcatalog_limit_str);
160 }
161
162 params->file_mbyte_limit = 0;
163 std::string file_mbyte_limit_str;
164 if (parser.GetValue("CVMFS_FILE_MBYTE_LIMIT", &file_mbyte_limit_str)) {
165 params->file_mbyte_limit = String2Uint64(file_mbyte_limit_str);
166 }
167
168 std::string upload_stats_db_str;
169 if (parser.GetValue("CVMFS_UPLOAD_STATS_DB", &upload_stats_db_str)) {
170 params->upload_stats_db = parser.IsOn(upload_stats_db_str);
171 } else {
172 params->upload_stats_db = false;
173 }
174
175 return true;
176 }
177
178 } // namespace receiver
179