]>
git.proxmox.com Git - ceph.git/blob - ceph/src/os/bluestore/bluefs_types.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
4 #include "bluefs_types.h"
5 #include "common/Formatter.h"
6 #include "include/uuid.h"
7 #include "include/stringify.h"
10 void bluefs_extent_t::dump(Formatter
*f
) const
12 f
->dump_unsigned("offset", offset
);
13 f
->dump_unsigned("length", length
);
14 f
->dump_unsigned("bdev", bdev
);
17 void bluefs_extent_t::generate_test_instances(list
<bluefs_extent_t
*>& ls
)
19 ls
.push_back(new bluefs_extent_t
);
20 ls
.push_back(new bluefs_extent_t
);
21 ls
.back()->offset
= 1;
22 ls
.back()->length
= 2;
26 ostream
& operator<<(ostream
& out
, const bluefs_extent_t
& e
)
28 return out
<< (int)e
.bdev
<< ":0x" << std::hex
<< e
.offset
<< "+" << e
.length
34 void bluefs_super_t::encode(bufferlist
& bl
) const
36 ENCODE_START(1, 1, bl
);
38 ::encode(osd_uuid
, bl
);
39 ::encode(version
, bl
);
40 ::encode(block_size
, bl
);
41 ::encode(log_fnode
, bl
);
45 void bluefs_super_t::decode(bufferlist::iterator
& p
)
49 ::decode(osd_uuid
, p
);
51 ::decode(block_size
, p
);
52 ::decode(log_fnode
, p
);
56 void bluefs_super_t::dump(Formatter
*f
) const
58 f
->dump_stream("uuid") << uuid
;
59 f
->dump_stream("osd_uuid") << osd_uuid
;
60 f
->dump_unsigned("version", version
);
61 f
->dump_unsigned("block_size", block_size
);
62 f
->dump_object("log_fnode", log_fnode
);
65 void bluefs_super_t::generate_test_instances(list
<bluefs_super_t
*>& ls
)
67 ls
.push_back(new bluefs_super_t
);
68 ls
.push_back(new bluefs_super_t
);
69 ls
.back()->version
= 1;
70 ls
.back()->block_size
= 4096;
73 ostream
& operator<<(ostream
& out
, const bluefs_super_t
& s
)
75 return out
<< "super(uuid " << s
.uuid
76 << " osd " << s
.osd_uuid
78 << " block_size 0x" << std::hex
<< s
.block_size
79 << " log_fnode 0x" << s
.log_fnode
85 mempool::bluefs::vector
<bluefs_extent_t
>::iterator
bluefs_fnode_t::seek(
86 uint64_t offset
, uint64_t *x_off
)
88 auto p
= extents
.begin();
89 while (p
!= extents
.end()) {
90 if ((int64_t) offset
>= p
->length
) {
101 void bluefs_fnode_t::dump(Formatter
*f
) const
103 f
->dump_unsigned("ino", ino
);
104 f
->dump_unsigned("size", size
);
105 f
->dump_stream("mtime") << mtime
;
106 f
->dump_unsigned("prefer_bdev", prefer_bdev
);
107 f
->open_array_section("extents");
108 for (auto& p
: extents
)
109 f
->dump_object("extent", p
);
113 void bluefs_fnode_t::generate_test_instances(list
<bluefs_fnode_t
*>& ls
)
115 ls
.push_back(new bluefs_fnode_t
);
116 ls
.push_back(new bluefs_fnode_t
);
117 ls
.back()->ino
= 123;
118 ls
.back()->size
= 1048576;
119 ls
.back()->mtime
= utime_t(123,45);
120 ls
.back()->extents
.push_back(bluefs_extent_t(0, 1048576, 4096));
121 ls
.back()->prefer_bdev
= 1;
124 ostream
& operator<<(ostream
& out
, const bluefs_fnode_t
& file
)
126 return out
<< "file(ino " << file
.ino
127 << " size 0x" << std::hex
<< file
.size
<< std::dec
128 << " mtime " << file
.mtime
129 << " bdev " << (int)file
.prefer_bdev
130 << " extents " << file
.extents
135 // bluefs_transaction_t
137 void bluefs_transaction_t::encode(bufferlist
& bl
) const
139 uint32_t crc
= op_bl
.crc32c(-1);
140 ENCODE_START(1, 1, bl
);
148 void bluefs_transaction_t::decode(bufferlist::iterator
& p
)
157 uint32_t actual
= op_bl
.crc32c(-1);
159 throw buffer::malformed_input("bad crc " + stringify(actual
)
160 + " expected " + stringify(crc
));
163 void bluefs_transaction_t::dump(Formatter
*f
) const
165 f
->dump_stream("uuid") << uuid
;
166 f
->dump_unsigned("seq", seq
);
167 f
->dump_unsigned("op_bl_length", op_bl
.length());
168 f
->dump_unsigned("crc", op_bl
.crc32c(-1));
171 void bluefs_transaction_t::generate_test_instance(
172 list
<bluefs_transaction_t
*>& ls
)
174 ls
.push_back(new bluefs_transaction_t
);
175 ls
.push_back(new bluefs_transaction_t
);
176 ls
.back()->op_init();
177 ls
.back()->op_alloc_add(0, 0, 123123211);
178 ls
.back()->op_alloc_rm(1, 0, 123);
179 ls
.back()->op_dir_create("dir");
180 ls
.back()->op_dir_create("dir2");
181 bluefs_fnode_t fnode
;
183 ls
.back()->op_file_update(fnode
);
184 ls
.back()->op_dir_link("dir", "file1", 2);
185 ls
.back()->op_dir_unlink("dir", "file1");
186 ls
.back()->op_file_remove(2);
187 ls
.back()->op_dir_remove("dir2");
190 ostream
& operator<<(ostream
& out
, const bluefs_transaction_t
& t
)
192 return out
<< "txn(seq " << t
.seq
193 << " len 0x" << std::hex
<< t
.op_bl
.length()
194 << " crc 0x" << t
.op_bl
.crc32c(-1)