github.com/m3db/m3@v1.5.0/src/x/server/options.go (about) 1 // Copyright (c) 2017 Uber Technologies, Inc. 2 // 3 // Permission is hereby granted, free of charge, to any person obtaining a copy 4 // of this software and associated documentation files (the "Software"), to deal 5 // in the Software without restriction, including without limitation the rights 6 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 // copies of the Software, and to permit persons to whom the Software is 8 // furnished to do so, subject to the following conditions: 9 // 10 // The above copyright notice and this permission notice shall be included in 11 // all copies or substantial portions of the Software. 12 // 13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 // THE SOFTWARE. 20 21 package server 22 23 import ( 24 "time" 25 26 "github.com/m3db/m3/src/x/instrument" 27 xnet "github.com/m3db/m3/src/x/net" 28 "github.com/m3db/m3/src/x/retry" 29 ) 30 31 const ( 32 // By default keepAlives are enabled for TCP connections. 33 defaultTCPConnectionKeepAlive = true 34 35 // By default the keep alive period is fairly short for fast 36 // breaking of stale connections. 37 defaultTCPConnectionKeepAlivePeriod = 10 * time.Second 38 ) 39 40 // Options provide a set of server options 41 type Options interface { 42 // SetInstrumentOptions sets the instrument options 43 SetInstrumentOptions(value instrument.Options) Options 44 45 // InstrumentOptions returns the instrument options 46 InstrumentOptions() instrument.Options 47 48 // SetRetryOptions sets the retry options 49 SetRetryOptions(value retry.Options) Options 50 51 // RetryOptions returns the retry options 52 RetryOptions() retry.Options 53 54 // SetTCPConnectionKeepAlive sets the keep alive state for tcp connections. 55 SetTCPConnectionKeepAlive(value bool) Options 56 57 // TCPConnectionKeepAlive returns the keep alive state for tcp connections. 58 TCPConnectionKeepAlive() bool 59 60 // SetTCPConnectionKeepAlivePeriod sets the keep alive period for tcp connections. 61 // NB(xichen): on Linux this modifies both the idle time (i.e,. the time when the 62 // last packet is sent from the client and when the first keepAlive probe is sent) 63 // as well as the interval between keepAlive probes. 64 SetTCPConnectionKeepAlivePeriod(value time.Duration) Options 65 66 // TCPConnectionKeepAlivePeriod returns the keep alive period for tcp connections. 67 TCPConnectionKeepAlivePeriod() time.Duration 68 69 // SetListenerOptions sets the listener options for the server. 70 SetListenerOptions(value xnet.ListenerOptions) Options 71 72 // ListenerOptions sets the listener options for the server. 73 ListenerOptions() xnet.ListenerOptions 74 } 75 76 type options struct { 77 instrumentOpts instrument.Options 78 retryOpts retry.Options 79 tcpConnectionKeepAlive bool 80 tcpConnectionKeepAlivePeriod time.Duration 81 listenerOpts xnet.ListenerOptions 82 } 83 84 // NewOptions creates a new set of server options 85 func NewOptions() Options { 86 return &options{ 87 instrumentOpts: instrument.NewOptions(), 88 retryOpts: retry.NewOptions(), 89 tcpConnectionKeepAlive: defaultTCPConnectionKeepAlive, 90 tcpConnectionKeepAlivePeriod: defaultTCPConnectionKeepAlivePeriod, 91 listenerOpts: xnet.NewListenerOptions(), 92 } 93 } 94 95 func (o *options) SetInstrumentOptions(value instrument.Options) Options { 96 opts := *o 97 opts.instrumentOpts = value 98 return &opts 99 } 100 101 func (o *options) InstrumentOptions() instrument.Options { 102 return o.instrumentOpts 103 } 104 105 func (o *options) SetRetryOptions(value retry.Options) Options { 106 opts := *o 107 opts.retryOpts = value 108 return &opts 109 } 110 111 func (o *options) RetryOptions() retry.Options { 112 return o.retryOpts 113 } 114 115 func (o *options) SetTCPConnectionKeepAlive(value bool) Options { 116 opts := *o 117 opts.tcpConnectionKeepAlive = value 118 return &opts 119 } 120 121 func (o *options) TCPConnectionKeepAlive() bool { 122 return o.tcpConnectionKeepAlive 123 } 124 125 func (o *options) SetTCPConnectionKeepAlivePeriod(value time.Duration) Options { 126 opts := *o 127 opts.tcpConnectionKeepAlivePeriod = value 128 return &opts 129 } 130 131 func (o *options) TCPConnectionKeepAlivePeriod() time.Duration { 132 return o.tcpConnectionKeepAlivePeriod 133 } 134 135 func (o *options) SetListenerOptions(value xnet.ListenerOptions) Options { 136 opts := *o 137 opts.listenerOpts = value 138 return &opts 139 } 140 141 func (o *options) ListenerOptions() xnet.ListenerOptions { 142 return o.listenerOpts 143 }