MCPcopy Create free account
hub / github.com/apache/trafficserver / updateHeaderFooter

Method updateHeaderFooter

src/traffic_cache_tool/CacheDefs.cc:293–357  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

291}
292
293Errata
294StripeSM::updateHeaderFooter()
295{
296 Errata zret;
297 this->vol_init_data();
298
299 int64_t hdr_size = this->vol_headerlen();
300 int64_t dir_size = this->vol_dirlen();
301 Bytes footer_offset = Bytes(dir_size - ROUND_TO_STORE_BLOCK(sizeof(StripeMeta)));
302 _meta_pos[A][HEAD] = round_down(_start);
303 _meta_pos[A][FOOT] = round_down(_start + footer_offset);
304 _meta_pos[B][HEAD] = round_down(this->_start + Bytes(dir_size));
305 _meta_pos[B][FOOT] = round_down(this->_start + Bytes(dir_size) + footer_offset);
306 std::cout << "updating header " << _meta_pos[0][0] << std::endl;
307 std::cout << "updating header " << _meta_pos[0][1] << std::endl;
308 std::cout << "updating header " << _meta_pos[1][0] << std::endl;
309 std::cout << "updating header " << _meta_pos[1][1] << std::endl;
310 InitializeMeta();
311
312 if (!OPEN_RW_FLAG) {
313 zret.note("Writing Not Enabled.. Please use --write to enable writing to disk");
314 return zret;
315 }
316
317 char *meta_t = static_cast<char *>(ats_memalign(ats_pagesize(), dir_size));
318 // copy headers
319 for (auto i : {A, B}) {
320 // copy header
321 memcpy(meta_t, &_meta[i][HEAD], sizeof(StripeMeta));
322 // copy freelist
323 memcpy(meta_t + sizeof(StripeMeta) - sizeof(uint16_t), this->freelist, this->_segments * sizeof(uint16_t));
324
325 ssize_t n = pwrite(_span->_fd, meta_t, hdr_size, _meta_pos[i][HEAD]);
326 if (n < hdr_size) {
327 zret = swoc::Errata(make_errno_code(), "Failed to write stripe header ");
328 std::cout << "problem writing header to disk: " << strerror(errno) << ":" << " " << n << "<" << hdr_size << std::endl;
329 ats_free(meta_t);
330 return zret;
331 }
332 // copy dir entries
333 dir_size = dir_size - hdr_size - ROUND_TO_STORE_BLOCK(sizeof(StripeMeta));
334 memcpy(meta_t, (char *)dir, dir_size);
335 n = pwrite(_span->_fd, meta_t, dir_size, _meta_pos[i][HEAD] + hdr_size); //
336 if (n < dir_size) {
337 zret = Errata(make_errno_code(), "Failed to write stripe header ");
338 std::cout << "problem writing dir to disk: " << strerror(errno) << ":" << " " << n << "<" << dir_size << std::endl;
339 ats_free(meta_t);
340 return zret;
341 }
342
343 // copy footer,
344 memcpy(meta_t, &_meta[i][FOOT], sizeof(StripeMeta));
345
346 int64_t footer_size = ROUND_TO_STORE_BLOCK(sizeof(StripeMeta));
347 n = pwrite(_span->_fd, meta_t, footer_size, _meta_pos[i][FOOT]);
348 if (n < footer_size) {
349 zret = Errata(make_errno_code(), "Failed to write stripe header ");
350 std::cout << "problem writing footer to disk: " << strerror(errno) << ":" << " " << n << "<" << footer_size << std::endl;

Callers 1

allocateSpanMethod · 0.80

Calls 11

vol_init_dataMethod · 0.95
vol_headerlenMethod · 0.95
vol_dirlenMethod · 0.95
round_downFunction · 0.85
ats_memalignFunction · 0.85
ats_pagesizeFunction · 0.85
ErrataClass · 0.85
make_errno_codeFunction · 0.85
ats_freeFunction · 0.85
memcpyFunction · 0.50
noteMethod · 0.45

Tested by

no test coverage detected