mosn
1package util2
3import (4"math/rand"5"sync"6"time"7)
8
9// tools
10var r *rand.Rand11
12func init() {13r = rand.New(rand.NewSource(time.Now().UnixNano()))14}
15func RandomDuration(min, max time.Duration) time.Duration {16if min > max {17return min18}19d := r.Int63n(int64(max - min))20return time.Duration(d) * time.Nanosecond21}
22func IsMapEmpty(m *sync.Map) bool {23empty := true24//If there is a key in the map, return not empty25m.Range(func(key, value interface{}) bool {26empty = false27return false28})29return empty30}
31func WaitMapEmpty(m *sync.Map, timeout time.Duration) bool {32ch := make(chan struct{})33go func() {34for {35select {36case <-ch:37return38default:39if IsMapEmpty(m) {40close(ch)41return42}43time.Sleep(500 * time.Millisecond)44}45}46}() //check goroutine47select {48case <-time.After(timeout):49close(ch) // finish check goroutine50return IsMapEmpty(m) // timeout, retry again51case <-ch:52return true //map empty53}54}
55