{
if (p == ls->end())
throw end_of_buffer();
- return p->get_raw() == other.get_raw();
+ return p->_raw == other._raw;
}
// copy data out.
void buffer::list::reassign_to_mempool(int pool)
{
for (auto& p : _buffers) {
- p.get_raw()->reassign_to_mempool(pool);
+ p._raw->reassign_to_mempool(pool);
}
}
void buffer::list::try_assign_to_mempool(int pool)
{
for (auto& p : _buffers) {
- p.get_raw()->try_assign_to_mempool(pool);
+ p._raw->try_assign_to_mempool(pool);
}
}
std::vector<const raw*> raw_vec;
raw_vec.reserve(_buffers.size());
for (const auto& p : _buffers)
- raw_vec.push_back(p.get_raw());
+ raw_vec.push_back(p._raw);
std::sort(raw_vec.begin(), raw_vec.end());
uint64_t total = 0;
auto curbuf_prev = bl._buffers.before_begin();
while (curbuf != bl._buffers.end()) {
- const auto* const raw = curbuf->get_raw();
+ const auto* const raw = curbuf->_raw;
if (unlikely(raw && !raw->is_shareable())) {
auto* clone = ptr_node::copy_hypercombined(*curbuf);
curbuf = bl._buffers.erase_after_and_dispose(curbuf_prev);
ceph_assert(len+off <= bp.length());
if (!_buffers.empty()) {
ptr &l = _buffers.back();
- if (l.get_raw() == bp.get_raw() &&
- l.end() == bp.start() + off) {
+ if (l._raw == bp._raw && l.end() == bp.start() + off) {
// yay contiguous with tail bp!
l.set_length(l.length()+len);
_len += len;
for (const auto& node : _buffers) {
if (node.length()) {
- raw* const r = node.get_raw();
+ raw* const r = node._raw;
pair<size_t, size_t> ofs(node.offset(), node.offset() + node.length());
pair<uint32_t, uint32_t> ccrc;
if (r->get_crc(ofs, &ccrc)) {
void buffer::list::invalidate_crc()
{
for (const auto& node : _buffers) {
- raw* const r = node.get_raw();
- if (r) {
- r->invalidate_crc();
+ if (node._raw) {
+ node._raw->invalidate_crc();
}
}
}
buffer::ptr_node* const delete_this)
{
const bool is_hypercombined = static_cast<void*>(delete_this) == \
- static_cast<void*>(&delete_this->get_raw()->bptr_storage);
+ static_cast<void*>(&delete_this->_raw->bptr_storage);
if (is_hypercombined) {
ceph_assert_always("hypercombining is currently disabled" == nullptr);
delete_this->~ptr_node();
// FIXME: we don't currently hypercombine buffers due to crashes
// observed in the rados suite. After fixing we'll use placement
// new to create ptr_node on buffer::raw::bptr_storage.
- auto raw_new = copy_this.get_raw()->clone();
+ auto raw_new = copy_this._raw->clone();
return new ptr_node(copy_this, std::move(raw_new));
}
buffer::ptr_node* buffer::ptr_node::cloner::operator()(
const buffer::ptr_node& clone_this)
{
- const raw* const raw_this = clone_this.get_raw();
+ const raw* const raw_this = clone_this._raw;
if (likely(!raw_this || raw_this->is_shareable())) {
return new ptr_node(clone_this);
} else {
static char cmd[128];
+struct instrumented_bptr : public ceph::buffer::ptr {
+ const ceph::buffer::raw* get_raw() const {
+ return _raw;
+ }
+};
+
TEST(Buffer, constructors) {
unsigned len = 17;
//
TEST(BufferRaw, ostream) {
bufferptr ptr(1);
std::ostringstream stream;
- stream << *ptr.get_raw();
+ stream << *static_cast<instrumented_bptr&>(ptr).get_raw();
EXPECT_GT(stream.str().size(), stream.str().find("buffer::raw("));
EXPECT_GT(stream.str().size(), stream.str().find("len 1 nref 1)"));
}
bufferptr original(str.c_str(), len);
bufferptr ptr(original);
EXPECT_TRUE(ptr.have_raw());
- EXPECT_EQ(original.get_raw(), ptr.get_raw());
+ EXPECT_EQ(static_cast<instrumented_bptr&>(original).get_raw(),
+ static_cast<instrumented_bptr&>(ptr).get_raw());
EXPECT_EQ(2, ptr.raw_nref());
EXPECT_EQ(0, ::memcmp(original.c_str(), ptr.c_str(), len));
}
bufferptr original(str.c_str(), len);
bufferptr ptr(original, 0, 0);
EXPECT_TRUE(ptr.have_raw());
- EXPECT_EQ(original.get_raw(), ptr.get_raw());
+ EXPECT_EQ(static_cast<instrumented_bptr&>(original).get_raw(),
+ static_cast<instrumented_bptr&>(ptr).get_raw());
EXPECT_EQ(2, ptr.raw_nref());
EXPECT_EQ(0, ::memcmp(original.c_str(), ptr.c_str(), len));
PrCtl unset_dumpable;
original.set_length(length);
same_raw = original;
ASSERT_EQ(2, original.raw_nref());
- ASSERT_EQ(same_raw.get_raw(), original.get_raw());
+ ASSERT_EQ(static_cast<instrumented_bptr&>(same_raw).get_raw(),
+ static_cast<instrumented_bptr&>(original).get_raw());
ASSERT_EQ(same_raw.offset(), original.offset());
ASSERT_EQ(same_raw.length(), original.length());
}
bufferptr ptr;
ptr = original;
ASSERT_EQ(2, original.raw_nref());
- ASSERT_EQ(ptr.get_raw(), original.get_raw());
+ ASSERT_EQ(static_cast<instrumented_bptr&>(ptr).get_raw(),
+ static_cast<instrumented_bptr&>(original).get_raw());
ASSERT_EQ(original.offset(), ptr.offset());
ASSERT_EQ(original.length(), ptr.length());
}
ptr[1] = 'Y';
const bufferptr const_ptr(ptr);
- EXPECT_NE((void*)NULL, (void*)ptr.get_raw());
+ EXPECT_NE((void*)nullptr, (void*)static_cast<instrumented_bptr&>(ptr).get_raw());
EXPECT_EQ('X', ptr.c_str()[0]);
{
bufferptr ptr;
EXPECT_EQ((unsigned)(1 + len), bl.length());
EXPECT_EQ((unsigned)2, bl.get_num_buffers());
EXPECT_EQ('B', bl.back()[0]);
- EXPECT_EQ(ptr.get_raw(), bl.back().get_raw());
+ const bufferptr& back_bp = bl.back();
+ EXPECT_EQ(static_cast<instrumented_bptr&>(ptr).get_raw(),
+ static_cast<const instrumented_bptr&>(back_bp).get_raw());
}
//
// void push_back(ptr&& bp)
EXPECT_EQ((unsigned)(1 + len), bl.length());
EXPECT_EQ((unsigned)2, bl.buffers().size());
EXPECT_EQ('B', bl.buffers().back()[0]);
- EXPECT_FALSE(ptr.get_raw());
+ EXPECT_FALSE(static_cast<instrumented_bptr&>(ptr).get_raw());
}
}
bl.append(std::move(ptr));
EXPECT_EQ((unsigned)1, bl.buffers().size());
EXPECT_EQ((unsigned)3, bl.length());
- EXPECT_FALSE(ptr.get_raw());
+ EXPECT_FALSE(static_cast<instrumented_bptr&>(ptr).get_raw());
}
}
}