181 lines
4.3 KiB
Go
181 lines
4.3 KiB
Go
/**
|
|
* Licensed 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 realis
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/apache/thrift/lib/go/thrift"
|
|
"github.com/aurora-scheduler/gorealis/v2/gen-go/apache/aurora"
|
|
)
|
|
|
|
type clientConfig struct {
|
|
username, password string
|
|
url string
|
|
timeout time.Duration
|
|
transportProtocol TransportProtocol
|
|
cluster *Cluster
|
|
backoff Backoff
|
|
transport thrift.TTransport
|
|
protoFactory thrift.TProtocolFactory
|
|
logger *LevelLogger
|
|
insecureSkipVerify bool
|
|
certsPath string
|
|
clientKey, clientCert string
|
|
options []ClientOption
|
|
debug bool
|
|
trace bool
|
|
zkOptions []ZKOpt
|
|
failOnPermanentErrors bool
|
|
}
|
|
|
|
var defaultBackoff = Backoff{
|
|
Steps: 3,
|
|
Duration: 10 * time.Second,
|
|
Factor: 5.0,
|
|
Jitter: 0.1,
|
|
}
|
|
|
|
var defaultSlaPolicy = aurora.SlaPolicy{
|
|
PercentageSlaPolicy: &aurora.PercentageSlaPolicy{
|
|
Percentage: 66,
|
|
DurationSecs: 300,
|
|
},
|
|
}
|
|
|
|
const defaultSlaDrainTimeoutSecs = 900
|
|
|
|
type TransportProtocol int
|
|
|
|
const (
|
|
unsetProtocol TransportProtocol = iota
|
|
jsonProtocol
|
|
binaryProtocol
|
|
)
|
|
|
|
type ClientOption func(*clientConfig)
|
|
|
|
// clientConfig sets for options in clientConfig.
|
|
func BasicAuth(username, password string) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.username = username
|
|
config.password = password
|
|
}
|
|
}
|
|
|
|
func SchedulerUrl(url string) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.url = url
|
|
}
|
|
}
|
|
|
|
func Timeout(timeout time.Duration) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.timeout = timeout
|
|
}
|
|
}
|
|
|
|
func ZKCluster(cluster *Cluster) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.cluster = cluster
|
|
}
|
|
}
|
|
|
|
func ZKUrl(url string) ClientOption {
|
|
|
|
opts := []ZKOpt{ZKEndpoints(strings.Split(url, ",")...), ZKPath("/aurora/scheduler")}
|
|
|
|
return func(config *clientConfig) {
|
|
if config.zkOptions == nil {
|
|
config.zkOptions = opts
|
|
} else {
|
|
config.zkOptions = append(config.zkOptions, opts...)
|
|
}
|
|
}
|
|
}
|
|
|
|
func ThriftJSON() ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.transportProtocol = jsonProtocol
|
|
}
|
|
}
|
|
|
|
func ThriftBinary() ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.transportProtocol = binaryProtocol
|
|
}
|
|
}
|
|
|
|
func BackOff(b Backoff) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.backoff = b
|
|
}
|
|
}
|
|
|
|
func InsecureSkipVerify(InsecureSkipVerify bool) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.insecureSkipVerify = InsecureSkipVerify
|
|
}
|
|
}
|
|
|
|
func CertsPath(certspath string) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.certsPath = certspath
|
|
}
|
|
}
|
|
|
|
func ClientCerts(clientKey, clientCert string) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.clientKey, config.clientCert = clientKey, clientCert
|
|
}
|
|
}
|
|
|
|
// Use this option if you'd like to override default settings for connecting to Zookeeper.
|
|
// See zk.go for what is possible to set as an option.
|
|
func ZookeeperOptions(opts ...ZKOpt) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.zkOptions = opts
|
|
}
|
|
}
|
|
|
|
// Using the word set to avoid name collision with Interface.
|
|
func SetLogger(l Logger) ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.logger = &LevelLogger{Logger: l}
|
|
}
|
|
}
|
|
|
|
// Enable debug statements.
|
|
func Debug() ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.debug = true
|
|
}
|
|
}
|
|
|
|
// Enable trace statements.
|
|
func Trace() ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.trace = true
|
|
}
|
|
}
|
|
|
|
// FailOnPermanentErrors - If the client encounters a connection error the standard library
|
|
// considers permanent, stop retrying and return an error to the user.
|
|
func FailOnPermanentErrors() ClientOption {
|
|
return func(config *clientConfig) {
|
|
config.failOnPermanentErrors = true
|
|
}
|
|
}
|