From d6c89cd7a1ec8a064ab8aa6ceed430316a5177fd Mon Sep 17 00:00:00 2001 From: lhy1024 Date: Thu, 2 Nov 2023 14:40:37 +0800 Subject: [PATCH 1/3] remove uncommon interfaces Signed-off-by: lhy1024 --- pkg/mcs/scheduling/server/apis/v1/api.go | 37 -------------- pkg/mcs/scheduling/server/server.go | 16 ------ server/api/config.go | 47 +++++++---------- tests/integrations/mcs/scheduling/api_test.go | 50 +++++-------------- 4 files changed, 31 insertions(+), 119 deletions(-) diff --git a/pkg/mcs/scheduling/server/apis/v1/api.go b/pkg/mcs/scheduling/server/apis/v1/api.go index 7a75d04f483..9581c227741 100644 --- a/pkg/mcs/scheduling/server/apis/v1/api.go +++ b/pkg/mcs/scheduling/server/apis/v1/api.go @@ -131,9 +131,6 @@ func (s *Service) RegisterAdminRouter() { func (s *Service) RegisterConfigRouter() { router := s.root.Group("config") router.GET("", getConfig) - router.GET("/schedule", getScheduleConfig) - router.GET("/replicate", getReplicationConfig) - router.GET("/store", getStoreConfig) } // RegisterSchedulersRouter registers the router of the schedulers handler. @@ -208,40 +205,6 @@ func getConfig(c *gin.Context) { c.IndentedJSON(http.StatusOK, cfg) } -// @Tags config -// @Summary Get schedule config. -// @Produce json -// @Success 200 {object} config.ScheduleConfig -// @Router /config/schedule [get] -func getScheduleConfig(c *gin.Context) { - svr := c.MustGet(multiservicesapi.ServiceContextKey).(*scheserver.Server) - cfg := svr.GetScheduleConfig() - cfg.MaxMergeRegionKeys = cfg.GetMaxMergeRegionKeys() - c.IndentedJSON(http.StatusOK, cfg) -} - -// @Tags config -// @Summary Get replication config. -// @Produce json -// @Success 200 {object} config.ReplicationConfig -// @Router /config/replicate [get] -func getReplicationConfig(c *gin.Context) { - svr := c.MustGet(multiservicesapi.ServiceContextKey).(*scheserver.Server) - cfg := svr.GetReplicationConfig() - c.IndentedJSON(http.StatusOK, cfg) -} - -// @Tags config -// @Summary Get store config. -// @Produce json -// @Success 200 {object} config.StoreConfig -// @Router /config/store [get] -func getStoreConfig(c *gin.Context) { - svr := c.MustGet(multiservicesapi.ServiceContextKey).(*scheserver.Server) - cfg := svr.GetStoreConfig() - c.IndentedJSON(http.StatusOK, cfg) -} - // @Tags admin // @Summary Drop all regions from cache. // @Produce json diff --git a/pkg/mcs/scheduling/server/server.go b/pkg/mcs/scheduling/server/server.go index d692e24e505..1790cb2b4be 100644 --- a/pkg/mcs/scheduling/server/server.go +++ b/pkg/mcs/scheduling/server/server.go @@ -46,7 +46,6 @@ import ( "github.com/tikv/pd/pkg/mcs/utils" "github.com/tikv/pd/pkg/member" "github.com/tikv/pd/pkg/schedule" - sc "github.com/tikv/pd/pkg/schedule/config" "github.com/tikv/pd/pkg/schedule/hbstream" "github.com/tikv/pd/pkg/schedule/schedulers" "github.com/tikv/pd/pkg/storage/endpoint" @@ -528,21 +527,6 @@ func (s *Server) GetConfig() *config.Config { return cfg } -// GetScheduleConfig gets the schedule config. -func (s *Server) GetScheduleConfig() *sc.ScheduleConfig { - return s.persistConfig.GetScheduleConfig().Clone() -} - -// GetReplicationConfig gets the replication config. -func (s *Server) GetReplicationConfig() *sc.ReplicationConfig { - return s.persistConfig.GetReplicationConfig().Clone() -} - -// GetStoreConfig gets the store config. -func (s *Server) GetStoreConfig() *sc.StoreConfig { - return s.persistConfig.GetStoreConfig().Clone() -} - // CreateServer creates the Server func CreateServer(ctx context.Context, cfg *config.Config) *Server { svr := &Server{ diff --git a/server/api/config.go b/server/api/config.go index 6b3fbdd9df5..b26da146651 100644 --- a/server/api/config.go +++ b/server/api/config.go @@ -63,20 +63,13 @@ func newConfHandler(svr *server.Server, rd *render.Render) *confHandler { func (h *confHandler) GetConfig(w http.ResponseWriter, r *http.Request) { cfg := h.svr.GetConfig() if h.svr.IsAPIServiceMode() { - b, err := h.GetSchedulingServerConfig("config") + schedulingServerConfig, err := h.GetSchedulingServerConfig() if err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } - var configSchedulingServer config.Config - err = json.Unmarshal(b, &configSchedulingServer) - if err != nil { - h.rd.JSON(w, http.StatusInternalServerError, err.Error()) - return - } - cfg.Schedule = configSchedulingServer.Schedule - cfg.Replication = configSchedulingServer.Replication - // TODO: will we support config/store? + cfg.Schedule = schedulingServerConfig.Schedule + cfg.Replication = schedulingServerConfig.Replication } else { cfg.Schedule.MaxMergeRegionKeys = cfg.Schedule.GetMaxMergeRegionKeys() } @@ -321,18 +314,12 @@ func getConfigMap(cfg map[string]interface{}, key []string, value interface{}) m // @Router /config/schedule [get] func (h *confHandler) GetScheduleConfig(w http.ResponseWriter, r *http.Request) { if h.svr.IsAPIServiceMode() { - b, err := h.GetSchedulingServerConfig("config/schedule") - if err != nil { - h.rd.JSON(w, http.StatusInternalServerError, err.Error()) - return - } - var cfg sc.ScheduleConfig - err = json.Unmarshal(b, &cfg) + cfg, err := h.GetSchedulingServerConfig() if err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } - h.rd.JSON(w, http.StatusOK, cfg) + h.rd.JSON(w, http.StatusOK, cfg.Schedule) return } cfg := h.svr.GetScheduleConfig() @@ -399,13 +386,7 @@ func (h *confHandler) SetScheduleConfig(w http.ResponseWriter, r *http.Request) // @Router /config/replicate [get] func (h *confHandler) GetReplicationConfig(w http.ResponseWriter, r *http.Request) { if h.svr.IsAPIServiceMode() { - b, err := h.GetSchedulingServerConfig("config/replicate") - if err != nil { - h.rd.JSON(w, http.StatusInternalServerError, err.Error()) - return - } - var cfg sc.ReplicationConfig - err = json.Unmarshal(b, &cfg) + cfg, err := h.GetSchedulingServerConfig() if err != nil { h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return @@ -555,12 +536,12 @@ func (h *confHandler) GetPDServerConfig(w http.ResponseWriter, r *http.Request) h.rd.JSON(w, http.StatusOK, h.svr.GetPDServerConfig()) } -func (h *confHandler) GetSchedulingServerConfig(path string) ([]byte, error) { +func (h *confHandler) GetSchedulingServerConfig() (*config.Config, error) { addr, ok := h.svr.GetServicePrimaryAddr(h.svr.Context(), utils.SchedulingServiceName) if !ok { return nil, errs.ErrNotFoundSchedulingAddr.FastGenByArgs() } - url := fmt.Sprintf("%s/scheduling/api/v1/%s", addr, path) + url := fmt.Sprintf("%s/scheduling/api/v1/config", addr) req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { return nil, err @@ -573,5 +554,15 @@ func (h *confHandler) GetSchedulingServerConfig(path string) ([]byte, error) { if resp.StatusCode != http.StatusOK { return nil, errs.ErrSchedulingServer.FastGenByArgs(resp.StatusCode) } - return io.ReadAll(resp.Body) + b, err := io.ReadAll(resp.Body) + if err != nil { + + return nil, err + } + var schedulingServerConfig config.Config + err = json.Unmarshal(b, &schedulingServerConfig) + if err != nil { + return nil, err + } + return &schedulingServerConfig, nil } diff --git a/tests/integrations/mcs/scheduling/api_test.go b/tests/integrations/mcs/scheduling/api_test.go index e4378ecdf59..d26cec04f2c 100644 --- a/tests/integrations/mcs/scheduling/api_test.go +++ b/tests/integrations/mcs/scheduling/api_test.go @@ -14,7 +14,6 @@ import ( "github.com/tikv/pd/pkg/core" _ "github.com/tikv/pd/pkg/mcs/scheduling/server/apis/v1" "github.com/tikv/pd/pkg/mcs/scheduling/server/config" - sc "github.com/tikv/pd/pkg/schedule/config" "github.com/tikv/pd/pkg/schedule/handler" "github.com/tikv/pd/pkg/statistics" "github.com/tikv/pd/pkg/storage" @@ -271,21 +270,6 @@ func (suite *apiTestSuite) TestConfig() { suite.Contains(cfg.Schedule.SchedulersPayload, "balance-hot-region-scheduler") suite.Contains(cfg.Schedule.SchedulersPayload, "balance-witness-scheduler") suite.Contains(cfg.Schedule.SchedulersPayload, "transfer-witness-leader-scheduler") - - var scheduleCfg sc.ScheduleConfig - testutil.ReadGetJSON(re, testDialClient, urlPrefix+"/schedule", &scheduleCfg) - suite.Equal(scheduleCfg.LeaderScheduleLimit, s.GetScheduleConfig().LeaderScheduleLimit) - suite.Equal(scheduleCfg.EnableCrossTableMerge, s.GetScheduleConfig().EnableCrossTableMerge) - - var replicationCfg sc.ReplicationConfig - testutil.ReadGetJSON(re, testDialClient, urlPrefix+"/replicate", &replicationCfg) - suite.Equal(replicationCfg.MaxReplicas, s.GetReplicationConfig().MaxReplicas) - suite.Equal(replicationCfg.LocationLabels, s.GetReplicationConfig().LocationLabels) - - var storeCfg sc.StoreConfig - testutil.ReadGetJSON(re, testDialClient, urlPrefix+"/store", &storeCfg) - suite.Equal(storeCfg.Coprocessor.RegionMaxKeys, s.GetStoreConfig().Coprocessor.RegionMaxKeys) - suite.Equal(storeCfg.Coprocessor.RegionSplitKeys, s.GetStoreConfig().Coprocessor.RegionSplitKeys) } env := tests.NewSchedulingTestEnvironment(suite.T()) env.RunTestInAPIMode(checkConfig) @@ -295,38 +279,28 @@ func TestConfigForward(t *testing.T) { re := require.New(t) checkConfigForward := func(cluster *tests.TestCluster) { sche := cluster.GetSchedulingPrimaryServer() + opts := sche.GetPersistConfig() var cfg map[string]interface{} addr := cluster.GetLeaderServer().GetAddr() // Test config urlPrefix := fmt.Sprintf("%s/pd/api/v1/config", addr) testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(cfg["schedule"].(map[string]interface{})["leader-schedule-limit"], float64(sche.GetScheduleConfig().LeaderScheduleLimit)) - // Test to change config - sche.GetPersistConfig().GetScheduleConfig().LeaderScheduleLimit = 100 - re.Equal(100, int(sche.GetScheduleConfig().LeaderScheduleLimit)) - testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(100., cfg["schedule"].(map[string]interface{})["leader-schedule-limit"]) + re.Equal(cfg["schedule"].(map[string]interface{})["leader-schedule-limit"], + float64(opts.GetLeaderScheduleLimit())) - // Test schedule - urlPrefix = fmt.Sprintf("%s/pd/api/v1/config/schedule", addr) - testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(cfg["leader-schedule-limit"], float64(sche.GetScheduleConfig().LeaderScheduleLimit)) - // Test to change config - sche.GetPersistConfig().GetScheduleConfig().LeaderScheduleLimit = 4 - re.Equal(4, int(sche.GetScheduleConfig().LeaderScheduleLimit)) - testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(4., cfg["leader-schedule-limit"]) + // Test to change config only in scheduling server + // Expect to get new config in scheduling server but not old config in api server - // Test replicate - urlPrefix = fmt.Sprintf("%s/pd/api/v1/config/replicate", addr) + opts.GetScheduleConfig().LeaderScheduleLimit = 100 + re.Equal(100, int(opts.GetLeaderScheduleLimit())) testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(cfg["max-replicas"], float64(sche.GetReplicationConfig().MaxReplicas)) - // Test to change config - sche.GetPersistConfig().GetReplicationConfig().MaxReplicas = 5 - re.Equal(5, int(sche.GetReplicationConfig().MaxReplicas)) + re.Equal(100., cfg["schedule"].(map[string]interface{})["leader-schedule-limit"]) + + opts.GetReplicationConfig().MaxReplicas = 5 + re.Equal(5, int(opts.GetReplicationConfig().MaxReplicas)) testutil.ReadGetJSON(re, testDialClient, urlPrefix, &cfg) - re.Equal(5., cfg["max-replicas"]) + re.Equal(5., cfg["replication"].(map[string]interface{})["max-replicas"]) } env := tests.NewSchedulingTestEnvironment(t) env.RunTestInAPIMode(checkConfigForward) From ab8bc53fd0edb71b61c375ba53029c5264639440 Mon Sep 17 00:00:00 2001 From: lhy1024 Date: Thu, 2 Nov 2023 14:53:22 +0800 Subject: [PATCH 2/3] fix Signed-off-by: lhy1024 --- server/api/config.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/server/api/config.go b/server/api/config.go index b26da146651..91d3d4ac8c0 100644 --- a/server/api/config.go +++ b/server/api/config.go @@ -319,6 +319,7 @@ func (h *confHandler) GetScheduleConfig(w http.ResponseWriter, r *http.Request) h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } + cfg.Schedule.SchedulersPayload = nil h.rd.JSON(w, http.StatusOK, cfg.Schedule) return } @@ -391,7 +392,7 @@ func (h *confHandler) GetReplicationConfig(w http.ResponseWriter, r *http.Reques h.rd.JSON(w, http.StatusInternalServerError, err.Error()) return } - h.rd.JSON(w, http.StatusOK, cfg) + h.rd.JSON(w, http.StatusOK, cfg.Replication) return } h.rd.JSON(w, http.StatusOK, h.svr.GetReplicationConfig()) From ab06849a61f8cff9adccd5421ae8feba39e2b27c Mon Sep 17 00:00:00 2001 From: lhy1024 Date: Thu, 2 Nov 2023 14:57:31 +0800 Subject: [PATCH 3/3] fix lint Signed-off-by: lhy1024 --- server/api/config.go | 1 - 1 file changed, 1 deletion(-) diff --git a/server/api/config.go b/server/api/config.go index 91d3d4ac8c0..746b1119a73 100644 --- a/server/api/config.go +++ b/server/api/config.go @@ -557,7 +557,6 @@ func (h *confHandler) GetSchedulingServerConfig() (*config.Config, error) { } b, err := io.ReadAll(resp.Body) if err != nil { - return nil, err } var schedulingServerConfig config.Config