2024-07-15 06:47:39 +00:00
// Licensed to the LF AI & Data foundation under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
2022-02-08 12:57:47 +00:00
// with the License. You may obtain a copy of the License at
//
2024-07-15 06:47:39 +00:00
// http://www.apache.org/licenses/LICENSE-2.0
2022-02-08 12:57:47 +00:00
//
2024-07-15 06:47:39 +00:00
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
2022-02-08 12:57:47 +00:00
package paramtable
import (
2022-06-22 14:22:13 +00:00
"fmt"
2022-02-08 12:57:47 +00:00
"strconv"
2024-07-19 09:37:40 +00:00
"time"
2022-02-08 12:57:47 +00:00
"go.uber.org/zap"
2024-07-19 09:37:40 +00:00
"google.golang.org/grpc"
"google.golang.org/grpc/backoff"
"google.golang.org/grpc/keepalive"
2023-04-06 11:14:32 +00:00
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/funcutil"
2022-02-08 12:57:47 +00:00
)
const (
// DefaultServerMaxSendSize defines the maximum size of data per grpc request can send by server side.
2022-12-07 02:07:18 +00:00
DefaultServerMaxSendSize = 512 * 1024 * 1024
2022-02-08 12:57:47 +00:00
// DefaultServerMaxRecvSize defines the maximum size of data per grpc request can receive by server side.
2024-01-05 07:56:47 +00:00
DefaultServerMaxRecvSize = 256 * 1024 * 1024
2022-02-08 12:57:47 +00:00
// DefaultClientMaxSendSize defines the maximum size of data per grpc request can send by client side.
2023-01-13 02:55:41 +00:00
DefaultClientMaxSendSize = 256 * 1024 * 1024
2022-02-08 12:57:47 +00:00
// DefaultClientMaxRecvSize defines the maximum size of data per grpc request can receive by client side.
2024-01-05 07:56:47 +00:00
DefaultClientMaxRecvSize = 512 * 1024 * 1024
2022-05-05 02:35:50 +00:00
// DefaultLogLevel defines the log level of grpc
DefaultLogLevel = "WARNING"
// Grpc Timeout related configs
2023-05-29 02:03:28 +00:00
DefaultDialTimeout = 200
2022-12-16 07:59:23 +00:00
DefaultKeepAliveTime = 10000
DefaultKeepAliveTimeout = 20000
2022-05-10 12:05:53 +00:00
2022-06-22 14:22:13 +00:00
// Grpc retry policy
2023-09-06 09:43:14 +00:00
DefaultMaxAttempts = 10
DefaultInitialBackoff float64 = 0.2
DefaultMaxBackoff float64 = 10
2023-10-24 14:14:14 +00:00
DefaultCompressionEnabled bool = false
2023-01-13 02:55:41 +00:00
2022-05-10 12:05:53 +00:00
ProxyInternalPort = 19529
ProxyExternalPort = 19530
2022-02-08 12:57:47 +00:00
)
2023-02-26 03:31:49 +00:00
// /////////////////////////////////////////////////////////////////////////////
2022-02-08 12:57:47 +00:00
// --- grpc ---
type grpcConfig struct {
2022-12-16 07:59:23 +00:00
Domain string ` refreshable:"false" `
IP string ` refreshable:"false" `
TLSMode ParamItem ` refreshable:"false" `
2024-04-16 08:17:19 +00:00
IPItem ParamItem ` refreshable:"false" `
2022-12-16 07:59:23 +00:00
Port ParamItem ` refreshable:"false" `
InternalPort ParamItem ` refreshable:"false" `
ServerPemPath ParamItem ` refreshable:"false" `
ServerKeyPath ParamItem ` refreshable:"false" `
CaPemPath ParamItem ` refreshable:"false" `
2022-02-08 12:57:47 +00:00
}
2022-12-16 07:59:23 +00:00
func ( p * grpcConfig ) init ( domain string , base * BaseTable ) {
2022-02-08 12:57:47 +00:00
p . Domain = domain
2024-04-16 08:17:19 +00:00
p . IPItem = ParamItem {
Key : p . Domain + ".ip" ,
Version : "2.3.3" ,
2024-08-01 04:38:13 +00:00
Doc : "TCP/IP address of " + p . Domain + ". If not specified, use the first unicastable address" ,
2024-04-16 08:17:19 +00:00
Export : true ,
2023-09-20 03:49:25 +00:00
}
2024-04-16 08:17:19 +00:00
p . IPItem . Init ( base . mgr )
p . IP = funcutil . GetIP ( p . IPItem . GetValue ( ) )
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
p . Port = ParamItem {
Key : p . Domain + ".port" ,
Version : "2.0.0" ,
DefaultValue : strconv . FormatInt ( ProxyExternalPort , 10 ) ,
2024-08-01 04:38:13 +00:00
Doc : "TCP port of " + p . Domain ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . Port . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
p . InternalPort = ParamItem {
Key : p . Domain + ".internalPort" ,
Version : "2.0.0" ,
DefaultValue : strconv . FormatInt ( ProxyInternalPort , 10 ) ,
}
p . InternalPort . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
p . TLSMode = ParamItem {
Key : "common.security.tlsMode" ,
Version : "2.0.0" ,
DefaultValue : "0" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . TLSMode . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
p . ServerPemPath = ParamItem {
Key : "tls.serverPemPath" ,
Version : "2.0.0" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . ServerPemPath . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
p . ServerKeyPath = ParamItem {
Key : "tls.serverKeyPath" ,
Version : "2.0.0" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . ServerKeyPath . Init ( base . mgr )
2022-05-10 12:05:53 +00:00
2022-12-16 07:59:23 +00:00
p . CaPemPath = ParamItem {
Key : "tls.caPemPath" ,
Version : "2.0.0" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . CaPemPath . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
}
// GetAddress return grpc address
func ( p * grpcConfig ) GetAddress ( ) string {
2022-12-16 07:59:23 +00:00
return p . IP + ":" + p . Port . GetValue ( )
2022-02-08 12:57:47 +00:00
}
2022-05-10 12:05:53 +00:00
func ( p * grpcConfig ) GetInternalAddress ( ) string {
2022-12-16 07:59:23 +00:00
return p . IP + ":" + p . InternalPort . GetValue ( )
2022-05-10 12:05:53 +00:00
}
2022-02-08 12:57:47 +00:00
// GrpcServerConfig is configuration for grpc server.
type GrpcServerConfig struct {
grpcConfig
2022-12-16 07:59:23 +00:00
ServerMaxSendSize ParamItem ` refreshable:"false" `
ServerMaxRecvSize ParamItem ` refreshable:"false" `
2023-09-26 02:15:25 +00:00
GracefulStopTimeout ParamItem ` refreshable:"true" `
2022-02-08 12:57:47 +00:00
}
2022-12-16 07:59:23 +00:00
func ( p * GrpcServerConfig ) Init ( domain string , base * BaseTable ) {
p . grpcConfig . init ( domain , base )
maxSendSize := strconv . FormatInt ( DefaultServerMaxSendSize , 10 )
p . ServerMaxSendSize = ParamItem {
Key : p . Domain + ".grpc.serverMaxSendSize" ,
DefaultValue : maxSendSize ,
FallbackKeys : [ ] string { "grpc.serverMaxSendSize" } ,
Formatter : func ( v string ) string {
if v == "" {
return maxSendSize
}
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.serverMaxSendSize, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.serverMaxSendSize" , v ) ,
zap . Error ( err ) )
return maxSendSize
}
return v
} ,
2024-08-01 04:38:13 +00:00
Doc : "The maximum size of each RPC request that the " + domain + " can send, unit: byte" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-02-08 12:57:47 +00:00
}
2022-12-16 07:59:23 +00:00
p . ServerMaxSendSize . Init ( base . mgr )
maxRecvSize := strconv . FormatInt ( DefaultServerMaxRecvSize , 10 )
p . ServerMaxRecvSize = ParamItem {
Key : p . Domain + ".grpc.serverMaxRecvSize" ,
DefaultValue : maxRecvSize ,
FallbackKeys : [ ] string { "grpc.serverMaxRecvSize" } ,
Formatter : func ( v string ) string {
if v == "" {
return maxRecvSize
}
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.serverMaxRecvSize, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.serverMaxRecvSize" , v ) ,
zap . Error ( err ) )
return maxRecvSize
}
return v
} ,
2024-08-01 04:38:13 +00:00
Doc : "The maximum size of each RPC request that the " + domain + " can receive, unit: byte" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-02-08 12:57:47 +00:00
}
2022-12-16 07:59:23 +00:00
p . ServerMaxRecvSize . Init ( base . mgr )
2023-09-26 02:15:25 +00:00
p . GracefulStopTimeout = ParamItem {
Key : "grpc.gracefulStopTimeout" ,
Version : "2.3.1" ,
DefaultValue : "10" ,
Doc : "second, time to wait graceful stop finish" ,
Export : true ,
}
p . GracefulStopTimeout . Init ( base . mgr )
2022-02-08 12:57:47 +00:00
}
// GrpcClientConfig is configuration for grpc client.
type GrpcClientConfig struct {
grpcConfig
2023-01-13 02:55:41 +00:00
CompressionEnabled ParamItem ` refreshable:"false" `
2022-12-16 07:59:23 +00:00
ClientMaxSendSize ParamItem ` refreshable:"false" `
ClientMaxRecvSize ParamItem ` refreshable:"false" `
2022-02-08 12:57:47 +00:00
2022-12-16 07:59:23 +00:00
DialTimeout ParamItem ` refreshable:"false" `
KeepAliveTime ParamItem ` refreshable:"false" `
KeepAliveTimeout ParamItem ` refreshable:"false" `
2022-02-08 12:57:47 +00:00
2023-09-13 07:01:18 +00:00
MaxAttempts ParamItem ` refreshable:"false" `
InitialBackoff ParamItem ` refreshable:"false" `
MaxBackoff ParamItem ` refreshable:"false" `
2024-07-19 09:37:40 +00:00
BackoffMultiplier ParamItem ` refreshable:"false" `
2023-09-13 07:01:18 +00:00
MinResetInterval ParamItem ` refreshable:"false" `
MaxCancelError ParamItem ` refreshable:"false" `
MinSessionCheckInterval ParamItem ` refreshable:"false" `
2022-02-08 12:57:47 +00:00
}
2022-12-16 07:59:23 +00:00
func ( p * GrpcClientConfig ) Init ( domain string , base * BaseTable ) {
p . grpcConfig . init ( domain , base )
maxSendSize := strconv . FormatInt ( DefaultClientMaxSendSize , 10 )
p . ClientMaxSendSize = ParamItem {
Key : p . Domain + ".grpc.clientMaxSendSize" ,
DefaultValue : maxSendSize ,
FallbackKeys : [ ] string { "grpc.clientMaxSendSize" } ,
Formatter : func ( v string ) string {
if v == "" {
return maxSendSize
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.clientMaxSendSize, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.clientMaxSendSize" , v ) ,
zap . Error ( err ) )
return maxSendSize
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2024-08-01 04:38:13 +00:00
Doc : "The maximum size of each RPC request that the clients on " + domain + " can send, unit: byte" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . ClientMaxSendSize . Init ( base . mgr )
maxRecvSize := strconv . FormatInt ( DefaultClientMaxRecvSize , 10 )
p . ClientMaxRecvSize = ParamItem {
Key : p . Domain + ".grpc.clientMaxRecvSize" ,
DefaultValue : maxRecvSize ,
FallbackKeys : [ ] string { "grpc.clientMaxRecvSize" } ,
Formatter : func ( v string ) string {
if v == "" {
return maxRecvSize
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.clientMaxRecvSize, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.clientMaxRecvSize" , v ) ,
zap . Error ( err ) )
return maxRecvSize
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2024-08-01 04:38:13 +00:00
Doc : "The maximum size of each RPC request that the clients on " + domain + " can receive, unit: byte" ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . ClientMaxRecvSize . Init ( base . mgr )
dialTimeout := strconv . FormatInt ( DefaultDialTimeout , 10 )
p . DialTimeout = ParamItem {
Key : "grpc.client.dialTimeout" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return dialTimeout
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.dialTimeout, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.dialTimeout" , v ) )
return dialTimeout
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . DialTimeout . Init ( base . mgr )
keepAliveTimeout := strconv . FormatInt ( DefaultKeepAliveTimeout , 10 )
p . KeepAliveTimeout = ParamItem {
Key : "grpc.client.keepAliveTimeout" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return keepAliveTimeout
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.keepAliveTimeout, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.keepAliveTimeout" , v ) )
return keepAliveTimeout
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . KeepAliveTimeout . Init ( base . mgr )
keepAliveTime := strconv . FormatInt ( DefaultKeepAliveTime , 10 )
p . KeepAliveTime = ParamItem {
Key : "grpc.client.keepAliveTime" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return keepAliveTime
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.keepAliveTime, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.keepAliveTime" , v ) )
return keepAliveTime
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . KeepAliveTime . Init ( base . mgr )
maxAttempts := strconv . FormatInt ( DefaultMaxAttempts , 10 )
p . MaxAttempts = ParamItem {
Key : "grpc.client.maxMaxAttempts" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return maxAttempts
2022-06-22 14:22:13 +00:00
}
2023-09-06 09:43:14 +00:00
_ , err := strconv . Atoi ( v )
2022-12-16 07:59:23 +00:00
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.maxMaxAttempts, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.maxMaxAttempts" , v ) )
return maxAttempts
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . MaxAttempts . Init ( base . mgr )
initialBackoff := fmt . Sprintf ( "%f" , DefaultInitialBackoff )
p . InitialBackoff = ParamItem {
Key : "grpc.client.initialBackoff" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return initialBackoff
2022-06-22 14:22:13 +00:00
}
2023-09-06 09:43:14 +00:00
_ , err := strconv . ParseFloat ( v , 64 )
2022-12-16 07:59:23 +00:00
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.initialBackoff, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.initialBackoff" , v ) )
return initialBackoff
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . InitialBackoff . Init ( base . mgr )
maxBackoff := fmt . Sprintf ( "%f" , DefaultMaxBackoff )
p . MaxBackoff = ParamItem {
Key : "grpc.client.maxBackoff" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return maxBackoff
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
_ , err := strconv . ParseFloat ( v , 64 )
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.maxBackoff, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.maxBackoff" , v ) )
return maxBackoff
2022-06-22 14:22:13 +00:00
}
2022-12-16 07:59:23 +00:00
return v
2022-06-22 14:22:13 +00:00
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2022-12-16 07:59:23 +00:00
}
p . MaxBackoff . Init ( base . mgr )
2024-07-19 09:37:40 +00:00
p . BackoffMultiplier = ParamItem {
Key : "grpc.client.backoffMultiplier" ,
Version : "2.5.0" ,
DefaultValue : "2.0" ,
Export : true ,
}
p . BackoffMultiplier . Init ( base . mgr )
2023-01-13 02:55:41 +00:00
compressionEnabled := fmt . Sprintf ( "%t" , DefaultCompressionEnabled )
p . CompressionEnabled = ParamItem {
Key : "grpc.client.compressionEnabled" ,
Version : "2.0.0" ,
Formatter : func ( v string ) string {
if v == "" {
return compressionEnabled
}
_ , err := strconv . ParseBool ( v )
if err != nil {
log . Warn ( "Failed to convert int when parsing grpc.client.compressionEnabled, set to default" ,
zap . String ( "role" , p . Domain ) ,
zap . String ( "grpc.client.compressionEnabled" , v ) )
2023-09-06 09:43:14 +00:00
return compressionEnabled
2023-01-13 02:55:41 +00:00
}
return v
} ,
2023-02-23 03:37:46 +00:00
Export : true ,
2023-01-13 02:55:41 +00:00
}
p . CompressionEnabled . Init ( base . mgr )
2023-09-13 07:01:18 +00:00
p . MinResetInterval = ParamItem {
Key : "grpc.client.minResetInterval" ,
DefaultValue : "1000" ,
Formatter : func ( v string ) string {
if v == "" {
return "1000"
}
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.client.minResetInterval, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.client.minResetInterval" , v ) ,
zap . Error ( err ) )
return "1000"
}
return v
} ,
Export : true ,
}
p . MinResetInterval . Init ( base . mgr )
p . MinSessionCheckInterval = ParamItem {
Key : "grpc.client.minSessionCheckInterval" ,
DefaultValue : "200" ,
Formatter : func ( v string ) string {
if v == "" {
return "200"
}
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.client.minSessionCheckInterval, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.client.minSessionCheckInterval" , v ) ,
zap . Error ( err ) )
return "200"
}
return v
} ,
Export : true ,
}
p . MinSessionCheckInterval . Init ( base . mgr )
p . MaxCancelError = ParamItem {
Key : "grpc.client.maxCancelError" ,
DefaultValue : "32" ,
Formatter : func ( v string ) string {
if v == "" {
return "32"
}
_ , err := strconv . Atoi ( v )
if err != nil {
log . Warn ( "Failed to parse grpc.client.maxCancelError, set to default" ,
zap . String ( "role" , p . Domain ) , zap . String ( "grpc.client.maxCancelError" , v ) ,
zap . Error ( err ) )
return "32"
}
return v
} ,
Export : true ,
}
p . MaxCancelError . Init ( base . mgr )
2022-05-05 02:35:50 +00:00
}
2024-07-19 09:37:40 +00:00
// GetDialOptionsFromConfig returns grpc dial options from config.
func ( p * GrpcClientConfig ) GetDialOptionsFromConfig ( ) [ ] grpc . DialOption {
compress := ""
if p . CompressionEnabled . GetAsBool ( ) {
compress = "zstd"
}
return [ ] grpc . DialOption {
grpc . WithDefaultCallOptions (
grpc . MaxCallRecvMsgSize ( p . ClientMaxRecvSize . GetAsInt ( ) ) ,
grpc . MaxCallSendMsgSize ( p . ClientMaxSendSize . GetAsInt ( ) ) ,
grpc . UseCompressor ( compress ) ,
) ,
grpc . WithKeepaliveParams ( keepalive . ClientParameters {
Time : p . KeepAliveTime . GetAsDuration ( time . Millisecond ) ,
Timeout : p . KeepAliveTimeout . GetAsDuration ( time . Millisecond ) ,
PermitWithoutStream : true ,
} ) ,
grpc . WithConnectParams ( grpc . ConnectParams {
Backoff : backoff . Config {
BaseDelay : 100 * time . Millisecond ,
Multiplier : 1.6 ,
Jitter : 0.2 ,
MaxDelay : 3 * time . Second ,
} ,
MinConnectTimeout : p . DialTimeout . GetAsDuration ( time . Millisecond ) ,
} ) ,
}
}
// GetDefaultRetryPolicy returns default grpc retry policy.
func ( p * GrpcClientConfig ) GetDefaultRetryPolicy ( ) map [ string ] interface { } {
return map [ string ] interface { } {
"maxAttempts" : p . MaxAttempts . GetAsInt ( ) ,
"initialBackoff" : fmt . Sprintf ( "%fs" , p . InitialBackoff . GetAsFloat ( ) ) ,
"maxBackoff" : fmt . Sprintf ( "%fs" , p . MaxBackoff . GetAsFloat ( ) ) ,
"backoffMultiplier" : p . BackoffMultiplier . GetAsFloat ( ) ,
}
}
2024-11-19 22:00:32 +00:00
type InternalTLSConfig struct {
InternalTLSEnabled ParamItem ` refreshable:"false" `
InternalTLSServerPemPath ParamItem ` refreshable:"false" `
InternalTLSServerKeyPath ParamItem ` refreshable:"false" `
InternalTLSCaPemPath ParamItem ` refreshable:"false" `
2024-12-04 06:56:47 +00:00
InternalTLSSNI ParamItem ` refreshable:"false" `
2024-11-19 22:00:32 +00:00
}
func ( p * InternalTLSConfig ) Init ( base * BaseTable ) {
p . InternalTLSEnabled = ParamItem {
Key : "common.security.internaltlsEnabled" ,
2024-12-04 06:56:47 +00:00
Version : "2.5.0" ,
2024-11-19 22:00:32 +00:00
DefaultValue : "false" ,
Export : true ,
}
p . InternalTLSEnabled . Init ( base . mgr )
p . InternalTLSServerPemPath = ParamItem {
Key : "internaltls.serverPemPath" ,
2024-12-04 06:56:47 +00:00
Version : "2.5.0" ,
2024-11-19 22:00:32 +00:00
Export : true ,
}
p . InternalTLSServerPemPath . Init ( base . mgr )
p . InternalTLSServerKeyPath = ParamItem {
Key : "internaltls.serverKeyPath" ,
2024-12-04 06:56:47 +00:00
Version : "2.5.0" ,
2024-11-19 22:00:32 +00:00
Export : true ,
}
p . InternalTLSServerKeyPath . Init ( base . mgr )
p . InternalTLSCaPemPath = ParamItem {
Key : "internaltls.caPemPath" ,
2024-12-04 06:56:47 +00:00
Version : "2.5.0" ,
2024-11-19 22:00:32 +00:00
Export : true ,
}
p . InternalTLSCaPemPath . Init ( base . mgr )
2024-12-04 06:56:47 +00:00
p . InternalTLSSNI = ParamItem {
Key : "internaltls.sni" ,
Version : "2.5.0" ,
Export : true ,
Doc : "The server name indication (SNI) for internal TLS, should be the same as the name provided by the certificates ref: https://en.wikipedia.org/wiki/Server_Name_Indication" ,
}
p . InternalTLSSNI . Init ( base . mgr )
2024-11-19 22:00:32 +00:00
}