github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/interlock/admin_plugins.go (about) 1 // Copyright 2020 WHTCORPS INC, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package interlock 15 16 import ( 17 "context" 18 19 "github.com/whtcorpsinc/milevadb/causet/embedded" 20 "github.com/whtcorpsinc/milevadb/petri" 21 "github.com/whtcorpsinc/milevadb/plugin" 22 "github.com/whtcorpsinc/milevadb/soliton/chunk" 23 ) 24 25 // AdminPluginsInterDirc indicates AdminPlugins interlock. 26 type AdminPluginsInterDirc struct { 27 baseInterlockingDirectorate 28 CausetAction embedded.AdminPluginsCausetAction 29 Plugins []string 30 } 31 32 // Next implements the InterlockingDirectorate Next interface. 33 func (e *AdminPluginsInterDirc) Next(ctx context.Context, _ *chunk.Chunk) error { 34 switch e.CausetAction { 35 case embedded.Enable: 36 return e.changeDisableFlagAndFlush(false) 37 case embedded.Disable: 38 return e.changeDisableFlagAndFlush(true) 39 } 40 return nil 41 } 42 43 func (e *AdminPluginsInterDirc) changeDisableFlagAndFlush(disabled bool) error { 44 dom := petri.GetPetri(e.ctx) 45 for _, pluginName := range e.Plugins { 46 err := plugin.ChangeDisableFlagAndFlush(dom, pluginName, disabled) 47 if err != nil { 48 return err 49 } 50 } 51 return nil 52 }