65411b8d4e
Summary: - Fixed a bug in `RateLimiterTest.GeneratePriorityIterationOrder` that the callbacks in this test were not called starting from `i = 1`. Fix by increasing `rate_bytes_per_sec` and requested bytes. - The bug is due to the previous `rate_bytes_per_sec` was set too small, resulting in `refill_bytes_per_period` less than `kMinRefillBytesPerPeriod`. Hence the actual `refill_bytes_per_period` was equal to `kMinRefillBytesPerPeriod` due to the logic [here](https://github.com/facebook/rocksdb/blob/main/util/rate_limiter.cc#L302-L303) and it ended up being greater than the previously set requested bytes. Therefore starting from `i = 1`, `RefillBytesAndGrantRequests()` and `GeneratePriorityIterationOrder` won't be called and the test callbacks was not triggered to execute the assertion. - Added internal flag to assert callbacks are called in `RateLimiterTest.GeneratePriorityIterationOrder` to prevent any future changes defeat the purpose of the test [as suggested](https://github.com/facebook/rocksdb/pull/8890#discussion_r704915134) - Increased `rate_bytes_per_sec` and bytes of each request in `RateLimiterTest.GetTotalBytesThrough`, `RateLimiterTest.GetTotalRequests`, `RateLimiterTest.GetTotalPendingRequests` to trigger the "long path" of execution (i.e, the one trigger RefillBytesAndGrantRequests()) to increase test coverage - This increased the running time of the three tests, see test plan for time difference running locally - Cleared up sync point effects after each test by calling `SyncPoint::GetInstance()->DisableProcessing();` and `SyncPoint::GetInstance()->ClearAllCallBacks();` in `~RateLimiterTest()` [as suggested](https://github.com/facebook/rocksdb/pull/8595/files#r697534279) - It's fine to call these two methods even when `EnableProcessing()` or `SetCallBack()` is not called in the test or is already cleaned up. In those cases, calling these two functions in destructor is effectively no-op. - This will allow cleaning up sync point effects of previous test even when the previous test failed in assertion. - Added missing `SyncPoint::GetInstance()->DisableProcessing();` and `SyncPoint::GetInstance()->ClearCallBacks(..);` in existing tests for completeness - Called `SyncPoint::GetInstance()->DisableProcessing();` and `SyncPoint::GetInstance()->ClearCallBacks(..);` in loop in `RateLimiterTest.GeneratePriorityIterationOrder` for completeness Pull Request resolved: https://github.com/facebook/rocksdb/pull/8904 Test Plan: - Passing existing tests - To verify the 1st change, run `RateLimiterTest.GeneratePriorityIterationOrder` with assertions of callbacks are indeed called under original `rate_bytes_per_sec` and request byte and under updated `rate_bytes_per_sec` and request byte. The former will fail the assertion while the latter succeeds. - Here is the increased test time due to the 3rd change mentioned above in the summary. The relevant 3 tests mentioned in total increase the test time by 6s (~6000/33848 = 17.7% of the original total test time), which IMO is acceptable for better test coverage through running the "long path". - current (run on branch rate_limiter_ut_improve locally) [ RUN ] RateLimiterTest.GetTotalBytesThrough [ OK ] RateLimiterTest.GetTotalBytesThrough (3000 ms) [ RUN ] RateLimiterTest.GetTotalRequests [ OK ] RateLimiterTest.GetTotalRequests (3001 ms) [ RUN ] RateLimiterTest.GetTotalPendingRequests [ OK ] RateLimiterTest.GetTotalPendingRequests (0 ms) ... [----------] 10 tests from RateLimiterTest (43349 ms total) [----------] Global test environment tear-down [==========] 10 tests from 1 test case ran. (43349 ms total) [ PASSED ] 10 tests. - previous (run on branch main locally) [ RUN ] RateLimiterTest.GetTotalBytesThrough [ OK ] RateLimiterTest.GetTotalBytesThrough (0 ms) [ RUN ] RateLimiterTest.GetTotalRequests [ OK ] RateLimiterTest.GetTotalRequests (0 ms) [ RUN ] RateLimiterTest.GetTotalPendingRequests [ OK ] RateLimiterTest.GetTotalPendingRequests (0 ms) ... [----------] 10 tests from RateLimiterTest (33848 ms total) [----------] Global test environment tear-down [==========] 10 tests from 1 test case ran. (33848 ms total) [ PASSED ] 10 tests. Reviewed By: ajkr Differential Revision: D30872544 Pulled By: hx235 fbshipit-source-id: ff894f5c1a4bef70e8e407d53b00be45f776b3e4 |
||
---|---|---|
.. | ||
aligned_buffer.h | ||
autovector_test.cc | ||
autovector.h | ||
bloom_impl.h | ||
bloom_test.cc | ||
build_version.cc.in | ||
cast_util.h | ||
channel.h | ||
coding_lean.h | ||
coding_test.cc | ||
coding.cc | ||
coding.h | ||
compaction_job_stats_impl.cc | ||
comparator.cc | ||
compression_context_cache.cc | ||
compression_context_cache.h | ||
compression.h | ||
concurrent_task_limiter_impl.cc | ||
concurrent_task_limiter_impl.h | ||
core_local.h | ||
crc32c_arm64.cc | ||
crc32c_arm64.h | ||
crc32c_ppc_asm.S | ||
crc32c_ppc_constants.h | ||
crc32c_ppc.c | ||
crc32c_ppc.h | ||
crc32c_test.cc | ||
crc32c.cc | ||
crc32c.h | ||
defer_test.cc | ||
defer.h | ||
duplicate_detector.h | ||
dynamic_bloom_test.cc | ||
dynamic_bloom.cc | ||
dynamic_bloom.h | ||
fastrange.h | ||
file_checksum_helper.cc | ||
file_checksum_helper.h | ||
file_reader_writer_test.cc | ||
filelock_test.cc | ||
filter_bench.cc | ||
gflags_compat.h | ||
hash128.h | ||
hash_map.h | ||
hash_test.cc | ||
hash.cc | ||
hash.h | ||
heap_test.cc | ||
heap.h | ||
kv_map.h | ||
log_write_bench.cc | ||
math128.h | ||
math.h | ||
murmurhash.cc | ||
murmurhash.h | ||
mutexlock.h | ||
ppc-opcode.h | ||
random_test.cc | ||
random.cc | ||
random.h | ||
rate_limiter_test.cc | ||
rate_limiter.cc | ||
rate_limiter.h | ||
regex.cc | ||
repeatable_thread_test.cc | ||
repeatable_thread.h | ||
ribbon_alg.h | ||
ribbon_config.cc | ||
ribbon_config.h | ||
ribbon_impl.h | ||
ribbon_test.cc | ||
set_comparator.h | ||
slice_test.cc | ||
slice_transform_test.cc | ||
slice.cc | ||
status.cc | ||
stderr_logger.h | ||
stop_watch.h | ||
string_util.cc | ||
string_util.h | ||
thread_guard.h | ||
thread_list_test.cc | ||
thread_local_test.cc | ||
thread_local.cc | ||
thread_local.h | ||
thread_operation.h | ||
threadpool_imp.cc | ||
threadpool_imp.h | ||
timer_queue_test.cc | ||
timer_queue.h | ||
timer_test.cc | ||
timer.h | ||
user_comparator_wrapper.h | ||
vector_iterator.h | ||
work_queue_test.cc | ||
work_queue.h | ||
xxhash.cc | ||
xxhash.h | ||
xxph3.h |