This is an automated email from the ASF dual-hosted git repository.

mani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-core.git


The following commit(s) were added to refs/heads/master by this push:
     new f08d6f14 [YUNIKORN-1984] output extra config (#652)
f08d6f14 is described below

commit f08d6f14ac1bfe89bf038786e122263ad765eb3f
Author: PoAn Yang <[email protected]>
AuthorDate: Tue Oct 3 17:10:13 2023 +0530

    [YUNIKORN-1984] output extra config (#652)
    
    Closes: #652
    
    Signed-off-by: Manikandan R <[email protected]>
---
 pkg/webservice/dao/config_info.go |  7 +++++++
 pkg/webservice/handlers.go        | 10 +++++++++-
 pkg/webservice/handlers_test.go   | 23 +++++++++++++++++++++--
 3 files changed, 37 insertions(+), 3 deletions(-)

diff --git a/pkg/webservice/dao/config_info.go 
b/pkg/webservice/dao/config_info.go
index a0c5c128..44dbb3bc 100644
--- a/pkg/webservice/dao/config_info.go
+++ b/pkg/webservice/dao/config_info.go
@@ -18,7 +18,14 @@
 
 package dao
 
+import "github.com/apache/yunikorn-core/pkg/common/configs"
+
 type ValidateConfResponse struct {
        Allowed bool   `json:"allowed"` // no omitempty, a false value gives a 
quick way to understand the result.
        Reason  string `json:"reason,omitempty"`
 }
+
+type ConfigDAOInfo struct {
+       *configs.SchedulerConfig
+       Extra map[string]string `yaml:",omitempty" json:",omitempty"`
+}
diff --git a/pkg/webservice/handlers.go b/pkg/webservice/handlers.go
index dd51f49e..34d177f8 100644
--- a/pkg/webservice/handlers.go
+++ b/pkg/webservice/handlers.go
@@ -424,9 +424,17 @@ func getContainerHistory(w http.ResponseWriter, r 
*http.Request) {
 func getClusterConfig(w http.ResponseWriter, r *http.Request) {
        writeHeaders(w)
 
-       conf := configs.ConfigContext.Get(schedulerContext.GetPolicyGroup())
        var marshalledConf []byte
        var err error
+
+       // merge core config with extra config
+       schedulerConf := 
configs.ConfigContext.Get(schedulerContext.GetPolicyGroup())
+       extraConfig := configs.GetConfigMap()
+       conf := dao.ConfigDAOInfo{
+               SchedulerConfig: schedulerConf,
+               Extra:           extraConfig,
+       }
+
        // check if we have a request for json output
        if r.Header.Get("Accept") == "application/json" {
                marshalledConf, err = json.Marshal(&conf)
diff --git a/pkg/webservice/handlers_test.go b/pkg/webservice/handlers_test.go
index d7f8eedc..0ab38ed2 100644
--- a/pkg/webservice/handlers_test.go
+++ b/pkg/webservice/handlers_test.go
@@ -257,6 +257,14 @@ const queueName = "root.default"
 const nodeID = "node-1"
 const instType = "itype-1"
 
+var (
+       updatedExtraConf = map[string]string{
+               "log.level":                  "info",
+               "service.schedulingInterval": "1s",
+               "admissionController.accessControl.bypassAuth": "false",
+       }
+)
+
 // setup To take care of setting up config, cluster, partitions etc
 func setup(t *testing.T, config string, partitionCount int) 
*scheduler.PartitionContext {
        var err error
@@ -481,7 +489,7 @@ func TestGetConfigYAML(t *testing.T) {
        resp := &MockResponseWriter{}
        getClusterConfig(resp, req)
        // yaml unmarshal handles the checksum add the end automatically in 
this implementation
-       conf := &configs.SchedulerConfig{}
+       conf := &dao.ConfigDAOInfo{}
        err = yaml.Unmarshal(resp.outputBytes, conf)
        assert.NilError(t, err, "failed to unmarshal config from response body")
        assert.Equal(t, conf.Partitions[0].NodeSortPolicy.Type, "fair", "node 
sort policy set incorrectly, not fair")
@@ -492,6 +500,8 @@ func TestGetConfigYAML(t *testing.T) {
        // change the config
        err = schedulerContext.UpdateRMSchedulerConfig(rmID, 
[]byte(updatedConf))
        assert.NilError(t, err, "Error when updating clusterInfo from config")
+       configs.SetConfigMap(updatedExtraConf)
+
        // check that we return yaml by default, unmarshal will error when we 
don't
        req.Header.Set("Accept", "unknown")
        getClusterConfig(resp, req)
@@ -499,6 +509,10 @@ func TestGetConfigYAML(t *testing.T) {
        assert.NilError(t, err, "failed to unmarshal config from response body 
(updated config)")
        assert.Equal(t, conf.Partitions[0].NodeSortPolicy.Type, "binpacking", 
"node sort policy not updated")
        assert.Assert(t, startConfSum != conf.Checksum, "checksums did not 
change in output")
+       assert.Assert(t, reflect.DeepEqual(conf.Extra, updatedExtraConf), 
"extra config did not change")
+
+       // reset extra config map
+       configs.SetConfigMap(map[string]string{})
 }
 
 func TestGetConfigJSON(t *testing.T) {
@@ -510,7 +524,7 @@ func TestGetConfigJSON(t *testing.T) {
        resp := &MockResponseWriter{}
        getClusterConfig(resp, req)
 
-       conf := &configs.SchedulerConfig{}
+       conf := &dao.ConfigDAOInfo{}
        err := json.Unmarshal(resp.outputBytes, conf)
        assert.NilError(t, err, "failed to unmarshal config from response body 
(json)")
        startConfSum := conf.Checksum
@@ -519,12 +533,17 @@ func TestGetConfigJSON(t *testing.T) {
        // change the config
        err = schedulerContext.UpdateRMSchedulerConfig(rmID, 
[]byte(updatedConf))
        assert.NilError(t, err, "Error when updating clusterInfo from config")
+       configs.SetConfigMap(updatedExtraConf)
 
        getClusterConfig(resp, req)
        err = json.Unmarshal(resp.outputBytes, conf)
        assert.NilError(t, err, "failed to unmarshal config from response body 
(json, updated config)")
        assert.Assert(t, startConfSum != conf.Checksum, "checksums did not 
change in json output: %s, %s", startConfSum, conf.Checksum)
        assert.Equal(t, conf.Partitions[0].NodeSortPolicy.Type, "binpacking", 
"node sort policy not updated (json)")
+       assert.Assert(t, reflect.DeepEqual(conf.Extra, updatedExtraConf), 
"extra config did not change")
+
+       // reset extra config map
+       configs.SetConfigMap(map[string]string{})
 }
 
 func TestBuildUpdateResponseSuccess(t *testing.T) {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to