Skip to content

Commit de6fc6c

Browse files
authored
Merge c2a0e21 into f87a806
2 parents f87a806 + c2a0e21 commit de6fc6c

File tree

5 files changed

+1056
-129
lines changed

5 files changed

+1056
-129
lines changed

cmd/layotto/main.go

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import (
2222
"strconv"
2323
"time"
2424

25+
"mosn.io/mosn/pkg/istio"
26+
2527
"github.com/dapr/components-contrib/secretstores"
2628
"github.com/dapr/components-contrib/secretstores/aws/parameterstore"
2729
"github.com/dapr/components-contrib/secretstores/aws/secretmanager"
@@ -200,6 +202,7 @@ var loggerForDaprComp = logger.NewLogger("reuse.dapr.component")
200202

201203
// GitVersion mosn version is specified by latest tag
202204
var GitVersion = ""
205+
var IstioVersion = "1.10.6"
203206

204207
func init() {
205208
mgrpc.RegisterServerHandler("runtime", NewRuntimeGrpcServer)
@@ -461,6 +464,8 @@ func registerAppInfo(app *cli.App) {
461464
appInfo.Version = app.Version
462465
appInfo.Compiled = app.Compiled
463466
actuator.SetAppInfoSingleton(appInfo)
467+
// set istio version
468+
istio.IstioVersion = IstioVersion
464469
}
465470

466471
func newRuntimeApp(startCmd *cli.Command) *cli.App {

cmd/layotto_multiple_api/cmd.go

+302
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,302 @@
1+
package main
2+
3+
import (
4+
"os"
5+
"runtime"
6+
"time"
7+
8+
"mosn.io/api"
9+
"mosn.io/mosn/istio/istio1106"
10+
v2 "mosn.io/mosn/pkg/config/v2"
11+
"mosn.io/mosn/pkg/configmanager"
12+
"mosn.io/mosn/pkg/log"
13+
"mosn.io/mosn/pkg/metrics"
14+
"mosn.io/mosn/pkg/mosn"
15+
"mosn.io/mosn/pkg/protocol"
16+
"mosn.io/mosn/pkg/protocol/xprotocol"
17+
"mosn.io/mosn/pkg/protocol/xprotocol/bolt"
18+
"mosn.io/mosn/pkg/protocol/xprotocol/dubbo"
19+
"mosn.io/mosn/pkg/server"
20+
"mosn.io/mosn/pkg/stagemanager"
21+
xstream "mosn.io/mosn/pkg/stream/xprotocol"
22+
"mosn.io/mosn/pkg/trace"
23+
mosn_jaeger "mosn.io/mosn/pkg/trace/jaeger"
24+
"mosn.io/mosn/pkg/trace/skywalking"
25+
tracehttp "mosn.io/mosn/pkg/trace/sofa/http"
26+
xtrace "mosn.io/mosn/pkg/trace/sofa/xprotocol"
27+
tracebolt "mosn.io/mosn/pkg/trace/sofa/xprotocol/bolt"
28+
mosn_zipkin "mosn.io/mosn/pkg/trace/zipkin"
29+
"mosn.io/pkg/buffer"
30+
31+
component_actuators "mosn.io/layotto/components/pkg/actuators"
32+
"mosn.io/layotto/diagnostics"
33+
"mosn.io/layotto/diagnostics/jaeger"
34+
lprotocol "mosn.io/layotto/diagnostics/protocol"
35+
lsky "mosn.io/layotto/diagnostics/skywalking"
36+
"mosn.io/layotto/diagnostics/zipkin"
37+
38+
// Actuator
39+
"mosn.io/layotto/pkg/actuator/health"
40+
"mosn.io/layotto/pkg/integrate/actuator"
41+
42+
"github.com/urfave/cli"
43+
"mosn.io/mosn/pkg/featuregate"
44+
)
45+
46+
var (
47+
flagToMosnLogLevel = map[string]string{
48+
"trace": "TRACE",
49+
"debug": "DEBUG",
50+
"info": "INFO",
51+
"warning": "WARN",
52+
"error": "ERROR",
53+
"critical": "FATAL",
54+
"off": "OFF",
55+
}
56+
57+
cmdStart = cli.Command{
58+
Name: "start",
59+
Usage: "start runtime. For example: ./layotto start -c configs/config_standalone.json",
60+
Flags: []cli.Flag{
61+
cli.StringFlag{
62+
Name: "config, c",
63+
Usage: "Load configuration from `FILE`",
64+
EnvVar: "RUNTIME_CONFIG",
65+
Value: "configs/config.json",
66+
}, cli.StringFlag{
67+
Name: "service-cluster, s",
68+
Usage: "sidecar service cluster",
69+
EnvVar: "SERVICE_CLUSTER",
70+
}, cli.StringFlag{
71+
Name: "service-node, n",
72+
Usage: "sidecar service node",
73+
EnvVar: "SERVICE_NODE",
74+
}, cli.StringFlag{
75+
Name: "service-type, p",
76+
Usage: "sidecar service type",
77+
EnvVar: "SERVICE_TYPE",
78+
}, cli.StringSliceFlag{
79+
Name: "service-meta, sm",
80+
Usage: "sidecar service metadata",
81+
EnvVar: "SERVICE_META",
82+
}, cli.StringSliceFlag{
83+
Name: "service-lables, sl",
84+
Usage: "sidecar service metadata labels",
85+
EnvVar: "SERVICE_LAB",
86+
}, cli.StringSliceFlag{
87+
Name: "cluster-domain, domain",
88+
Usage: "sidecar service metadata labels",
89+
EnvVar: "CLUSTER_DOMAIN",
90+
}, cli.StringFlag{
91+
Name: "feature-gates, f",
92+
Usage: "config feature gates",
93+
EnvVar: "FEATURE_GATES",
94+
}, cli.StringFlag{
95+
Name: "pod-namespace, pns",
96+
Usage: "mosn pod namespaces",
97+
EnvVar: "POD_NAMESPACE",
98+
}, cli.StringFlag{
99+
Name: "pod-name, pn",
100+
Usage: "mosn pod name",
101+
EnvVar: "POD_NAME",
102+
}, cli.StringFlag{
103+
Name: "pod-ip, pi",
104+
Usage: "mosn pod ip",
105+
EnvVar: "POD_IP",
106+
}, cli.StringFlag{
107+
Name: "log-level, l",
108+
Usage: "mosn log level, trace|debug|info|warning|error|critical|off",
109+
EnvVar: "LOG_LEVEL",
110+
}, cli.StringFlag{
111+
Name: "log-format, lf",
112+
Usage: "mosn log format, currently useless",
113+
}, cli.StringSliceFlag{
114+
Name: "component-log-level, lc",
115+
Usage: "mosn component format, currently useless",
116+
}, cli.StringFlag{
117+
Name: "local-address-ip-version",
118+
Usage: "ip version, v4 or v6, currently useless",
119+
}, cli.IntFlag{
120+
Name: "restart-epoch",
121+
Usage: "epoch to restart, align to Istio startup params, currently useless",
122+
}, cli.IntFlag{
123+
Name: "drain-time-s",
124+
Usage: "seconds to drain connections, default 600 seconds",
125+
Value: 600,
126+
}, cli.StringFlag{
127+
Name: "parent-shutdown-time-s",
128+
Usage: "parent shutdown time seconds, align to Istio startup params, currently useless",
129+
}, cli.IntFlag{
130+
Name: "max-obj-name-len",
131+
Usage: "object name limit, align to Istio startup params, currently useless",
132+
}, cli.IntFlag{
133+
Name: "concurrency",
134+
Usage: "concurrency, align to Istio startup params, currently useless",
135+
}, cli.IntFlag{
136+
Name: "log-format-prefix-with-location",
137+
Usage: "log-format-prefix-with-location, align to Istio startup params, currently useless",
138+
}, cli.IntFlag{
139+
Name: "bootstrap-version",
140+
Usage: "API version to parse the bootstrap config as (e.g. 3). If unset, all known versions will be attempted",
141+
}, cli.StringFlag{
142+
Name: "drain-strategy",
143+
Usage: "immediate",
144+
}, cli.BoolTFlag{
145+
Name: "disable-hot-restart",
146+
Usage: "disable-hot-restart",
147+
},
148+
},
149+
Action: func(c *cli.Context) error {
150+
app := mosn.NewMosn()
151+
stm := stagemanager.InitStageManager(c, c.String("config"), app)
152+
153+
// if needs featuregate init in parameter stage or init stage
154+
// append a new stage and called featuregate.ExecuteInitFunc(keys...)
155+
// parameter parsed registered
156+
stm.AppendParamsParsedStage(ExtensionsRegister)
157+
158+
stm.AppendParamsParsedStage(DefaultParamsParsed)
159+
160+
// init Stage
161+
stm.AppendInitStage(func(cfg *v2.MOSNConfig) {
162+
drainTime := c.Int("drain-time-s")
163+
server.SetDrainTime(time.Duration(drainTime) * time.Second)
164+
// istio parameters
165+
serviceCluster := c.String("service-cluster")
166+
serviceNode := c.String("service-node")
167+
serviceType := c.String("service-type")
168+
serviceMeta := c.StringSlice("service-meta")
169+
metaLabels := c.StringSlice("service-lables")
170+
clusterDomain := c.String("cluster-domain")
171+
podName := c.String("pod-name")
172+
podNamespace := c.String("pod-namespace")
173+
podIp := c.String("pod-ip")
174+
175+
if serviceNode != "" {
176+
istio1106.InitXdsInfo(cfg, serviceCluster, serviceNode, serviceMeta, metaLabels)
177+
} else {
178+
if istio1106.IsApplicationNodeType(serviceType) {
179+
sn := podName + "." + podNamespace
180+
serviceNode = serviceType + "~" + podIp + "~" + sn + "~" + clusterDomain
181+
istio1106.InitXdsInfo(cfg, serviceCluster, serviceNode, serviceMeta, metaLabels)
182+
} else {
183+
log.StartLogger.Infof("[mosn] [start] xds service type is not router/sidecar, use config only")
184+
istio1106.InitXdsInfo(cfg, "", "", nil, nil)
185+
}
186+
}
187+
})
188+
stm.AppendInitStage(mosn.DefaultInitStage)
189+
stm.AppendInitStage(func(_ *v2.MOSNConfig) {
190+
// set version and go version
191+
metrics.SetVersion(GitVersion)
192+
metrics.SetGoVersion(runtime.Version())
193+
})
194+
// pre-startup
195+
stm.AppendPreStartStage(mosn.DefaultPreStartStage) // called finally stage by default
196+
// startup
197+
stm.AppendStartStage(mosn.DefaultStartStage)
198+
// after-startup
199+
stm.AppendAfterStartStage(SetActuatorAfterStart)
200+
// execute all stages
201+
stm.RunAll()
202+
return nil
203+
},
204+
}
205+
206+
cmdStop = cli.Command{
207+
Name: "stop",
208+
Usage: "stop mosn proxy",
209+
Flags: []cli.Flag{
210+
cli.StringFlag{
211+
Name: "config, c",
212+
Usage: "load configuration from `FILE`",
213+
EnvVar: "MOSN_CONFIG",
214+
Value: "configs/mosn_config.json",
215+
},
216+
},
217+
Action: func(c *cli.Context) (err error) {
218+
app := mosn.NewMosn()
219+
stm := stagemanager.InitStageManager(c, c.String("config"), app)
220+
stm.AppendInitStage(mosn.InitDefaultPath)
221+
return stm.StopMosnProcess()
222+
},
223+
}
224+
225+
cmdReload = cli.Command{
226+
Name: "reload",
227+
Usage: "reconfiguration",
228+
Action: func(c *cli.Context) error {
229+
return nil
230+
},
231+
}
232+
)
233+
234+
func SetActuatorAfterStart(_ stagemanager.Application) {
235+
// register component actuator
236+
component_actuators.RangeAllIndicators(
237+
func(name string, v *component_actuators.ComponentsIndicator) bool {
238+
if v != nil {
239+
health.AddLivenessIndicator(name, v.LivenessIndicator)
240+
health.AddReadinessIndicator(name, v.ReadinessIndicator)
241+
}
242+
return true
243+
})
244+
// set started
245+
actuator.GetRuntimeReadinessIndicator().SetStarted()
246+
actuator.GetRuntimeLivenessIndicator().SetStarted()
247+
}
248+
249+
func DefaultParamsParsed(c *cli.Context) {
250+
// log level control
251+
flagLogLevel := c.String("log-level")
252+
if mosnLogLevel, ok := flagToMosnLogLevel[flagLogLevel]; ok {
253+
if mosnLogLevel == "OFF" {
254+
log.GetErrorLoggerManagerInstance().Disable()
255+
} else {
256+
log.GetErrorLoggerManagerInstance().SetLogLevelControl(configmanager.ParseLogLevel(mosnLogLevel))
257+
}
258+
}
259+
// set feature gates
260+
err := featuregate.Set(c.String("feature-gates"))
261+
if err != nil {
262+
log.StartLogger.Infof("[mosn] [start] parse feature-gates flag fail : %+v", err)
263+
os.Exit(1)
264+
}
265+
}
266+
267+
// ExtensionsRegister for register mosn rpc extensions
268+
func ExtensionsRegister(_ *cli.Context) {
269+
// 1. tracer driver register
270+
// Q: What is a tracer driver ?
271+
// A: MOSN implement a group of trace drivers, but only a configured driver will be loaded.
272+
// A tracer driver can create different tracer by different protocol.
273+
// When MOSN receive a request stream, MOSN will try to start a tracer according to the request protocol.
274+
// For more details,see https://mosn.io/blog/posts/skywalking-support/
275+
trace.RegisterDriver("SOFATracer", trace.NewDefaultDriverImpl())
276+
277+
// 2. xprotocol action register
278+
// ResgisterXProtocolAction is MOSN's xprotocol framework's extensions.
279+
// when a xprotocol implementation (defined by api.XProtocolCodec) registered, the registered action will be called.
280+
xprotocol.ResgisterXProtocolAction(xstream.NewConnPool, xstream.NewStreamFactory, func(codec api.XProtocolCodec) {
281+
name := codec.ProtocolName()
282+
trace.RegisterTracerBuilder("SOFATracer", name, xtrace.NewTracer)
283+
})
284+
285+
// 3. register protocols that are used by layotto.
286+
// RegisterXProtocolCodec add a new xprotocol implementation, which is a wrapper for protocol register
287+
_ = xprotocol.RegisterXProtocolCodec(&bolt.XCodec{})
288+
_ = xprotocol.RegisterXProtocolCodec(&dubbo.XCodec{})
289+
290+
// 4. register tracer
291+
xtrace.RegisterDelegate(bolt.ProtocolName, tracebolt.Boltv1Delegate)
292+
trace.RegisterTracerBuilder("SOFATracer", protocol.HTTP1, tracehttp.NewTracer)
293+
trace.RegisterTracerBuilder("SOFATracer", lprotocol.Layotto, diagnostics.NewTracer)
294+
trace.RegisterTracerBuilder(skywalking.SkyDriverName, lprotocol.Layotto, lsky.NewGrpcSkyTracer)
295+
trace.RegisterTracerBuilder(mosn_jaeger.DriverName, lprotocol.Layotto, jaeger.NewGrpcJaegerTracer)
296+
trace.RegisterTracerBuilder(mosn_zipkin.DriverName, lprotocol.Layotto, zipkin.NewGrpcZipTracer)
297+
298+
// register buffer logger
299+
buffer.SetLogFunc(func(msg string) {
300+
log.DefaultLogger.Errorf("[iobuffer] iobuffer error log info: %s", msg)
301+
})
302+
}

0 commit comments

Comments
 (0)