@ -8638,7 +8638,7 @@ TEST(DBTest, DynamicMemtableOptions) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 256 ) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 256 ) {
count + + ;
count + + ;
}
}
ASSERT_TRUE ( count > ( 128 * 0.9 ) & & count < ( 128 * 1.1 ) ) ;
ASSERT_TRUE ( count > ( 128 * 0.8 ) & & count < ( 128 * 1.2 ) ) ;
sleeping_task_low1 . WakeUp ( ) ;
sleeping_task_low1 . WakeUp ( ) ;
sleeping_task_low1 . WaitUntilDone ( ) ;
sleeping_task_low1 . WaitUntilDone ( ) ;
@ -8657,7 +8657,7 @@ TEST(DBTest, DynamicMemtableOptions) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 1024 ) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 1024 ) {
count + + ;
count + + ;
}
}
ASSERT_TRUE ( count > ( 512 * 0.9 ) & & count < ( 512 * 1.1 ) ) ;
ASSERT_TRUE ( count > ( 512 * 0.8 ) & & count < ( 512 * 1.2 ) ) ;
sleeping_task_low2 . WakeUp ( ) ;
sleeping_task_low2 . WakeUp ( ) ;
sleeping_task_low2 . WaitUntilDone ( ) ;
sleeping_task_low2 . WaitUntilDone ( ) ;
@ -8675,7 +8675,7 @@ TEST(DBTest, DynamicMemtableOptions) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 1024 ) {
while ( Put ( Key ( count ) , RandomString ( & rnd , 1024 ) , wo ) . ok ( ) & & count < 1024 ) {
count + + ;
count + + ;
}
}
ASSERT_TRUE ( count > ( 256 * 0.9 ) & & count < ( 256 * 1.1 ) ) ;
ASSERT_TRUE ( count > ( 256 * 0.8 ) & & count < ( 256 * 1.2 ) ) ;
sleeping_task_low3 . WakeUp ( ) ;
sleeping_task_low3 . WakeUp ( ) ;
sleeping_task_low3 . WaitUntilDone ( ) ;
sleeping_task_low3 . WaitUntilDone ( ) ;
}
}
@ -8685,7 +8685,7 @@ TEST(DBTest, DynamicCompactionOptions) {
const uint64_t k32KB = 1 < < 15 ;
const uint64_t k32KB = 1 < < 15 ;
const uint64_t k64KB = 1 < < 16 ;
const uint64_t k64KB = 1 < < 16 ;
const uint64_t k128KB = 1 < < 17 ;
const uint64_t k128KB = 1 < < 17 ;
const uint64_t k256K B = 1 < < 18 ;
const uint64_t k1M B = 1 < < 20 ;
const uint64_t k4KB = 1 < < 12 ;
const uint64_t k4KB = 1 < < 12 ;
Options options ;
Options options ;
options . env = env_ ;
options . env = env_ ;
@ -8763,19 +8763,19 @@ TEST(DBTest, DynamicCompactionOptions) {
// fill L1 and L2. L1 size should be around 256KB while L2 size should be
// fill L1 and L2. L1 size should be around 256KB while L2 size should be
// around 256KB x 4.
// around 256KB x 4.
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {
{ " max_bytes_for_level_base " , std : : to_string ( k256K B ) }
{ " max_bytes_for_level_base " , std : : to_string ( k1M B ) }
} ) ) ;
} ) ) ;
// writing 24 x 64KB => 6 * 256 KB
// writing 96 x 64KB => 6 * 1024 KB
// (L1 + L2) = (1 + 4) * 256 KB
// (L1 + L2) = (1 + 4) * 1024 KB
for ( int i = 0 ; i < 24 ; + + i ) {
for ( int i = 0 ; i < 96 ; + + i ) {
gen_l0_kb ( i , 64 , 32 ) ;
gen_l0_kb ( i , 64 , 96 ) ;
}
}
dbfull ( ) - > TEST_WaitForCompact ( ) ;
dbfull ( ) - > TEST_WaitForCompact ( ) ;
ASSERT_TRUE ( SizeAtLevel ( 1 ) > k256KB * 0.8 & &
ASSERT_TRUE ( SizeAtLevel ( 1 ) > k1MB * 0.5 & &
SizeAtLevel ( 1 ) < k256KB * 1.2 ) ;
SizeAtLevel ( 1 ) < k1MB * 1.5 ) ;
ASSERT_TRUE ( SizeAtLevel ( 2 ) > 4 * k256KB * 0.8 & &
ASSERT_TRUE ( SizeAtLevel ( 2 ) > 4 * k1MB * 0.5 & &
SizeAtLevel ( 2 ) < 4 * k256KB * 1.2 ) ;
SizeAtLevel ( 2 ) < 4 * k1MB * 1.5 ) ;
// Test max_bytes_for_level_multiplier and
// Test max_bytes_for_level_multiplier and
// max_bytes_for_level_base. Now, reduce both mulitplier and level base,
// max_bytes_for_level_base. Now, reduce both mulitplier and level base,
@ -8792,9 +8792,9 @@ TEST(DBTest, DynamicCompactionOptions) {
gen_l0_kb ( i , 64 , 32 ) ;
gen_l0_kb ( i , 64 , 32 ) ;
}
}
dbfull ( ) - > TEST_WaitForCompact ( ) ;
dbfull ( ) - > TEST_WaitForCompact ( ) ;
ASSERT_TRUE ( SizeAtLevel ( 1 ) < k128KB * 1.2 ) ;
uint64_t total_size =
ASSERT_TRUE ( SizeAtLevel ( 2 ) < 2 * k128KB * 1.2 ) ;
SizeAtLevel ( 1 ) + SizeAtLevel ( 2 ) + SizeAtLevel ( 3 ) ;
ASSERT_TRUE ( SizeAtLevel ( 3 ) < 4 * k128KB * 1.2 ) ;
ASSERT_TRUE ( total_size < k128KB * 7 * 1.5 ) ;
// Test level0_stop_writes_trigger.
// Test level0_stop_writes_trigger.
// Clean up memtable and L0. Block compaction threads. If continue to write
// Clean up memtable and L0. Block compaction threads. If continue to write
@ -8883,7 +8883,7 @@ TEST(DBTest, DynamicCompactionOptions) {
// L1 - L3. Then thrink max_bytes_for_level_base and disable auto compaction
// L1 - L3. Then thrink max_bytes_for_level_base and disable auto compaction
// at the same time, we should see some level with score greater than 2.
// at the same time, we should see some level with score greater than 2.
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {
{ " max_bytes_for_level_base " , std : : to_string ( k256K B ) }
{ " max_bytes_for_level_base " , std : : to_string ( k1M B ) }
} ) ) ;
} ) ) ;
// writing 40 x 64KB = 10 x 256KB
// writing 40 x 64KB = 10 x 256KB
// (L1 + L2 + L3) = (1 + 2 + 4) * 256KB
// (L1 + L2 + L3) = (1 + 2 + 4) * 256KB
@ -8891,12 +8891,12 @@ TEST(DBTest, DynamicCompactionOptions) {
gen_l0_kb ( i , 64 , 32 ) ;
gen_l0_kb ( i , 64 , 32 ) ;
}
}
dbfull ( ) - > TEST_WaitForCompact ( ) ;
dbfull ( ) - > TEST_WaitForCompact ( ) ;
ASSERT_TRUE ( SizeAtLevel ( 1 ) > k256K B * 0.8 & &
ASSERT_TRUE ( ( SizeAtLevel ( 1 ) > k1M B * 0.8 & &
SizeAtLevel ( 1 ) < k256KB * 1.2 ) ;
SizeAtLevel ( 1 ) < k1MB * 1.2 ) | |
ASSERT_TRUE ( SizeAtLevel ( 2 ) > 2 * k256K B * 0.8 & &
( SizeAtLevel ( 2 ) > 2 * k1M B * 0.8 & &
SizeAtLevel ( 2 ) < 2 * k256KB * 1.2 ) ;
SizeAtLevel ( 2 ) < 2 * k1MB * 1.2 ) | |
ASSERT_TRUE ( SizeAtLevel ( 3 ) > 4 * k256K B * 0.8 & &
( SizeAtLevel ( 3 ) > 4 * k1M B * 0.8 & &
SizeAtLevel ( 3 ) < 4 * k256K B * 1.2 ) ;
SizeAtLevel ( 3 ) < 4 * k1M B * 1.2 ) ) ;
// Reduce max_bytes_for_level_base and disable compaction at the same time
// Reduce max_bytes_for_level_base and disable compaction at the same time
// This should cause score to increase
// This should cause score to increase
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {
ASSERT_TRUE ( dbfull ( ) - > SetOptions ( {