func()

in pkg/aws/throttle/config.go [55:98]


func (c *ServiceOperationsThrottleConfig) Set(val string) error {
	valueOverride := make(map[string][]throttleConfig)
	configPairs := strings.Split(val, ",")
	for _, pair := range configPairs {
		kv := strings.Split(pair, "=")
		if len(kv) != 2 {
			return errors.Errorf("%s must be formatted as serviceID:operationRegex=rate:burst", pair)
		}
		serviceIDOperationRegexPair := strings.Split(kv[0], ":")
		if len(serviceIDOperationRegexPair) != 2 {
			return errors.Errorf("%s must be formatted as serviceID:operationRegex", kv[0])
		}
		rateBurstPair := strings.Split(kv[1], ":")
		if len(rateBurstPair) != 2 {
			return errors.Errorf("%s must be formatted as rate:burst", kv[1])
		}
		serviceID := serviceIDOperationRegexPair[0]
		operationPtn, err := regexp.Compile(serviceIDOperationRegexPair[1])
		if err != nil {
			return errors.Errorf("%s must be valid regex expression for operation", serviceIDOperationRegexPair[1])
		}
		r, err := strconv.ParseFloat(rateBurstPair[0], 64)
		if err != nil {
			return errors.Errorf("%s must be valid float number as rate for operations per second", rateBurstPair[0])
		}
		burst, err := strconv.Atoi(rateBurstPair[1])
		if err != nil {
			return errors.Errorf("%s must be valid integer as burst for operations", rateBurstPair[1])
		}
		valueOverride[serviceID] = append(valueOverride[serviceID], throttleConfig{
			operationPtn: operationPtn,
			r:            rate.Limit(r),
			burst:        burst,
		})
	}

	if c.value == nil {
		c.value = make(map[string][]throttleConfig)
	}
	for k, v := range valueOverride {
		c.value[k] = v
	}
	return nil
}