dubbo.apache.org/dubbo-go/v3@v3.1.1/xds/balancer/ringhash/config.go (about)

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   * contributor license agreements.  See the NOTICE file distributed with
     4   * this work for additional information regarding copyright ownership.
     5   * The ASF licenses this file to You under the Apache License, Version 2.0
     6   * (the "License"); you may not use this file except in compliance with
     7   * the License.  You may obtain a copy of the License at
     8   *
     9   *     http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  
    18  /*
    19   *
    20   * Copyright 2021 gRPC authors.
    21   *
    22   */
    23  
    24  package ringhash
    25  
    26  import (
    27  	"encoding/json"
    28  	"fmt"
    29  )
    30  
    31  import (
    32  	"google.golang.org/grpc/serviceconfig"
    33  )
    34  
    35  // LBConfig is the balancer config for ring_hash balancer.
    36  type LBConfig struct {
    37  	serviceconfig.LoadBalancingConfig `json:"-"`
    38  
    39  	MinRingSize uint64 `json:"minRingSize,omitempty"`
    40  	MaxRingSize uint64 `json:"maxRingSize,omitempty"`
    41  }
    42  
    43  const (
    44  	defaultMinSize = 1024
    45  	defaultMaxSize = 8 * 1024 * 1024 // 8M
    46  )
    47  
    48  func parseConfig(c json.RawMessage) (*LBConfig, error) {
    49  	var cfg LBConfig
    50  	if err := json.Unmarshal(c, &cfg); err != nil {
    51  		return nil, err
    52  	}
    53  	if cfg.MinRingSize == 0 {
    54  		cfg.MinRingSize = defaultMinSize
    55  	}
    56  	if cfg.MaxRingSize == 0 {
    57  		cfg.MaxRingSize = defaultMaxSize
    58  	}
    59  	if cfg.MinRingSize > cfg.MaxRingSize {
    60  		return nil, fmt.Errorf("min %v is greater than max %v", cfg.MinRingSize, cfg.MaxRingSize)
    61  	}
    62  	return &cfg, nil
    63  }