diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-10 11:14:57 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2019-12-10 16:58:28 +0200 |
commit | d146e3dcfe3d4500eced3e097212b485659ec741 (patch) | |
tree | c95ce4cf44523ea23c0d11e3c156cdca6bc7259f | |
parent | 51fc8ab73e3ee9712d1128fefc9831dcf891a3b5 (diff) | |
download | mariadb-git-d146e3dcfe3d4500eced3e097212b485659ec741.tar.gz |
MDEV-21256: Simplify ut_rnd_interval()
ut_rnd_interval(): Remove the first parameter, which was mostly
passed as 0. Implement as a simple wrapper around ut_rnd_gen().
Trivially return 0 if the size of the interval is smaller than 2.
ut_rnd_ulint_counter, ut_rnd_gen_next_ulint(), ut_rnd_gen_ulint(): Remove.
-rw-r--r-- | storage/innobase/dict/dict0stats.cc | 2 | ||||
-rw-r--r-- | storage/innobase/include/ib0mutex.h | 6 | ||||
-rw-r--r-- | storage/innobase/include/ut0rnd.h | 14 | ||||
-rw-r--r-- | storage/innobase/include/ut0rnd.ic | 81 | ||||
-rw-r--r-- | storage/innobase/page/page0cur.cc | 3 | ||||
-rw-r--r-- | storage/innobase/sync/sync0rw.cc | 10 | ||||
-rw-r--r-- | storage/innobase/ut/ut0rnd.cc | 3 |
7 files changed, 14 insertions, 105 deletions
diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc index f49fb87e4ea..c9e3929cf1d 100644 --- a/storage/innobase/dict/dict0stats.cc +++ b/storage/innobase/dict/dict0stats.cc @@ -1747,7 +1747,7 @@ dict_stats_analyze_index_for_n_prefix( ut_rnd_interval() to work with too big numbers since ib_uint64_t could be bigger than ulint */ const ulint rnd = ut_rnd_interval( - 0, static_cast<ulint>(right - left)); + static_cast<ulint>(right - left)); const ib_uint64_t dive_below_idx = boundaries->at(static_cast<unsigned>(left + rnd)); diff --git a/storage/innobase/include/ib0mutex.h b/storage/innobase/include/ib0mutex.h index e7f5ca2b44f..6c04563b97a 100644 --- a/storage/innobase/include/ib0mutex.h +++ b/storage/innobase/include/ib0mutex.h @@ -225,7 +225,7 @@ struct TTASFutexMutex { return; } - ut_delay(ut_rnd_interval(0, max_delay)); + ut_delay(ut_rnd_interval(max_delay)); } for (n_waits= 0;; n_waits++) { @@ -362,7 +362,7 @@ struct TTASMutex { uint32_t n_spins = 0; while (!try_lock()) { - ut_delay(ut_rnd_interval(0, max_delay)); + ut_delay(ut_rnd_interval(max_delay)); if (++n_spins == max_spins) { os_thread_yield(); max_spins+= step; @@ -516,7 +516,7 @@ struct TTASEventMutex { sync_array_wait_event(sync_arr, cell); } } else { - ut_delay(ut_rnd_interval(0, max_delay)); + ut_delay(ut_rnd_interval(max_delay)); } } diff --git a/storage/innobase/include/ut0rnd.h b/storage/innobase/include/ut0rnd.h index 56b4a6159c1..fcab293b3b0 100644 --- a/storage/innobase/include/ut0rnd.h +++ b/storage/innobase/include/ut0rnd.h @@ -56,15 +56,11 @@ inline uint64_t ut_rnd_gen() return ut_rnd_current; } -/********************************************************//** -Generates a random integer from a given interval. -@return the 'random' number */ -UNIV_INLINE -ulint -ut_rnd_interval( -/*============*/ - ulint low, /*!< in: low limit; can generate also this value */ - ulint high); /*!< in: high limit; can generate also this value */ +/** @return a random number between 0 and n-1, inclusive */ +inline ulint ut_rnd_interval(ulint n) +{ + return n > 1 ? static_cast<ulint>(ut_rnd_gen() % n) : 0; +} /*******************************************************//** The following function generates a hash value for a ulint integer diff --git a/storage/innobase/include/ut0rnd.ic b/storage/innobase/include/ut0rnd.ic index 8b7ea5fe1e4..c0105160a42 100644 --- a/storage/innobase/include/ut0rnd.ic +++ b/storage/innobase/include/ut0rnd.ic @@ -29,87 +29,6 @@ Created 5/30/1994 Heikki Tuuri #ifndef UNIV_INNOCHECKSUM -#define UT_RND1 151117737 -#define UT_RND2 119785373 -#define UT_RND3 85689495 -#define UT_RND4 76595339 -#define UT_SUM_RND2 98781234 -#define UT_SUM_RND3 126792457 -#define UT_SUM_RND4 63498502 -#define UT_XOR_RND1 187678878 -#define UT_XOR_RND2 143537923 - -/** Seed value of ut_rnd_gen_ulint() */ -extern ulint ut_rnd_ulint_counter; - -/********************************************************//** -The following function generates a series of 'random' ulint integers. -@return the next 'random' number */ -UNIV_INLINE -ulint -ut_rnd_gen_next_ulint( -/*==================*/ - ulint rnd) /*!< in: the previous random number value */ -{ - ulint n_bits; - - n_bits = 8 * sizeof(ulint); - - rnd = UT_RND2 * rnd + UT_SUM_RND3; - rnd = UT_XOR_RND1 ^ rnd; - rnd = (rnd << 20) + (rnd >> (n_bits - 20)); - rnd = UT_RND3 * rnd + UT_SUM_RND4; - rnd = UT_XOR_RND2 ^ rnd; - rnd = (rnd << 20) + (rnd >> (n_bits - 20)); - rnd = UT_RND1 * rnd + UT_SUM_RND2; - - return(rnd); -} - -/********************************************************//** -The following function generates 'random' ulint integers which -enumerate the value space of ulint integers in a pseudo random -fashion. Note that the same integer is repeated always after -2 to power 32 calls to the generator (if ulint is 32-bit). -@return the 'random' number */ -UNIV_INLINE -ulint -ut_rnd_gen_ulint(void) -/*==================*/ -{ - ulint rnd; - - ut_rnd_ulint_counter = UT_RND1 * ut_rnd_ulint_counter + UT_RND2; - - rnd = ut_rnd_gen_next_ulint(ut_rnd_ulint_counter); - - return(rnd); -} - -/********************************************************//** -Generates a random integer from a given interval. -@return the 'random' number */ -UNIV_INLINE -ulint -ut_rnd_interval( -/*============*/ - ulint low, /*!< in: low limit; can generate also this value */ - ulint high) /*!< in: high limit; can generate also this value */ -{ - ulint rnd; - - ut_ad(high >= low); - - if (low == high) { - - return(low); - } - - rnd = ut_rnd_gen_ulint(); - - return(low + (rnd % (high - low))); -} - /*******************************************************//** The following function generates a hash value for a ulint integer to a hash table of size table_size, which should be a prime diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc index a5a8c6c3d1e..21a725f845d 100644 --- a/storage/innobase/page/page0cur.cc +++ b/storage/innobase/page/page0cur.cc @@ -792,8 +792,7 @@ page_cur_open_on_rnd_user_rec( } cursor->rec = page_rec_get_nth(block->frame, - static_cast<ulint> - (ut_rnd_gen() % n_recs) + 1); + ut_rnd_interval(n_recs) + 1); } /** Write a redo log record of inserting a record into an index page. diff --git a/storage/innobase/sync/sync0rw.cc b/storage/innobase/sync/sync0rw.cc index 96108ab0bf1..c9b8a1e58a5 100644 --- a/storage/innobase/sync/sync0rw.cc +++ b/storage/innobase/sync/sync0rw.cc @@ -299,7 +299,7 @@ lock_loop: HMT_low(); while (i < srv_n_spin_wait_rounds && lock->lock_word <= 0) { if (srv_spin_wait_delay) { - ut_delay(ut_rnd_interval(0, srv_spin_wait_delay)); + ut_delay(ut_rnd_interval(srv_spin_wait_delay)); } i++; @@ -425,7 +425,7 @@ rw_lock_x_lock_wait_func( HMT_low(); if (srv_spin_wait_delay) { - ut_delay(ut_rnd_interval(0, srv_spin_wait_delay)); + ut_delay(ut_rnd_interval(srv_spin_wait_delay)); } if (i < srv_n_spin_wait_rounds) { @@ -684,8 +684,7 @@ lock_loop: && lock->lock_word <= X_LOCK_HALF_DECR) { if (srv_spin_wait_delay) { - ut_delay(ut_rnd_interval( - 0, srv_spin_wait_delay)); + ut_delay(ut_rnd_interval(srv_spin_wait_delay)); } i++; @@ -790,8 +789,7 @@ lock_loop: && lock->lock_word <= X_LOCK_HALF_DECR) { if (srv_spin_wait_delay) { - ut_delay(ut_rnd_interval( - 0, srv_spin_wait_delay)); + ut_delay(ut_rnd_interval(srv_spin_wait_delay)); } i++; diff --git a/storage/innobase/ut/ut0rnd.cc b/storage/innobase/ut/ut0rnd.cc index dcf43b9d7e1..856cb82e645 100644 --- a/storage/innobase/ut/ut0rnd.cc +++ b/storage/innobase/ut/ut0rnd.cc @@ -36,9 +36,6 @@ uint64_t ut_rnd_current; #define UT_RANDOM_3 1.0132677 /*@}*/ -/** Seed value of ut_rnd_gen_ulint(). */ -ulint ut_rnd_ulint_counter = 65654363; - /***********************************************************//** Looks for a prime number slightly greater than the given argument. The prime is chosen so that it is not near any power of 2. |