blob: 8e0cf707d3fb27cbc61dc3430de2e3e58c22a8ac [file] [log] [blame]
/*
* Portions of this file are derived from the Istio project:
* https://github.com/istio/istio/blob/master/pkg/keepalive/options.go
*
* Licensed to the Apache Software Foundation (ASF) 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 with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 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.
*/
package keepalive
import (
"github.com/apache/dubbo-kubernetes/pkg/env"
"github.com/spf13/cobra"
"google.golang.org/grpc"
"google.golang.org/grpc/keepalive"
"math"
"time"
)
const (
Infinity = time.Duration(math.MaxInt64)
)
var (
grpcKeepaliveInterval = env.Register("GRPC_KEEPALIVE_INTERVAL", 30*time.Second, "gRPC Keepalive Interval").Get()
grpcKeepaliveTimeout = env.Register("GRPC_KEEPALIVE_TIMEOUT", 10*time.Second, "gRPC Keepalive Timeout").Get()
)
type Options struct {
Time time.Duration
Timeout time.Duration
MaxServerConnectionAge time.Duration // default value is infinity
MaxServerConnectionAgeGrace time.Duration // default value 10s
}
func (o *Options) ConvertToClientOption() grpc.DialOption {
return grpc.WithKeepaliveParams(keepalive.ClientParameters{
Time: o.Time,
Timeout: o.Timeout,
})
}
func DefaultOption() *Options {
return &Options{
Time: grpcKeepaliveInterval,
Timeout: grpcKeepaliveTimeout,
MaxServerConnectionAge: Infinity,
MaxServerConnectionAgeGrace: 10 * time.Second,
}
}
func (o *Options) AttachCobraFlags(cmd *cobra.Command) {
cmd.PersistentFlags().DurationVar(&o.Time, "keepaliveInterval", o.Time,
"The time interval if no activity on the connection it pings the peer to see if the transport is alive")
cmd.PersistentFlags().DurationVar(&o.Timeout, "keepaliveTimeout", o.Timeout,
"After having pinged for keepalive check, the client/server waits for a duration of keepaliveTimeout "+
"and if no activity is seen even after that the connection is closed.")
cmd.PersistentFlags().DurationVar(&o.MaxServerConnectionAge, "keepaliveMaxServerConnectionAge",
o.MaxServerConnectionAge, "Maximum duration a connection will be kept open on the server before a graceful close.")
}