[YUNIKORN-2376] Remove dummy state dump plugin (#783)
Do not register a dummy state dump plugin during init. Handle the fact
that a resource manager does not have to register a state dump plugin in
the state dump creation.
Closes: #783
Signed-off-by: Peter Bacsko <pbacsko@cloudera.com>
diff --git a/pkg/plugins/plugins.go b/pkg/plugins/plugins.go
index 88f2601..7ba8131 100644
--- a/pkg/plugins/plugins.go
+++ b/pkg/plugins/plugins.go
@@ -26,19 +26,11 @@
var plugins SchedulerPlugins
func init() {
- plugins = SchedulerPlugins{
- StateDumpPlugin: dummyStateDumpPlugin{},
- }
+ plugins = SchedulerPlugins{}
}
-type dummyStateDumpPlugin struct{}
-
-var _ api.StateDumpPlugin = dummyStateDumpPlugin{}
-
-func (d dummyStateDumpPlugin) GetStateDump() (string, error) {
- return "{}", nil
-}
-
+// RegisterSchedulerPlugin registers the plugin based on the interfaces(s) it implements.
+// The known interfaces are defined in yunikorn-scheduler-interface/lib/go/api
func RegisterSchedulerPlugin(plugin interface{}) {
plugins.Lock()
defer plugins.Unlock()
@@ -52,7 +44,8 @@
}
}
-// visible for testing
+// UnregisterSchedulerPlugins removes all earlier set plugins
+// visible for testing only
func UnregisterSchedulerPlugins() {
plugins.Lock()
defer plugins.Unlock()
@@ -60,12 +53,14 @@
plugins.StateDumpPlugin = nil
}
+// GetResourceManagerCallbackPlugin returns the registered callback plugin or nil if none was registered.
func GetResourceManagerCallbackPlugin() api.ResourceManagerCallback {
plugins.RLock()
defer plugins.RUnlock()
return plugins.ResourceManagerCallbackPlugin
}
+// GetStateDumpPlugin returns the registered state dump plugin or nil if none was registered.
func GetStateDumpPlugin() api.StateDumpPlugin {
plugins.RLock()
defer plugins.RUnlock()
diff --git a/pkg/webservice/handlers.go b/pkg/webservice/handlers.go
index 809b49a..6f4f710 100644
--- a/pkg/webservice/handlers.go
+++ b/pkg/webservice/handlers.go
@@ -947,9 +947,14 @@
}
func getResourceManagerDiagnostics() map[string]interface{} {
- result := make(map[string]interface{}, 0)
+ result := make(map[string]interface{})
+ // if the RM has not registered state dump the plugin will be nil
plugin := plugins.GetStateDumpPlugin()
+ if plugin == nil {
+ result["empty"] = "Resource Manager did not register callback"
+ return result
+ }
// get state dump from RM
dumpStr, err := plugin.GetStateDump()