Skip to content

Commit

Permalink
ddc support kill session
Browse files Browse the repository at this point in the history
  • Loading branch information
yangxin16 committed Jul 6, 2021
1 parent 7405b7e commit 2a496e0
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 1 deletion.
41 changes: 41 additions & 0 deletions doc/DDCv2.md
Original file line number Diff line number Diff line change
Expand Up @@ -1507,6 +1507,47 @@ if err != nil {
}
fmt.Println("[lazy drop] delete hard link success.")
```
# 会话管理

## 执行KillSession任务

使用以下代码可以对指定数据库执行KillSession任务。
```go
// import ddcrds "github.com/baidubce/bce-sdk-go/services/ddc/v2"

args := &ddcrds.KillSessionArgs{
// 实例角色
Role: "master",
// Session ID
SessionIds: []int{8661, 8662},
}
result, err := client.KillSession(instanceId, args)
if err != nil {
fmt.Printf("start kill session task error: %+v\n", err)
return
}
fmt.Println("start kill session task success. TaskID:", result.TaskID)
```


## 查看KillSession任务进度

使用以下代码可以查看指定数据库下已执行的KillSession任务的进度。
```go
// import ddcrds "github.com/baidubce/bce-sdk-go/services/ddc/v2"

// taskId 为执行KillSession任务时返回的任务Id
result, err := client.GetKillSessionTask(instanceId, taskId)
if err != nil {
fmt.Printf("get kill session task error: %+v\n", err)
return
}
fmt.Println("get kill session task success.")
for _, task := range result.Tasks {
fmt.Println("sessionId: ", task.SessionID)
fmt.Println("task status: ", task.Status)
}
```

# 账号管理

Expand Down
9 changes: 9 additions & 0 deletions services/ddc/v2/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package ddcrds

import (
"fmt"
"strconv"
"strings"

"github.com/baidubce/bce-sdk-go/auth"
Expand Down Expand Up @@ -300,3 +301,11 @@ func getTableHardLinkUrl(instanceId, dbName, tableName string) string {
func getChangeSemiSyncStatusUrlWithId(instanceId string) string {
return URI_PREFIX + REQUEST_DDC_INSTANCE_URL + "/" + instanceId + "/semisync"
}

func getKillSessionUri(instanceId string) string {
return URI_PREFIX + REQUEST_DDC_INSTANCE_URL + "/" + instanceId + "/session/kill"
}

func getKillSessionTaskUri(instanceId string, taskId int) string {
return URI_PREFIX + REQUEST_DDC_INSTANCE_URL + "/" + instanceId + "/session/task" + "/" + strconv.Itoa(taskId)
}
29 changes: 28 additions & 1 deletion services/ddc/v2/client_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const (
POOL = "xdb_005a2d79-a4f4-4bfb-8284-0ffe9ddaa307_pool"
PNETIP = "100.88.65.121"
DEPLOY_ID = "ab89d829-9068-d88e-75bc-64bb6367d036"
DDC_INSTANCE_ID = "ddc-m8rwmbnn"
DDC_INSTANCE_ID = "ddc-m94xmm0t"
RDS_INSTANCE_ID = "rds-OtTkC1OD"
ETAG = "v0"
)
Expand Down Expand Up @@ -1466,3 +1466,30 @@ func TestClient_GetFlavorCapacity(t *testing.T) {
fmt.Printf("Slave capacity: %d\n", residualByZone.Slave)
}
}

func TestClient_KillSession(t *testing.T) {
args := &KillSessionArgs{
Role: "master",
SessionIds: []int{8661, 8662},
}
result, err := client.KillSession(instanceId, args)
if err != nil {
fmt.Printf("start kill session task error: %+v\n", err)
return
}
fmt.Println("start kill session task success. TaskID:", result.TaskID)
}

func TestClient_GetKillSessionTaskResult(t *testing.T) {
taskId := 285647
result, err := client.GetKillSessionTask(instanceId, taskId)
if err != nil {
fmt.Printf("get kill session task error: %+v\n", err)
return
}
fmt.Println("get kill session task success.")
for _, task := range result.Tasks {
fmt.Println("sessionId: ", task.SessionID)
fmt.Println("task status: ", task.Status)
}
}
46 changes: 46 additions & 0 deletions services/ddc/v2/ddc.go
Original file line number Diff line number Diff line change
Expand Up @@ -2006,3 +2006,49 @@ func (c *DDCClient) GetFlavorCapacity(poolId string, args *GetFlavorCapacityArgs
Do()
return result, err
}

// KillSession - start kill session tasks
//
// PARAMS:
// - instanceId: id of the instance
// - args: instance role and sessionIds
// RETURNS:
// - *KillSessionResult: the response of kill session task id
// - error: nil if success otherwise the specific error
func (c *DDCClient) KillSession(instanceId string, args *KillSessionArgs) (*KillSessionResult, error) {
if args == nil {
return nil, fmt.Errorf("unset args")
}

result := &KillSessionResult{}
err := bce.NewRequestBuilder(c).
WithMethod(http.PUT).
WithURL(getKillSessionUri(instanceId)).
WithHeader(http.CONTENT_TYPE, bce.DEFAULT_CONTENT_TYPE).
WithBody(args).
WithResult(result).
Do()
if err != nil {
return nil, err
}
return result, err
}

// GetKillSessionTask - get kill session tasks by taskId
//
// PARAMS:
// - instanceId: the specific instanceId of ddc
// - taskId: kill session returned id
// RETURNS:
// - *GetKillSessionTaskResult: the response of kill session task
// - error: nil if success otherwise the specific error
func (c *DDCClient) GetKillSessionTask(instanceId string, taskId int) (*GetKillSessionTaskResult, error) {
result := &GetKillSessionTaskResult{}
err := bce.NewRequestBuilder(c).
WithMethod(http.GET).
WithURL(getKillSessionTaskUri(instanceId, taskId)).
WithResult(result).
Do()

return result, err
}
24 changes: 24 additions & 0 deletions services/ddc/v2/ddcrds.go
Original file line number Diff line number Diff line change
Expand Up @@ -1369,3 +1369,27 @@ func (c *Client) GetResidual(poolId string) (*GetResidualResult, error) {
func (c *Client) GetFlavorCapacity(poolId string, args *GetFlavorCapacityArgs) (*GetFlavorCapacityResult, error) {
return c.ddcClient.GetFlavorCapacity(poolId, args)
}

// KillSession - start kill session tasks
//
// PARAMS:
// - instanceId: id of the instance
// - args: instance role and sessionIds
// RETURNS:
// - *KillSessionResult: the response of kill session task id
// - error: nil if success otherwise the specific error
func (c *Client) KillSession(instanceId string, args *KillSessionArgs) (*KillSessionResult, error) {
return c.ddcClient.KillSession(instanceId, args)
}

// GetKillSessionTask - get kill session tasks by taskId
//
// PARAMS:
// - instanceId: the specific instanceId of ddc
// - taskId: kill session returned id
// RETURNS:
// - *GetKillSessionTaskResult: the response of kill session task
// - error: nil if success otherwise the specific error
func (c *Client) GetKillSessionTask(instanceId string, taskId int) (*GetKillSessionTaskResult, error) {
return c.ddcClient.GetKillSessionTask(instanceId, taskId)
}
15 changes: 15 additions & 0 deletions services/ddc/v2/model.go
Original file line number Diff line number Diff line change
Expand Up @@ -980,3 +980,18 @@ type RecoverData struct {
DbName string `json:"dbName"`
NewDbName string `json:"newDbName"`
}

type KillSessionArgs struct {
Role string `json:"role"`
SessionIds []int `json:"sessionIds"`
}
type KillSessionResult struct {
TaskID int `json:"taskId"`
}
type GetKillSessionTaskResult struct {
Tasks []KillSessionTask `json:"tasks"`
}
type KillSessionTask struct {
SessionID int `json:"sessionId"`
Status string `json:"status"`
}

0 comments on commit 2a496e0

Please sign in to comment.