Skip to content

Commit f310127

Browse files
committed
reload a module only if it's already exists
Signed-off-by: Mikhail Scherba <[email protected]>
1 parent 5516258 commit f310127

File tree

2 files changed

+75
-28
lines changed

2 files changed

+75
-28
lines changed

pkg/module_manager/models/modules/events/events.go

-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,4 @@ const (
1515
type ModuleEvent struct {
1616
ModuleName string
1717
EventType ModuleEventType
18-
19-
// an option for registering a module without reloading the operator
20-
RegisterWithoutReload bool
2118
}

pkg/module_manager/module_manager.go

+75-25
Original file line numberDiff line numberDiff line change
@@ -1096,7 +1096,7 @@ func mergeEnabled(enabledFlags ...*bool) bool {
10961096
return result
10971097
}
10981098

1099-
// PushDeleteModule push moduleDelete task for a module into the main queue
1099+
// PushDeleteModule pushes moduleDelete task for a module into the main queue
11001100
func (mm *ModuleManager) PushDeleteModule(moduleName string) {
11011101
// check if there is already moduleDelete task in the main queue for the module
11021102
if queueHasPendingModuleDeleteTask(mm.dependencies.TaskQueues.GetMain(), moduleName) {
@@ -1153,7 +1153,8 @@ func (mm *ModuleManager) AreModulesInited() bool {
11531153
return mm.modules.IsInited()
11541154
}
11551155

1156-
// RegisterModule disables and deregisters modules' hooks, and reloads module config
1156+
// RegisterModule checks if a module already exists and reapplies(reloads) its configuration.
1157+
// If it's a new module - converges all modules
11571158
func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
11581159
if !mm.modules.IsInited() {
11591160
return moduleset.ErrNotInited
@@ -1169,7 +1170,7 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
11691170
return fmt.Errorf("no module loader set")
11701171
}
11711172

1172-
// get basic module
1173+
// get basic module definition
11731174
basicModule, err := mm.moduleLoader.LoadModule(moduleSource, modulePath)
11741175
if err != nil {
11751176
return fmt.Errorf("failed to get basic module's definition: %w", err)
@@ -1187,7 +1188,7 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
11871188

11881189
basicModule.WithDependencies(dep)
11891190

1190-
// check if module is already in moduleset
1191+
// check if module already exists
11911192
if mm.modules.Has(moduleName) {
11921193
// if module is disabled in module manager
11931194
if !mm.IsModuleEnabled(moduleName) {
@@ -1204,22 +1205,34 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
12041205
}
12051206

12061207
if isEnabled {
1207-
// update modulemanager's state
1208+
// add module to the enabled modules list
12081209
mm.AddEnabledModuleName(moduleName)
1209-
mm.AddEnabledModuleByConfigName(moduleName)
1210-
// enqueue module startup sequence if it is enabled
1211-
err := mm.PushRunModule(moduleName)
1212-
if err != nil {
1213-
return err
1210+
for _, enabledModule := range mm.enabledModules.GetAll() {
1211+
ev := events.ModuleEvent{
1212+
ModuleName: enabledModule,
1213+
EventType: events.ModuleEnabled,
1214+
}
1215+
mm.SendModuleEvent(ev)
1216+
// Run OnStartup and Kubernetes.Synchronization hooks
1217+
// on application startup or if module become enabled.
1218+
doModuleStartup := false
1219+
if moduleName == enabledModule {
1220+
doModuleStartup = true
1221+
}
1222+
newTask := sh_task.NewTask(task.ModuleRun).
1223+
WithQueueName("main").
1224+
WithMetadata(task.HookMetadata{
1225+
EventDescription: "ModuleManager-Converge-All-Modules",
1226+
ModuleName: moduleName,
1227+
DoModuleStartup: doModuleStartup,
1228+
IsReloadAll: true,
1229+
})
1230+
newTask.SetProp("triggered-by", "ModuleManager")
1231+
mm.dependencies.TaskQueues.GetMain().AddLast(newTask.WithQueuedAt(time.Now()))
12141232
}
1215-
mm.SendModuleEvent(events.ModuleEvent{
1216-
ModuleName: moduleName,
1217-
EventType: events.ModuleEnabled,
1218-
})
12191233
}
12201234
return nil
12211235
}
1222-
12231236
// module is enabled, disable its hooks
12241237
mm.DisableModuleHooks(moduleName)
12251238

@@ -1249,27 +1262,64 @@ func (mm *ModuleManager) RegisterModule(moduleSource, modulePath string) error {
12491262
}
12501263
} else {
12511264
// modules is disabled - update modulemanager's state
1252-
mm.DeleteEnabledModuleName(moduleName)
1253-
// enqueue module delete sequence
1254-
mm.PushDeleteModule(moduleName)
1255-
// throw disable module event
1256-
mm.SendModuleEvent(events.ModuleEvent{
1265+
ev := events.ModuleEvent{
12571266
ModuleName: moduleName,
12581267
EventType: events.ModuleDisabled,
1259-
})
1268+
}
1269+
mm.SendModuleEvent(ev)
1270+
mm.PushDeleteModule(moduleName)
1271+
// modules is disabled - update modulemanager's state
1272+
mm.DeleteEnabledModuleName(moduleName)
12601273
}
12611274
return nil
12621275
}
12631276

12641277
// module doesn't exist
12651278
mm.modules.Add(basicModule)
12661279

1267-
// a new module requires to be registered without reloading the operator
1280+
// a new module requires to be registered
12681281
mm.SendModuleEvent(events.ModuleEvent{
1269-
ModuleName: moduleName,
1270-
EventType: events.ModuleRegistered,
1271-
RegisterWithoutReload: true,
1282+
ModuleName: moduleName,
1283+
EventType: events.ModuleRegistered,
12721284
})
1285+
1286+
// if module is disabled in the module kube config - exit
1287+
if !mm.dependencies.KubeConfigManager.IsModuleEnabled(moduleName) {
1288+
return nil
1289+
}
1290+
// if the module kube config has enabled true, check enable script
1291+
isEnabled, err := basicModule.RunEnabledScript(mm.TempDir, mm.GetEnabledModuleNames(), map[string]string{})
1292+
if err != nil {
1293+
return err
1294+
}
1295+
1296+
if isEnabled {
1297+
// add module to the enabled modules list
1298+
mm.AddEnabledModuleName(moduleName)
1299+
for _, enabledModule := range mm.enabledModules.GetAll() {
1300+
ev := events.ModuleEvent{
1301+
ModuleName: enabledModule,
1302+
EventType: events.ModuleEnabled,
1303+
}
1304+
mm.SendModuleEvent(ev)
1305+
// Run OnStartup and Kubernetes.Synchronization hooks
1306+
// on application startup or if module become enabled.
1307+
doModuleStartup := false
1308+
if moduleName == enabledModule {
1309+
doModuleStartup = true
1310+
}
1311+
newTask := sh_task.NewTask(task.ModuleRun).
1312+
WithQueueName("main").
1313+
WithMetadata(task.HookMetadata{
1314+
EventDescription: "ModuleManager-Converge-All-Modules",
1315+
ModuleName: moduleName,
1316+
DoModuleStartup: doModuleStartup,
1317+
IsReloadAll: true,
1318+
})
1319+
newTask.SetProp("triggered-by", "ModuleManager")
1320+
mm.dependencies.TaskQueues.GetMain().AddLast(newTask.WithQueuedAt(time.Now()))
1321+
}
1322+
}
12731323
return nil
12741324
}
12751325

0 commit comments

Comments
 (0)