This is an automated email from the ASF dual-hosted git repository.
chia7712 pushed a commit to branch branch-1.5
in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/branch-1.5 by this push:
new fb4e3f11 [YUNIKORN-2630] Release context lock early for config changes
(#842)
fb4e3f11 is described below
commit fb4e3f11345e6a9866dfaea97770c94b9421807b
Author: Wilfred Spiegelenburg <[email protected]>
AuthorDate: Tue May 21 22:35:18 2024 +0800
[YUNIKORN-2630] Release context lock early for config changes (#842)
Release the lock of the context in the shim when processing is done.
When the config changes are sent to the core the k8shim should not be
locked. The context changes have been finalised at that point.
The core handles its own locking and serialises config changes that come
in from the k8shim.
review: remove call through api to get config.
Closes: #842
Signed-off-by: Chia-Ping Tsai <[email protected]>
---
pkg/cache/context.go | 39 +++++++++++++++++++++++----------------
pkg/conf/schedulerconf.go | 6 ++++++
2 files changed, 29 insertions(+), 16 deletions(-)
diff --git a/pkg/cache/context.go b/pkg/cache/context.go
index bea59346..199ab128 100644
--- a/pkg/cache/context.go
+++ b/pkg/cache/context.go
@@ -605,40 +605,47 @@ func (ctx *Context) deletePriorityClass(obj interface{}) {
}
func (ctx *Context) triggerReloadConfig(index int, configMap *v1.ConfigMap) {
- ctx.lock.Lock()
- defer ctx.lock.Unlock()
-
- conf := ctx.apiProvider.GetAPIs().GetConf()
- if !conf.EnableConfigHotRefresh {
+ // hot reload is turned off do nothing
+ // hot reload can be turned off by an update: safety first access under
lock to prevent data race
+ if !schedulerconf.GetSchedulerConf().IsConfigReloadable() {
log.Log(log.ShimContext).Info("hot-refresh disabled, skipping
scheduler configuration update")
return
}
-
- ctx.configMaps[index] = configMap
- err := schedulerconf.UpdateConfigMaps(ctx.configMaps, false)
- if err != nil {
- log.Log(log.ShimContext).Error("Unable to update configmap,
ignoring changes", zap.Error(err))
+ // update the maps in the context: return on failure, logged in the
called method
+ confMap := ctx.setConfigMap(index, configMap)
+ if confMap == nil {
return
}
-
- confMap := schedulerconf.FlattenConfigMaps(ctx.configMaps)
-
- conf = ctx.apiProvider.GetAPIs().GetConf()
log.Log(log.ShimContext).Info("reloading scheduler configuration")
config := utils.GetCoreSchedulerConfigFromConfigMap(confMap)
extraConfig := utils.GetExtraConfigFromConfigMap(confMap)
request := &si.UpdateConfigurationRequest{
- RmID: conf.ClusterID,
- PolicyGroup: conf.PolicyGroup,
+ RmID: schedulerconf.GetSchedulerConf().ClusterID,
+ PolicyGroup: schedulerconf.GetSchedulerConf().PolicyGroup,
Config: config,
ExtraConfig: extraConfig,
}
+ // tell the core to update: sync call that is serialised on the core
side
if err :=
ctx.apiProvider.GetAPIs().SchedulerAPI.UpdateConfiguration(request); err != nil
{
log.Log(log.ShimContext).Error("reload configuration failed",
zap.Error(err))
}
}
+// setConfigMap sets the new config map object in the list of maps maintained
in the context and returns a flat map
+// of the settings from both maps
+func (ctx *Context) setConfigMap(index int, configMap *v1.ConfigMap)
map[string]string {
+ ctx.lock.Lock()
+ defer ctx.lock.Unlock()
+ ctx.configMaps[index] = configMap
+ err := schedulerconf.UpdateConfigMaps(ctx.configMaps, false)
+ if err != nil {
+ log.Log(log.ShimContext).Error("Unable to update configmap,
ignoring changes", zap.Error(err))
+ return nil
+ }
+ return schedulerconf.FlattenConfigMaps(ctx.configMaps)
+}
+
// EventsToRegister returns the Kubernetes events that should be watched for
updates which may effect predicate processing
func (ctx *Context) EventsToRegister(queueingHintFn framework.QueueingHintFn)
[]framework.ClusterEventWithHint {
return ctx.predManager.EventsToRegister(queueingHintFn)
diff --git a/pkg/conf/schedulerconf.go b/pkg/conf/schedulerconf.go
index da8336a0..2e941213 100644
--- a/pkg/conf/schedulerconf.go
+++ b/pkg/conf/schedulerconf.go
@@ -269,6 +269,12 @@ func (conf *SchedulerConf) IsTestMode() bool {
return conf.TestMode
}
+func (conf *SchedulerConf) IsConfigReloadable() bool {
+ conf.RLock()
+ defer conf.RUnlock()
+ return conf.EnableConfigHotRefresh
+}
+
func (conf *SchedulerConf) GetSchedulingInterval() time.Duration {
conf.RLock()
defer conf.RUnlock()
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]