diff --git a/db/column_family_test.cc b/db/column_family_test.cc index 88786d469..62cc53b1f 100644 --- a/db/column_family_test.cc +++ b/db/column_family_test.cc @@ -933,62 +933,62 @@ TEST_F(ColumnFamilyTest, FlushTest) { TEST_F(ColumnFamilyTest, LogDeletionTest) { db_options_.max_total_wal_size = std::numeric_limits::max(); column_family_options_.arena_block_size = 4 * 1024; - column_family_options_.write_buffer_size = 100000; // 100KB + column_family_options_.write_buffer_size = 128000; // 128KB Open(); CreateColumnFamilies({"one", "two", "three", "four"}); // Each bracket is one log file. if number is in (), it means // we don't need it anymore (it's been flushed) // [] AssertCountLiveLogFiles(0); - PutRandomData(0, 1, 100); + PutRandomData(0, 1, 128); // [0] - PutRandomData(1, 1, 100); + PutRandomData(1, 1, 128); // [0, 1] - PutRandomData(1, 1000, 100); + PutRandomData(1, 1000, 128); WaitForFlush(1); // [0, (1)] [1] AssertCountLiveLogFiles(2); - PutRandomData(0, 1, 100); + PutRandomData(0, 1, 128); // [0, (1)] [0, 1] AssertCountLiveLogFiles(2); - PutRandomData(2, 1, 100); + PutRandomData(2, 1, 128); // [0, (1)] [0, 1, 2] - PutRandomData(2, 1000, 100); + PutRandomData(2, 1000, 128); WaitForFlush(2); // [0, (1)] [0, 1, (2)] [2] AssertCountLiveLogFiles(3); - PutRandomData(2, 1000, 100); + PutRandomData(2, 1000, 128); WaitForFlush(2); // [0, (1)] [0, 1, (2)] [(2)] [2] AssertCountLiveLogFiles(4); - PutRandomData(3, 1, 100); + PutRandomData(3, 1, 128); // [0, (1)] [0, 1, (2)] [(2)] [2, 3] - PutRandomData(1, 1, 100); + PutRandomData(1, 1, 128); // [0, (1)] [0, 1, (2)] [(2)] [1, 2, 3] AssertCountLiveLogFiles(4); - PutRandomData(1, 1000, 100); + PutRandomData(1, 1000, 128); WaitForFlush(1); // [0, (1)] [0, (1), (2)] [(2)] [(1), 2, 3] [1] AssertCountLiveLogFiles(5); - PutRandomData(0, 1000, 100); + PutRandomData(0, 1000, 128); WaitForFlush(0); // [(0), (1)] [(0), (1), (2)] [(2)] [(1), 2, 3] [1, (0)] [0] // delete obsolete logs --> // [(1), 2, 3] [1, (0)] [0] AssertCountLiveLogFiles(3); - PutRandomData(0, 1000, 100); + PutRandomData(0, 1000, 128); WaitForFlush(0); // [(1), 2, 3] [1, (0)], [(0)] [0] AssertCountLiveLogFiles(4); - PutRandomData(1, 1000, 100); + PutRandomData(1, 1000, 128); WaitForFlush(1); // [(1), 2, 3] [(1), (0)] [(0)] [0, (1)] [1] AssertCountLiveLogFiles(5); - PutRandomData(2, 1000, 100); + PutRandomData(2, 1000, 128); WaitForFlush(2); // [(1), (2), 3] [(1), (0)] [(0)] [0, (1)] [1, (2)], [2] AssertCountLiveLogFiles(6); - PutRandomData(3, 1000, 100); + PutRandomData(3, 1000, 128); WaitForFlush(3); // [(1), (2), (3)] [(1), (0)] [(0)] [0, (1)] [1, (2)], [2, (3)] [3] // delete obsolete logs --> diff --git a/util/arena.cc b/util/arena.cc index 6185b5c55..1382cb1c2 100644 --- a/util/arena.cc +++ b/util/arena.cc @@ -33,7 +33,7 @@ const size_t Arena::kInlineSize; const size_t Arena::kMinBlockSize = 4096; const size_t Arena::kMaxBlockSize = 2u << 30; -static const int kAlignUnit = sizeof(void*); +static const int kAlignUnit = alignof(max_align_t); size_t OptimizeBlockSize(size_t block_size) { // Make sure block_size is in optimal range diff --git a/util/arena.h b/util/arena.h index af53a2ff8..dc64154c8 100644 --- a/util/arena.h +++ b/util/arena.h @@ -82,7 +82,7 @@ class Arena : public Allocator { } private: - char inline_block_[kInlineSize] __attribute__((__aligned__(sizeof(void*)))); + char inline_block_[kInlineSize] __attribute__((__aligned__(alignof(max_align_t)))); // Number of bytes allocated in one block const size_t kBlockSize; // Array of new[] allocated memory blocks diff --git a/util/arena_test.cc b/util/arena_test.cc index 53777a20b..9dfc28ab2 100644 --- a/util/arena_test.cc +++ b/util/arena_test.cc @@ -91,14 +91,15 @@ static void ApproximateMemoryUsageTest(size_t huge_page_size) { ASSERT_EQ(kZero, arena.ApproximateMemoryUsage()); // allocate inline bytes + const size_t kAlignUnit = alignof(max_align_t); EXPECT_TRUE(arena.IsInInlineBlock()); - arena.AllocateAligned(8); + arena.AllocateAligned(kAlignUnit); EXPECT_TRUE(arena.IsInInlineBlock()); - arena.AllocateAligned(Arena::kInlineSize / 2 - 16); + arena.AllocateAligned(Arena::kInlineSize / 2 - (2 * kAlignUnit)); EXPECT_TRUE(arena.IsInInlineBlock()); arena.AllocateAligned(Arena::kInlineSize / 2); EXPECT_TRUE(arena.IsInInlineBlock()); - ASSERT_EQ(arena.ApproximateMemoryUsage(), Arena::kInlineSize - 8); + ASSERT_EQ(arena.ApproximateMemoryUsage(), Arena::kInlineSize - kAlignUnit); ASSERT_PRED2(CheckMemoryAllocated, arena.MemoryAllocatedBytes(), Arena::kInlineSize);