Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

openapi(dm): change url path from config to templates #4040

Merged
merged 6 commits into from
Jan 5, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions dm/dm/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,18 +89,20 @@ var (
// tb3: +a +b +c
ShardDDLOptimismDroppedColumnsKeyAdapter KeyAdapter = keyHexEncoderDecoder("/dm-master/shardddl-optimism/dropped-columns/")

// OpenAPITaskConfigKeyAdapter is used to store the openapi task config (openapi.Task), now it's only used for WebUI.
// OpenAPITaskTemplateKeyAdapter is used to store the openapi task-config-template (openapi.Task), now it's only used for WebUI.
// openapi.Task is a struct that can be converted to config.StubTaskConfig so if any field of openapi.Task updated
// user should use ha.PutOpenAPITaskConfig(key, openapi.Task,overwrite) to force update the content in etcd.
// user should use ha.PutOpenAPITaskTemplate(key, openapi.Task,overwrite) to force update the content in etcd.
// k/v: Encode(task-name) -> openapi.Task.
OpenAPITaskConfigKeyAdapter KeyAdapter = keyHexEncoderDecoder("/dm-master/openapi-task-config/")
// task config template is used to generate task config before user create a real task by openapi. user can modify eg:
// import from running tasks/create/update/delete the template and those changes will not affect the running tasks.
OpenAPITaskTemplateKeyAdapter KeyAdapter = keyHexEncoderDecoder("/dm-master/openapi-task-template/")
)

func keyAdapterKeysLen(s KeyAdapter) int {
switch s {
case WorkerRegisterKeyAdapter, UpstreamConfigKeyAdapter, UpstreamBoundWorkerKeyAdapter,
WorkerKeepAliveKeyAdapter, StageRelayKeyAdapter,
UpstreamLastBoundWorkerKeyAdapter, UpstreamRelayWorkerKeyAdapter, OpenAPITaskConfigKeyAdapter:
UpstreamLastBoundWorkerKeyAdapter, UpstreamRelayWorkerKeyAdapter, OpenAPITaskTemplateKeyAdapter:
return 1
case UpstreamSubTaskKeyAdapter, StageSubTaskKeyAdapter,
ShardDDLPessimismInfoKeyAdapter, ShardDDLPessimismOperationKeyAdapter,
Expand Down
4 changes: 2 additions & 2 deletions dm/dm/common/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,8 +83,8 @@ func (t *testCommon) TestKeyAdapter(c *C) {
},
{
keys: []string{"task-1"},
adapter: OpenAPITaskConfigKeyAdapter,
want: "/dm-master/openapi-task-config/7461736b2d31",
adapter: OpenAPITaskTemplateKeyAdapter,
want: "/dm-master/openapi-task-template/7461736b2d31",
},
}

Expand Down
40 changes: 20 additions & 20 deletions dm/dm/master/openapi.go
Original file line number Diff line number Diff line change
Expand Up @@ -783,22 +783,22 @@ func (s *Server) DMAPIOperateTableStructure(c *gin.Context, taskName string, sou
}
}

// DMAPIImportTaskConfig create task_config_template url is: (POST /api/v1/task/configs/import).
func (s *Server) DMAPIImportTaskConfig(c *gin.Context) {
var req openapi.TaskConfigRequest
// DMAPIImportTaskTemplate create task_config_template url is: (POST /api/v1/task/templates/import).
func (s *Server) DMAPIImportTaskTemplate(c *gin.Context) {
var req openapi.TaskTemplateRequest
if err := c.Bind(&req); err != nil {
_ = c.Error(err)
return
}
resp := openapi.TaskConfigResponse{
resp := openapi.TaskTemplateResponse{
FailedTaskList: []struct {
ErrorMsg string `json:"error_msg"`
TaskName string `json:"task_name"`
}{},
SuccessTaskList: []string{},
}
for _, task := range config.SubTaskConfigsToOpenAPITask(s.scheduler.GetSubTaskCfgs()) {
if err := ha.PutOpenAPITaskConfig(s.etcdClient, task, req.Overwrite); err != nil {
if err := ha.PutOpenAPITaskTemplate(s.etcdClient, task, req.Overwrite); err != nil {
resp.FailedTaskList = append(resp.FailedTaskList, struct {
ErrorMsg string `json:"error_msg"`
TaskName string `json:"task_name"`
Expand All @@ -813,8 +813,8 @@ func (s *Server) DMAPIImportTaskConfig(c *gin.Context) {
c.IndentedJSON(http.StatusAccepted, resp)
}

// DMAPICreateTaskConfig create task_config_template url is: (POST /api/task/configs).
func (s *Server) DMAPICreateTaskConfig(c *gin.Context) {
// DMAPICreateTaskTemplate create task_config_template url is: (POST /api/task/templates).
func (s *Server) DMAPICreateTaskTemplate(c *gin.Context) {
task := &openapi.Task{}
if err := c.Bind(task); err != nil {
_ = c.Error(err)
Expand All @@ -831,16 +831,16 @@ func (s *Server) DMAPICreateTaskConfig(c *gin.Context) {
_ = c.Error(terror.WithClass(adjustDBErr, terror.ClassDMMaster))
return
}
if err := ha.PutOpenAPITaskConfig(s.etcdClient, *task, false); err != nil {
if err := ha.PutOpenAPITaskTemplate(s.etcdClient, *task, false); err != nil {
_ = c.Error(err)
return
}
c.IndentedJSON(http.StatusCreated, task)
}

// DMAPIGetTaskConfigList get task_config_template list url is: (GET /api/v1/task/configs).
func (s *Server) DMAPIGetTaskConfigList(c *gin.Context) {
TaskConfigList, err := ha.GetAllOpenAPITaskConfig(s.etcdClient)
// DMAPIGetTaskTemplateList get task_config_template list url is: (GET /api/v1/task/templates).
func (s *Server) DMAPIGetTaskTemplateList(c *gin.Context) {
TaskConfigList, err := ha.GetAllOpenAPITaskTemplate(s.etcdClient)
if err != nil {
_ = c.Error(err)
return
Expand All @@ -853,18 +853,18 @@ func (s *Server) DMAPIGetTaskConfigList(c *gin.Context) {
c.IndentedJSON(http.StatusOK, resp)
}

// DMAPIDeleteTaskConfig delete task_config_template url is: (DELETE /api/v1/task/configs/{task-name}).
func (s *Server) DMAPIDeleteTaskConfig(c *gin.Context, taskName string) {
if err := ha.DeleteOpenAPITaskConfig(s.etcdClient, taskName); err != nil {
// DMAPIDeleteTaskTemplate delete task_config_template url is: (DELETE /api/v1/task/templates/{task-name}).
func (s *Server) DMAPIDeleteTaskTemplate(c *gin.Context, taskName string) {
if err := ha.DeleteOpenAPITaskTemplate(s.etcdClient, taskName); err != nil {
_ = c.Error(err)
return
}
c.Status(http.StatusNoContent)
}

// DMAPIGetTaskConfig get task_config_template url is: (GET /api/v1/task/configs/{task-name}).
func (s *Server) DMAPIGetTaskConfig(c *gin.Context, taskName string) {
task, err := ha.GetOpenAPITaskConfig(s.etcdClient, taskName)
// DMAPIGetTaskTemplate get task_config_template url is: (GET /api/v1/task/templates/{task-name}).
func (s *Server) DMAPIGetTaskTemplate(c *gin.Context, taskName string) {
task, err := ha.GetOpenAPITaskTemplate(s.etcdClient, taskName)
if err != nil {
_ = c.Error(err)
return
Expand All @@ -876,8 +876,8 @@ func (s *Server) DMAPIGetTaskConfig(c *gin.Context, taskName string) {
c.IndentedJSON(http.StatusOK, task)
}

// DMAPUpdateTaskConfig update task_config_template url is: (PUT /api/v1/task/configs/{task-name}).
func (s *Server) DMAPUpdateTaskConfig(c *gin.Context, taskName string) {
// DMAPUpdateTaskTemplate update task_config_template url is: (PUT /api/v1/task/templates/{task-name}).
func (s *Server) DMAPUpdateTaskTemplate(c *gin.Context, taskName string) {
task := &openapi.Task{}
if err := c.Bind(task); err != nil {
_ = c.Error(err)
Expand All @@ -893,7 +893,7 @@ func (s *Server) DMAPUpdateTaskConfig(c *gin.Context, taskName string) {
_ = c.Error(terror.WithClass(adjustDBErr, terror.ClassDMMaster))
return
}
if err := ha.UpdateOpenAPITaskConfig(s.etcdClient, *task); err != nil {
if err := ha.UpdateOpenAPITaskTemplate(s.etcdClient, *task); err != nil {
_ = c.Error(err)
return
}
Expand Down
10 changes: 5 additions & 5 deletions dm/dm/master/openapi_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -497,11 +497,11 @@ func (t *openAPISuite) TestTaskAPI(c *check.C) {
c.Assert(resultTaskList.Data[0].Name, check.Equals, task.Name)

// test batch import task config
taskBatchImportURL := "/api/v1/task/configs/import"
req := openapi.TaskConfigRequest{Overwrite: false}
taskBatchImportURL := "/api/v1/task/templates/import"
req := openapi.TaskTemplateRequest{Overwrite: false}
result = testutil.NewRequest().Post(taskBatchImportURL).WithJsonBody(req).GoWithHTTPHandler(t.testT, s.openapiHandles)
c.Assert(result.Code(), check.Equals, http.StatusAccepted)
var resp openapi.TaskConfigResponse
var resp openapi.TaskTemplateResponse
c.Assert(result.UnmarshalBodyToObject(&resp), check.IsNil)
c.Assert(resp.SuccessTaskList, check.HasLen, 1)
c.Assert(resp.SuccessTaskList[0], check.Equals, task.Name)
Expand Down Expand Up @@ -677,7 +677,7 @@ func (t *openAPISuite) TestClusterAPI(c *check.C) {
cancel1()
}

func (t *openAPISuite) TestTaskConfigsAPI(c *check.C) {
func (t *openAPISuite) TestTaskTemplatesAPI(c *check.C) {
ctx, cancel := context.WithCancel(context.Background())
s := setupServer(ctx, c)
c.Assert(failpoint.Enable("github.com/pingcap/tiflow/dm/dm/master/MockSkipAdjustTargetDB", `return(true)`), check.IsNil)
Expand Down Expand Up @@ -705,7 +705,7 @@ func (t *openAPISuite) TestTaskConfigsAPI(c *check.C) {
c.Assert(result.Code(), check.Equals, http.StatusCreated)

// create task config template
url := "/api/v1/task/configs"
url := "/api/v1/task/templates"

task, err := fixtures.GenNoShardOpenAPITaskForTest()
c.Assert(err, check.IsNil)
Expand Down
Loading