Collection *coll,
uint64_t offset,
uint64_t length,
- vector<bluestore_pextent_t> *r)
+ PExtentVector *r)
{
- vector<bluestore_pextent_t> logical;
+ PExtentVector logical;
ref_map.put(offset, length, &logical);
r->clear();
// cut it out of extents
struct vecbuilder {
- vector<bluestore_pextent_t> v;
+ PExtentVector v;
uint64_t invalid = 0;
void add_invalid(uint64_t length) {
return 0;
}
-int BlueStore::_balance_bluefs_freespace(vector<bluestore_pextent_t> *extents)
+int BlueStore::_balance_bluefs_freespace(PExtentVector *extents)
{
int ret = 0;
assert(bluefs);
}
void BlueStore::_commit_bluefs_freespace(
- const vector<bluestore_pextent_t>& bluefs_gift_extents)
+ const PExtentVector& bluefs_gift_extents)
{
dout(10) << __func__ << dendl;
for (auto& p : bluefs_gift_extents) {
int BlueStore::_fsck_check_extents(
const ghobject_t& oid,
- const vector<bluestore_pextent_t>& extents,
+ const PExtentVector& extents,
bool compressed,
boost::dynamic_bitset<> &used_blocks,
store_statfs_t& expected_statfs)
<< sbi.ref_map << dendl;
++errors;
}
- vector<bluestore_pextent_t> extents;
+ PExtentVector extents;
for (auto &r : shared_blob.ref_map.ref_map) {
extents.emplace_back(bluestore_pextent_t(r.first, r.second.length));
}
int r = blob->verify_csum(blob_xoffset, bl, &bad, &bad_csum);
if (r < 0) {
if (r == -1) {
- vector<bluestore_pextent_t> pex;
+ PExtentVector pex;
int r = blob->map(
bad,
blob->get_csum_chunk_size(),
}
}
- vector<bluestore_pextent_t> bluefs_gift_extents;
+ PExtentVector bluefs_gift_extents;
if (bluefs) {
int r = _balance_bluefs_freespace(&bluefs_gift_extents);
assert(r >= 0);
dout(20) << __func__ << " lex_old " << lo << dendl;
BlobRef b = lo.blob;
const bluestore_blob_t& blob = b->get_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
if (b->put_ref(c.get(), lo.blob_offset, lo.length, &r)) {
if (blob.is_compressed()) {
txc->statfs_delta.compressed() -= blob.get_compressed_payload_length();
if (!r.empty()) {
dout(20) << __func__ << " blob release " << r << dendl;
if (blob.is_shared()) {
- vector<bluestore_pextent_t> final;
+ PExtentVector final;
if (!b->shared_blob->loaded) {
c->load_shared_blob(b->shared_blob);
}
for (auto e : r) {
- vector<bluestore_pextent_t> cur;
+ PExtentVector cur;
b->shared_blob->shared_blob.ref_map.put(e.offset, e.length, &cur);
final.insert(final.end(), cur.begin(), cur.end());
}
void get_ref(uint64_t offset, uint64_t length);
/// put logical references, and get back any released extents
bool put_ref(Collection *coll, uint64_t offset, uint64_t length,
- vector<bluestore_pextent_t> *r);
+ PExtentVector *r);
/// pass references for specific range to other blob
void pass_ref(Blob* other, uint64_t src_offset, uint64_t length, uint64_t dest_offset);
int _open_super_meta();
int _reconcile_bluefs_freespace();
- int _balance_bluefs_freespace(vector<bluestore_pextent_t> *extents);
- void _commit_bluefs_freespace(const vector<bluestore_pextent_t>& extents);
+ int _balance_bluefs_freespace(PExtentVector *extents);
+ void _commit_bluefs_freespace(const PExtentVector& extents);
CollectionRef _get_collection(const coll_t& cid);
void _queue_reap_collection(CollectionRef& c);
int _fsck_check_extents(
const ghobject_t& oid,
- const vector<bluestore_pextent_t>& extents,
+ const PExtentVector& extents,
bool compressed,
boost::dynamic_bitset<> &used_blocks,
store_statfs_t& expected_statfs);
void bluestore_extent_ref_map_t::put(
uint64_t offset, uint32_t length,
- vector<bluestore_pextent_t> *release)
+ PExtentVector *release)
{
auto p = ref_map.lower_bound(offset);
if (p == ref_map.end() || p->first > offset) {
ostream& operator<<(ostream& out, const bluestore_pextent_t& o);
+typedef mempool::bluestore_meta_other::vector<bluestore_pextent_t> PExtentVector;
+
template<>
-struct denc_traits<vector<bluestore_pextent_t>> {
+struct denc_traits<PExtentVector> {
enum { supported = true };
enum { bounded = false };
enum { featured = false };
- static void bound_encode(const vector<bluestore_pextent_t>& v, size_t& p) {
+ static void bound_encode(const PExtentVector& v, size_t& p) {
p += sizeof(uint32_t);
size_t per = 0;
denc(*(bluestore_pextent_t*)nullptr, per);
p += per * v.size();
}
- static void encode(const vector<bluestore_pextent_t>& v,
+ static void encode(const PExtentVector& v,
bufferlist::contiguous_appender& p) {
denc_varint(v.size(), p);
for (auto& i : v) {
denc(i, p);
}
}
- static void decode(vector<bluestore_pextent_t>& v, bufferptr::iterator& p) {
+ static void decode(PExtentVector& v, bufferptr::iterator& p) {
unsigned num;
denc_varint(num, p);
v.clear();
}
void get(uint64_t offset, uint32_t len);
- void put(uint64_t offset, uint32_t len, vector<bluestore_pextent_t> *release);
+ void put(uint64_t offset, uint32_t len, PExtentVector *release);
bool contains(uint64_t offset, uint32_t len) const;
bool intersects(uint64_t offset, uint32_t len) const;
};
static string get_flags_string(unsigned flags);
- vector<bluestore_pextent_t> extents;///< raw data position on device
+
+ PExtentVector extents; ///< raw data position on device
uint32_t compressed_length_orig = 0;///< original length of compressed blob if any
uint32_t compressed_length = 0; ///< compressed length if any
uint32_t flags = 0; ///< FLAG_*
} type_t;
__u8 op = 0;
- vector<bluestore_pextent_t> extents;
+ PExtentVector extents;
bufferlist data;
DENC(bluestore_wal_op_t, v, p) {
TEST(bluestore_extent_ref_map_t, put)
{
bluestore_extent_ref_map_t m;
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
m.get(10, 30);
m.put(10, 30, &r);
cout << m << " " << r << std::endl;
b.get_ref(0, 0x1200);
b.get_ref(0xae00, 0x4200);
cout << b << std::endl;
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.put_ref(&coll, 0, 0x1200, &r);
cout << " r " << r << std::endl;
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(0, mas*2));
B.get_ref(0, mas*2);
ASSERT_TRUE(b.is_allocated(0, mas*2));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(123, mas*2));
B.get_ref(0, mas*2);
B.put_ref(&coll, 0, mas, &r);
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas));
b.extents.push_back(bluestore_pextent_t(2, mas));
b.extents.push_back(bluestore_pextent_t(3, mas));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas));
b.extents.push_back(bluestore_pextent_t(2, mas));
b.extents.push_back(bluestore_pextent_t(3, mas));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas * 6));
B.get_ref(0, mas*6);
B.put_ref(&coll, mas, mas, &r);
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas * 4));
b.extents.push_back(bluestore_pextent_t(2, mas * 4));
b.extents.push_back(bluestore_pextent_t(3, mas * 4));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas * 4));
b.extents.push_back(bluestore_pextent_t(2, mas * 4));
b.extents.push_back(bluestore_pextent_t(3, mas * 4));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas * 4));
b.extents.push_back(bluestore_pextent_t(2, mas * 4));
b.extents.push_back(bluestore_pextent_t(3, mas * 4));
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(1, mas * 8));
B.get_ref(0, mas*8);
B.put_ref(&coll, 0, mas, &r);
B.shared_blob = new BlueStore::SharedBlob(nullptr);
B.shared_blob->get(); // hack to avoid dtor from running
bluestore_blob_t& b = B.dirty_blob();
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
b.extents.push_back(bluestore_pextent_t(0, mas*4));
b.init_csum(Checksummer::CSUM_CRC32C, 14, mas * 4);
B.get_ref(0, mas*4);
b.init_csum(Checksummer::CSUM_CRC32C, 12, 0x1e000);
cout << "before: " << B << std::endl;
- vector<bluestore_pextent_t> r;
+ PExtentVector r;
B.put_ref(&coll, 0x1800, 0x2000, &r);
cout << "after: " << B << std::endl;
cout << "r " << r << std::endl;