MCPcopy
hub / github.com/pingcap/tidb / Load

Function Load

pkg/plugin/plugin.go:139–201  ·  view source on GitHub ↗

Load load plugin by config param. This method need be called before domain init to inject global variable info during bootstrap.

(ctx context.Context, cfg Config)

Source from the content-addressed store, hash-verified

137// Load load plugin by config param.
138// This method need be called before domain init to inject global variable info during bootstrap.
139func Load(ctx context.Context, cfg Config) (err error) {
140 tiPlugins := &plugins{
141 plugins: make(map[Kind][]Plugin),
142 versions: make(map[string]uint16, len(cfg.EnvVersion)),
143 dyingPlugins: make([]Plugin, 0),
144 }
145
146 // Setup component version info for plugin running env.
147 for component, version := range cfg.EnvVersion {
148 tiPlugins.versions[component] = version
149 }
150
151 // Load plugin dl & manifest.
152 for _, pluginID := range cfg.Plugins {
153 var pName string
154 pName, _, err = ID(pluginID).Decode()
155 if err != nil {
156 err = errors.Trace(err)
157 return
158 }
159 // Check duplicate.
160 _, dup := tiPlugins.versions[pName]
161 if dup {
162 if cfg.SkipWhenFail {
163 logutil.Logger(ctx).Warn("duplicate load %s and ignored", zap.String("pluginName", pName))
164 continue
165 }
166 err = errDuplicatePlugin.GenWithStackByArgs(pluginID)
167 return
168 }
169 // Load dl.
170 var plugin Plugin
171 plugin, err = loadOne(cfg.PluginDir, ID(pluginID))
172 if err != nil {
173 if cfg.SkipWhenFail {
174 logutil.Logger(ctx).Warn("load plugin failure and ignored", zap.String("pluginID", pluginID), zap.Error(err))
175 continue
176 }
177 return
178 }
179 tiPlugins.add(&plugin)
180 }
181
182 // Cross validate & Load plugins.
183 for kind := range tiPlugins.plugins {
184 for i := range tiPlugins.plugins[kind] {
185 if err = tiPlugins.plugins[kind][i].validate(ctx, tiPlugins); err != nil {
186 if cfg.SkipWhenFail {
187 logutil.Logger(ctx).Warn("validate plugin fail and disable plugin",
188 zap.String("plugin", tiPlugins.plugins[kind][i].Name), zap.Error(err))
189 tiPlugins.plugins[kind][i].State = Disable
190 //nolint: ineffassign
191 err = nil
192 continue
193 }
194 return
195 }
196 }

Callers 6

TestLoadPluginFunction · 0.92
bootstrapSessionImplFunction · 0.92
TestLoadPluginSuccessFunction · 0.85
TestLoadPluginSkipErrorFunction · 0.85
TestLoadFailFunction · 0.85
LoadPluginForTestFunction · 0.85

Calls 9

addMethod · 0.95
LoggerFunction · 0.92
IDTypeAlias · 0.85
loadOneFunction · 0.85
WarnMethod · 0.80
validateMethod · 0.80
DecodeMethod · 0.65
StringMethod · 0.65
ErrorMethod · 0.65

Tested by 4

TestLoadPluginFunction · 0.74
TestLoadPluginSuccessFunction · 0.68
TestLoadPluginSkipErrorFunction · 0.68
TestLoadFailFunction · 0.68