blob: 62ed0f2f120055bf363b43ba098487486a63cd28 [file] [log] [blame]
William Kurkianea869482019-04-09 15:16:11 -04001/*
2 *
3 * Copyright 2018 gRPC authors.
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * 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// Package envconfig contains grpc settings configured by environment variables.
20package envconfig
21
22import (
23 "os"
24 "strings"
25)
26
27const (
28 prefix = "GRPC_GO_"
29 retryStr = prefix + "RETRY"
30 requireHandshakeStr = prefix + "REQUIRE_HANDSHAKE"
31)
32
33// RequireHandshakeSetting describes the settings for handshaking.
34type RequireHandshakeSetting int
35
36const (
37 // RequireHandshakeHybrid (default, deprecated) indicates to not wait for
38 // handshake before considering a connection ready, but wait before
39 // considering successful.
40 RequireHandshakeHybrid RequireHandshakeSetting = iota
41 // RequireHandshakeOn (default after the 1.17 release) indicates to wait
42 // for handshake before considering a connection ready/successful.
43 RequireHandshakeOn
44 // RequireHandshakeOff indicates to not wait for handshake before
45 // considering a connection ready/successful.
46 RequireHandshakeOff
47)
48
49var (
50 // Retry is set if retry is explicitly enabled via "GRPC_GO_RETRY=on".
51 Retry = strings.EqualFold(os.Getenv(retryStr), "on")
52 // RequireHandshake is set based upon the GRPC_GO_REQUIRE_HANDSHAKE
53 // environment variable.
54 //
55 // Will be removed after the 1.18 release.
56 RequireHandshake RequireHandshakeSetting
57)
58
59func init() {
60 switch strings.ToLower(os.Getenv(requireHandshakeStr)) {
61 case "on":
62 fallthrough
63 default:
64 RequireHandshake = RequireHandshakeOn
65 case "off":
66 RequireHandshake = RequireHandshakeOff
67 case "hybrid":
68 // Will be removed after the 1.17 release.
69 RequireHandshake = RequireHandshakeHybrid
70 }
71}