blob: 8c5300675f529535653056faa8354d0cb2e1bae1 [file] [log] [blame]
khenaidoobf6e7bb2018-08-14 22:27:29 -04001/*
Joey Armstrong7a9af442024-01-03 19:26:36 -05002 * Copyright 2018-2024 Open Networking Foundation (ONF) and the ONF Contributors
khenaidoobf6e7bb2018-08-14 22:27:29 -04003
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7
8 * http://www.apache.org/licenses/LICENSE-2.0
9
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
npujar1d86a522019-11-14 17:11:16 +053016
khenaidoocfee5f42018-07-19 22:47:38 -040017package config
18
19import (
khenaidoocfee5f42018-07-19 22:47:38 -040020 "flag"
David K. Bainbridge6080c172021-07-24 00:22:28 +000021 "os"
Girish Kumar4d3887d2019-11-22 14:22:05 +000022 "time"
khenaidoocfee5f42018-07-19 22:47:38 -040023)
24
khenaidoo5c11af72018-07-20 17:21:05 -040025// RW Core service default constants
khenaidoocfee5f42018-07-19 22:47:38 -040026const (
Abhay Kumar4e0f37b2024-07-12 09:33:01 +053027 KVStoreName = "etcd"
khenaidoocfee5f42018-07-19 22:47:38 -040028)
29
khenaidoo5c11af72018-07-20 17:21:05 -040030// RWCoreFlags represents the set of configurations used by the read-write core service
khenaidoocfee5f42018-07-19 22:47:38 -040031type RWCoreFlags struct {
32 // Command line parameters
khenaidood948f772021-08-11 17:49:24 -040033 GrpcNBIAddress string
34 GrpcSBIAddress string
khenaidoo5e4fca32021-05-12 16:02:23 -040035 KafkaClusterAddress string
36 KVStoreType string
khenaidoo5e4fca32021-05-12 16:02:23 -040037 KVStoreAddress string
khenaidoo5e4fca32021-05-12 16:02:23 -040038 EventTopic string
39 LogLevel string
khenaidoo5e4fca32021-05-12 16:02:23 -040040 RWCoreKey string
41 RWCoreCert string
42 RWCoreCA string
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +053043 ProbeAddress string
44 TraceAgentAddress string
45 VolthaStackID string
46 KVStoreTimeout time.Duration
47 EventTopicPartitions int
48 EventTopicReplicas int
khenaidood948f772021-08-11 17:49:24 -040049 InternalTimeout time.Duration
50 RPCTimeout time.Duration
Himani Chawla4b4bd252021-11-08 15:59:40 +053051 FlowTimeout time.Duration
khenaidoo5e4fca32021-05-12 16:02:23 -040052 MaxConnectionRetries int
53 ConnectionRetryInterval time.Duration
54 LiveProbeInterval time.Duration
55 NotLiveProbeInterval time.Duration
khenaidoo5e4fca32021-05-12 16:02:23 -040056 BackoffRetryInitialInterval time.Duration
57 BackoffRetryMaxElapsedTime time.Duration
58 BackoffRetryMaxInterval time.Duration
nikesh.krishnan0ded28d2023-06-28 12:36:32 +053059 PerRPCRetryTimeout time.Duration
60 MaxRetries uint
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +053061 Banner bool
62 DisplayVersionOnly bool
63 TraceEnabled bool
64 LogCorrelationEnabled bool
khenaidoocfee5f42018-07-19 22:47:38 -040065}
66
khenaidoo5c11af72018-07-20 17:21:05 -040067// ParseCommandArguments parses the arguments when running read-write core service
David K. Bainbridge6080c172021-07-24 00:22:28 +000068func (cf *RWCoreFlags) ParseCommandArguments(args []string) {
khenaidoocfee5f42018-07-19 22:47:38 -040069
David K. Bainbridge6080c172021-07-24 00:22:28 +000070 fs := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
khenaidoocfee5f42018-07-19 22:47:38 -040071
khenaidood948f772021-08-11 17:49:24 -040072 fs.StringVar(&cf.GrpcNBIAddress,
73 "grpc_nbi_address",
74 ":50057",
75 "GRPC NBI server - address")
khenaidoocfee5f42018-07-19 22:47:38 -040076
khenaidood948f772021-08-11 17:49:24 -040077 fs.StringVar(&cf.GrpcSBIAddress,
78 "grpc_sbi_address",
79 ":50058",
80 "GRPC SBI server - address")
khenaidoo5c11af72018-07-20 17:21:05 -040081
khenaidood948f772021-08-11 17:49:24 -040082 fs.StringVar(&cf.KafkaClusterAddress,
83 "kafka_cluster_address",
84 "127.0.0.1:9092",
85 "Kafka - Cluster messaging address")
khenaidoo5c11af72018-07-20 17:21:05 -040086
khenaidood948f772021-08-11 17:49:24 -040087 fs.StringVar(&cf.EventTopic,
88 "event_topic",
89 "voltha.events",
90 "RW Core Event topic")
khenaidoo5c11af72018-07-20 17:21:05 -040091
kesavand92fac102022-03-16 12:33:06 +053092 fs.IntVar(&cf.EventTopicPartitions,
93 "EventTopicPartitions",
kesavand26b6a552022-04-13 16:57:19 +053094 1,
kesavand92fac102022-03-16 12:33:06 +053095 "RW Core Event topic partitions")
96
97 fs.IntVar(&cf.EventTopicReplicas,
98 "EventTopicReplicas",
99 1,
100 "RW Core Event topic replicas")
101
khenaidood948f772021-08-11 17:49:24 -0400102 fs.StringVar(&cf.KVStoreType,
103 "kv_store_type",
Abhay Kumar4e0f37b2024-07-12 09:33:01 +0530104 KVStoreName,
khenaidood948f772021-08-11 17:49:24 -0400105 "KV store type")
Himani Chawlab4c25912020-11-12 17:16:38 +0530106
khenaidood948f772021-08-11 17:49:24 -0400107 fs.DurationVar(&cf.KVStoreTimeout,
108 "kv_store_request_timeout",
109 5*time.Second,
110 "The default timeout when making a kv store request")
khenaidoo79232702018-12-04 11:00:41 -0500111
khenaidood948f772021-08-11 17:49:24 -0400112 fs.StringVar(&cf.KVStoreAddress,
113 "kv_store_address",
114 "127.0.0.1:2379",
115 "KV store address")
khenaidoo5c11af72018-07-20 17:21:05 -0400116
khenaidood948f772021-08-11 17:49:24 -0400117 fs.StringVar(&cf.LogLevel,
118 "log_level",
119 "warn",
120 "Log level")
khenaidoo5c11af72018-07-20 17:21:05 -0400121
khenaidood948f772021-08-11 17:49:24 -0400122 fs.DurationVar(&(cf.InternalTimeout),
123 "internal_timeout",
124 5*time.Second,
125 "Core internal timeout")
khenaidoo5c11af72018-07-20 17:21:05 -0400126
khenaidood948f772021-08-11 17:49:24 -0400127 fs.DurationVar(&(cf.RPCTimeout),
128 "rpc_timeout",
129 5*time.Second,
130 "RPC timeout")
Richard Jankowskie4d77662018-10-17 13:53:21 -0400131
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +0530132 fs.DurationVar(&(cf.FlowTimeout), // Note flow time out will be considered for flows related rpc's not rpc timeout
Himani Chawla4b4bd252021-11-08 15:59:40 +0530133 "flow_timeout",
134 30*time.Second,
135 "Flow timeout")
136
khenaidood948f772021-08-11 17:49:24 -0400137 fs.BoolVar(&cf.Banner,
138 "banner",
139 false,
140 "Show startup banner log lines")
khenaidoo5c11af72018-07-20 17:21:05 -0400141
khenaidood948f772021-08-11 17:49:24 -0400142 fs.BoolVar(&cf.DisplayVersionOnly,
143 "version",
144 false,
145 "Show version information and exit")
khenaidoob6080322019-01-29 21:47:38 -0500146
khenaidood948f772021-08-11 17:49:24 -0400147 fs.IntVar(&cf.MaxConnectionRetries,
148 "max_connection_retries",
149 -1,
150 "The number of retries to connect to a dependent component")
khenaidoob6080322019-01-29 21:47:38 -0500151
khenaidood948f772021-08-11 17:49:24 -0400152 fs.DurationVar(&cf.ConnectionRetryInterval,
153 "connection_retry_interval",
154 2*time.Second,
155 "The number of seconds between each connection retry attempt")
khenaidoo2c6a0992019-04-29 13:46:56 -0400156
khenaidood948f772021-08-11 17:49:24 -0400157 fs.DurationVar(&cf.LiveProbeInterval,
158 "live_probe_interval",
159 60*time.Second,
160 "The number of seconds between liveness probes while in a live state")
khenaidoocfee5f42018-07-19 22:47:38 -0400161
khenaidood948f772021-08-11 17:49:24 -0400162 fs.DurationVar(&cf.NotLiveProbeInterval,
163 "not_live_probe_interval",
164 5*time.Second,
165 "The number of seconds between liveness probes while in a not live state")
David K. Bainbridgef430cd52019-05-28 15:00:35 -0700166
khenaidood948f772021-08-11 17:49:24 -0400167 fs.StringVar(&cf.ProbeAddress,
168 "probe_address",
169 ":8080",
170 "The address on which to listen to answer liveness and readiness probe queries over HTTP")
Richard Jankowski46464e92019-03-05 11:53:55 -0500171
khenaidood948f772021-08-11 17:49:24 -0400172 fs.BoolVar(&(cf.TraceEnabled),
173 "trace_enabled",
174 false,
175 "Whether to send logs to tracing agent?")
khenaidoob3244212019-08-27 14:32:27 -0400176
khenaidood948f772021-08-11 17:49:24 -0400177 fs.StringVar(&cf.TraceAgentAddress,
178 "trace_agent_address",
179 "127.0.0.1:6831",
180 "The address of tracing agent to which span info should be sent")
khenaidoob3244212019-08-27 14:32:27 -0400181
khenaidood948f772021-08-11 17:49:24 -0400182 fs.BoolVar(&cf.LogCorrelationEnabled,
183 "log_correlation_enabled",
184 true,
185 "Whether to enrich log statements with fields denoting operation being executed for achieving correlation?")
Scott Bakeree6a0872019-10-29 15:59:52 -0700186
khenaidood948f772021-08-11 17:49:24 -0400187 fs.StringVar(&cf.VolthaStackID,
188 "stack_id",
189 "voltha",
190 "ID for the current voltha stack")
Himani Chawla9cfc4992021-03-22 12:43:01 +0530191
David K. Bainbridge6080c172021-07-24 00:22:28 +0000192 fs.DurationVar(&cf.BackoffRetryInitialInterval,
khenaidood948f772021-08-11 17:49:24 -0400193 "backoff_retry_initial_interval",
194 500*time.Millisecond,
David K. Bainbridge6080c172021-07-24 00:22:28 +0000195 "The initial number of milliseconds an exponential backoff will wait before a retry")
khenaidoo5e4fca32021-05-12 16:02:23 -0400196
David K. Bainbridge6080c172021-07-24 00:22:28 +0000197 fs.DurationVar(&cf.BackoffRetryMaxElapsedTime,
khenaidood948f772021-08-11 17:49:24 -0400198 "backoff_retry_max_elapsed_time",
199 0*time.Second,
Akash Reddy Kankanala929cc002025-04-08 15:05:21 +0530200 "The maximum number of milliseconds an exponential backoff can elapsed")
khenaidoo5e4fca32021-05-12 16:02:23 -0400201
khenaidood948f772021-08-11 17:49:24 -0400202 fs.DurationVar(&cf.BackoffRetryMaxInterval,
203 "backoff_retry_max_interval",
204 1*time.Minute,
205 "The maximum number of milliseconds of an exponential backoff interval")
nikesh.krishnan0ded28d2023-06-28 12:36:32 +0530206 fs.DurationVar(&cf.PerRPCRetryTimeout,
207 "per_rpc_retry_timeout",
208 0*time.Second,
209 "The default timeout per RPC retry")
210 fs.UintVar(&cf.MaxRetries,
211 "max_grpc_client_retry",
212 0,
213 "The maximum number of times olt adaptor will retry in case grpc request timeouts")
David K. Bainbridge6080c172021-07-24 00:22:28 +0000214 _ = fs.Parse(args)
khenaidoocfee5f42018-07-19 22:47:38 -0400215}