#include <ostream>
namespace ceph {
+#define CEPH_BUFFER_ALLOC_UNIT (MIN(CEPH_PAGE_SIZE, 4096))
+#define CEPH_BUFFER_APPEND_SIZE (CEPH_BUFFER_ALLOC_UNIT - sizeof(raw_combined))
+
#ifdef BUFFER_DEBUG
static simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZER;
# define bdout { simple_spin_lock(&buffer_debug_lock); std::cout
unsigned gap = append_buffer.unused_tail_length();
if (!gap) {
// make a new append_buffer!
- append_buffer = create_aligned(CEPH_BUFFER_APPEND_SIZE, CEPH_BUFFER_APPEND_SIZE);
+ append_buffer = create_combined(CEPH_BUFFER_APPEND_SIZE);
append_buffer.set_length(0); // unused, so far.
}
append(append_buffer, append_buffer.append(c) - 1, 1); // add segment to the list
if (len == 0)
break; // done!
- // make a new append_buffer!
- unsigned alen = CEPH_BUFFER_APPEND_SIZE * (((len-1) / CEPH_BUFFER_APPEND_SIZE) + 1);
- append_buffer = create_aligned(alen, CEPH_BUFFER_APPEND_SIZE);
+ // make a new append_buffer. fill out a complete page, factoring in the
+ // raw_combined overhead.
+ size_t need = ROUND_UP_TO(len, sizeof(size_t)) + sizeof(raw_combined);
+ size_t alen = ROUND_UP_TO(need, CEPH_BUFFER_ALLOC_UNIT) -
+ sizeof(raw_combined);
+ append_buffer = create_combined(alen);
append_buffer.set_length(0); // unused, so far.
}
}
namespace ceph {
-const static int CEPH_BUFFER_APPEND_SIZE(4096);
-
namespace buffer CEPH_BUFFER_API {
/*
* exceptions
bl.append(str.c_str(), str.size());
bl.append(str.c_str(), str.size());
EXPECT_EQ((unsigned)2, bl.get_num_buffers());
- EXPECT_TRUE(bl.is_aligned(CEPH_BUFFER_APPEND_SIZE));
+ //EXPECT_TRUE(bl.is_aligned(CEPH_BUFFER_APPEND_SIZE));
bl.rebuild();
EXPECT_TRUE(bl.is_page_aligned());
EXPECT_EQ((unsigned)1, bl.get_num_buffers());
EXPECT_EQ((unsigned)0, bl.get_num_buffers());
bl.append('A');
EXPECT_EQ((unsigned)1, bl.get_num_buffers());
- EXPECT_TRUE(bl.is_aligned(CEPH_BUFFER_APPEND_SIZE));
+ //EXPECT_TRUE(bl.is_aligned(CEPH_BUFFER_APPEND_SIZE));
}
//
// void append(const char *data, unsigned len);
EXPECT_EQ(-EBADF, bl.read_fd(fd, len));
fd = ::open(FILENAME, O_RDONLY);
EXPECT_EQ(len, (unsigned)bl.read_fd(fd, len));
- EXPECT_EQ(CEPH_BUFFER_APPEND_SIZE - len, bl.front().unused_tail_length());
+ //EXPECT_EQ(CEPH_BUFFER_APPEND_SIZE - len, bl.front().unused_tail_length());
EXPECT_EQ(len, bl.length());
::close(fd);
::unlink(FILENAME);