github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/chooser/shuffle_chooser.go (about)

     1  package chooser
     2  
     3  import (
     4  	"context"
     5  	"math/rand"
     6  	"net"
     7  )
     8  
     9  type shuffleChooser struct {
    10  	chooser Chooser
    11  }
    12  
    13  // NewShuffleChooser 创建随机混淆选择器
    14  func NewShuffleChooser(chooser Chooser) Chooser {
    15  	return &shuffleChooser{chooser: chooser}
    16  }
    17  
    18  func (chooser *shuffleChooser) Choose(ctx context.Context, ips []net.IP, options *ChooseOptions) []net.IP {
    19  	chosen_ips := chooser.chooser.Choose(ctx, ips, options)
    20  	rand.Shuffle(len(chosen_ips), func(i, j int) {
    21  		chosen_ips[i], chosen_ips[j] = chosen_ips[j], chosen_ips[i]
    22  	})
    23  	return chosen_ips
    24  }
    25  
    26  func (chooser *shuffleChooser) FeedbackGood(ctx context.Context, ips []net.IP, options *FeedbackOptions) {
    27  	chooser.chooser.FeedbackGood(ctx, ips, options)
    28  }
    29  
    30  func (chooser *shuffleChooser) FeedbackBad(ctx context.Context, ips []net.IP, options *FeedbackOptions) {
    31  	chooser.chooser.FeedbackBad(ctx, ips, options)
    32  }