]>
git.proxmox.com Git - ceph.git/blob - ceph/src/tools/RadosDump.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 * Ceph - scalable distributed file system
6 * Copyright (C) 2015 Red Hat
8 * This is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License version 2.1, as published by the Free Software
11 * Foundation. See file COPYING.
15 #include "RadosDump.h"
17 int RadosDump::read_super()
20 auto ebliter
= ebl
.cbegin();
23 bytes
= ebl
.read_fd(file_fd
, super_header::FIXED_LENGTH
);
24 if ((size_t)bytes
!= super_header::FIXED_LENGTH
) {
25 cerr
<< "Unexpected EOF" << std::endl
;
35 int RadosDump::get_header(header
*h
)
40 auto ebliter
= ebl
.cbegin();
43 bytes
= ebl
.read_fd(file_fd
, sh
.header_size
);
44 if ((size_t)bytes
!= sh
.header_size
) {
45 cerr
<< "Unexpected EOF" << std::endl
;
54 int RadosDump::get_footer(footer
*f
)
56 ceph_assert(f
!= NULL
);
59 auto ebliter
= ebl
.cbegin();
62 bytes
= ebl
.read_fd(file_fd
, sh
.footer_size
);
63 if ((size_t)bytes
!= sh
.footer_size
) {
64 cerr
<< "Unexpected EOF" << std::endl
;
70 if (f
->magic
!= endmagic
) {
71 cerr
<< "Bad footer magic" << std::endl
;
78 int RadosDump::read_section(sectiontype_t
*type
, bufferlist
*bl
)
83 int ret
= get_header(&hdr
);
90 bytes
= bl
->read_fd(file_fd
, hdr
.size
);
91 if (bytes
!= hdr
.size
) {
92 cerr
<< "Unexpected EOF" << std::endl
;
98 ret
= get_footer(&ft
);
107 int RadosDump::skip_object(bufferlist
&bl
)
113 int ret
= read_section(&type
, &ebl
);
117 if (type
>= END_OF_TYPES
) {
118 cout
<< "Skipping unknown object section type" << std::endl
;
127 cerr
<< "Skip type " << (int)type
<< std::endl
;
130 case TYPE_OBJECT_END
:
134 cerr
<< "Can't skip unknown type: " << type
<< std::endl
;
141 //Write super_header with its fixed 16 byte length
142 void RadosDump::write_super()
152 header
hdr(TYPE_NONE
, 0);
155 sh
.magic
= super_header::super_magic
;
156 sh
.version
= super_header::super_ver
;
157 sh
.header_size
= superbl
.length();
160 sh
.footer_size
= superbl
.length();
164 ceph_assert(super_header::FIXED_LENGTH
== superbl
.length());
165 superbl
.write_fd(file_fd
);