in request/random.go [35:73]
func NewWeightedRandomRequests(spec *types.LoadProfileSpec) (*WeightedRandomRequests, error) {
if err := spec.Validate(); err != nil {
return nil, fmt.Errorf("invalid load profile spec: %v", err)
}
shares := make([]int, 0, len(spec.Requests))
reqBuilders := make([]RESTRequestBuilder, 0, len(spec.Requests))
for _, r := range spec.Requests {
shares = append(shares, r.Shares)
var builder RESTRequestBuilder
switch {
case r.StaleList != nil:
builder = newRequestListBuilder(r.StaleList, "0", spec.MaxRetries)
case r.QuorumList != nil:
builder = newRequestListBuilder(r.QuorumList, "", spec.MaxRetries)
case r.WatchList != nil:
builder = newRequestWatchListBuilder(r.WatchList, spec.MaxRetries)
case r.StaleGet != nil:
builder = newRequestGetBuilder(r.StaleGet, "0", spec.MaxRetries)
case r.QuorumGet != nil:
builder = newRequestGetBuilder(r.QuorumGet, "", spec.MaxRetries)
case r.GetPodLog != nil:
builder = newRequestGetPodLogBuilder(r.GetPodLog, spec.MaxRetries)
default:
return nil, fmt.Errorf("not implement for PUT yet")
}
reqBuilders = append(reqBuilders, builder)
}
ctx, cancel := context.WithCancel(context.Background())
return &WeightedRandomRequests{
ctx: ctx,
cancel: cancel,
reqBuilderCh: make(chan RESTRequestBuilder),
shares: shares,
reqBuilders: reqBuilders,
}, nil
}