From c5142a3c36a81e1c7eaf4c124f306a204864ca8b Mon Sep 17 00:00:00 2001 From: yiwen92 <543533977@qq.com> Date: Thu, 28 Oct 2021 16:12:32 +0800 Subject: [PATCH 1/4] server: explicit show kill status in process list info (#24031) --- server/server.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/server.go b/server/server.go index c2a2ea8966fba..8cd25aceafc84 100644 --- a/server/server.go +++ b/server/server.go @@ -685,6 +685,8 @@ func (s *Server) getTLSConfig() *tls.Config { func killConn(conn *clientConn) { sessVars := conn.ctx.GetSessionVars() atomic.StoreUint32(&sessVars.Killed, 1) + // 'Kill' status can be showed in Command/Info field when show processlist + conn.ctx.SetProcessInfo("this session is being killed", time.Now(), mysql.ComProcessKill, 0) conn.mu.RLock() cancelFunc := conn.mu.cancelFunc conn.mu.RUnlock() From 5356af9929af94796e9bf79eba3c6d87e1754e3c Mon Sep 17 00:00:00 2001 From: yiwen92 <543533977@qq.com> Date: Fri, 5 Nov 2021 23:41:28 +0800 Subject: [PATCH 2/4] server: explicit show kill status in process list state --- parser/mysql/const.go | 1 + server/server.go | 6 ++++-- util/processinfo.go | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/parser/mysql/const.go b/parser/mysql/const.go index 23fdae95e7032..9b394e70c3941 100644 --- a/parser/mysql/const.go +++ b/parser/mysql/const.go @@ -49,6 +49,7 @@ const AuthSwitchRequest byte = 0xfe const ( ServerStatusInTrans uint16 = 0x0001 ServerStatusAutocommit uint16 = 0x0002 + ServerStatusKilled uint16 = 0x0004 ServerMoreResultsExists uint16 = 0x0008 ServerStatusNoGoodIndexUsed uint16 = 0x0010 ServerStatusNoIndexUsed uint16 = 0x0020 diff --git a/server/server.go b/server/server.go index 8cd25aceafc84..31f85bb5c012a 100644 --- a/server/server.go +++ b/server/server.go @@ -685,8 +685,10 @@ func (s *Server) getTLSConfig() *tls.Config { func killConn(conn *clientConn) { sessVars := conn.ctx.GetSessionVars() atomic.StoreUint32(&sessVars.Killed, 1) - // 'Kill' status can be showed in Command/Info field when show processlist - conn.ctx.SetProcessInfo("this session is being killed", time.Now(), mysql.ComProcessKill, 0) + // 'killed' status can be showed in State field when show processlist + sessVars.SetStatusFlag(mysql.ServerStatusKilled, true) + // we need use the following function to Store the value into State, but it will also rewrite Info + conn.ctx.SetProcessInfo("", time.Now(), mysql.ComProcessKill, 0) conn.mu.RLock() cancelFunc := conn.mu.cancelFunc conn.mu.RUnlock() diff --git a/util/processinfo.go b/util/processinfo.go index 5b226cf3f1305..cae3b718d03c4 100644 --- a/util/processinfo.go +++ b/util/processinfo.go @@ -116,6 +116,7 @@ func (pi *ProcessInfo) ToRow(tz *time.Location) []interface{} { var ascServerStatus = []uint16{ mysql.ServerStatusInTrans, mysql.ServerStatusAutocommit, + mysql.ServerStatusKilled, mysql.ServerMoreResultsExists, mysql.ServerStatusNoGoodIndexUsed, mysql.ServerStatusNoIndexUsed, @@ -132,6 +133,7 @@ var ascServerStatus = []uint16{ var mapServerStatus2Str = map[uint16]string{ mysql.ServerStatusInTrans: "in transaction", mysql.ServerStatusAutocommit: "autocommit", + mysql.ServerStatusKilled: "killed", mysql.ServerMoreResultsExists: "more results exists", mysql.ServerStatusNoGoodIndexUsed: "no good index used", mysql.ServerStatusNoIndexUsed: "no index used", From 3f3d802e0bb81a35fc51b1e09663525568433480 Mon Sep 17 00:00:00 2001 From: yiwen92 <543533977@qq.com> Date: Mon, 8 Nov 2021 12:22:59 +0800 Subject: [PATCH 3/4] server: fix show problem for kill tidb connection --- server/server.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/server/server.go b/server/server.go index 31f85bb5c012a..2de277662e0ee 100644 --- a/server/server.go +++ b/server/server.go @@ -619,6 +619,9 @@ func (s *Server) ShowProcessList() map[uint64]*util.ProcessInfo { defer s.rwlock.RUnlock() rs := make(map[uint64]*util.ProcessInfo, len(s.clients)) for _, client := range s.clients { + if atomic.LoadInt32(&client.status) == connStatusWaitShutdown { + continue + } if pi := client.ctx.ShowProcess(); pi != nil { rs[pi.ID] = pi } From f4d4bad8189eaca6cabf8ec361983ec0d24c0a6c Mon Sep 17 00:00:00 2001 From: yiwen92 <543533977@qq.com> Date: Mon, 8 Nov 2021 12:22:59 +0800 Subject: [PATCH 4/4] server: fix show problem for kill tidb connection --- parser/mysql/const.go | 1 - server/server.go | 7 +++---- util/processinfo.go | 2 -- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/parser/mysql/const.go b/parser/mysql/const.go index 9b394e70c3941..23fdae95e7032 100644 --- a/parser/mysql/const.go +++ b/parser/mysql/const.go @@ -49,7 +49,6 @@ const AuthSwitchRequest byte = 0xfe const ( ServerStatusInTrans uint16 = 0x0001 ServerStatusAutocommit uint16 = 0x0002 - ServerStatusKilled uint16 = 0x0004 ServerMoreResultsExists uint16 = 0x0008 ServerStatusNoGoodIndexUsed uint16 = 0x0010 ServerStatusNoIndexUsed uint16 = 0x0020 diff --git a/server/server.go b/server/server.go index 31f85bb5c012a..bc3c4a5f784da 100644 --- a/server/server.go +++ b/server/server.go @@ -619,6 +619,9 @@ func (s *Server) ShowProcessList() map[uint64]*util.ProcessInfo { defer s.rwlock.RUnlock() rs := make(map[uint64]*util.ProcessInfo, len(s.clients)) for _, client := range s.clients { + if atomic.LoadInt32(&client.status) == connStatusWaitShutdown { + continue + } if pi := client.ctx.ShowProcess(); pi != nil { rs[pi.ID] = pi } @@ -685,10 +688,6 @@ func (s *Server) getTLSConfig() *tls.Config { func killConn(conn *clientConn) { sessVars := conn.ctx.GetSessionVars() atomic.StoreUint32(&sessVars.Killed, 1) - // 'killed' status can be showed in State field when show processlist - sessVars.SetStatusFlag(mysql.ServerStatusKilled, true) - // we need use the following function to Store the value into State, but it will also rewrite Info - conn.ctx.SetProcessInfo("", time.Now(), mysql.ComProcessKill, 0) conn.mu.RLock() cancelFunc := conn.mu.cancelFunc conn.mu.RUnlock() diff --git a/util/processinfo.go b/util/processinfo.go index cae3b718d03c4..5b226cf3f1305 100644 --- a/util/processinfo.go +++ b/util/processinfo.go @@ -116,7 +116,6 @@ func (pi *ProcessInfo) ToRow(tz *time.Location) []interface{} { var ascServerStatus = []uint16{ mysql.ServerStatusInTrans, mysql.ServerStatusAutocommit, - mysql.ServerStatusKilled, mysql.ServerMoreResultsExists, mysql.ServerStatusNoGoodIndexUsed, mysql.ServerStatusNoIndexUsed, @@ -133,7 +132,6 @@ var ascServerStatus = []uint16{ var mapServerStatus2Str = map[uint16]string{ mysql.ServerStatusInTrans: "in transaction", mysql.ServerStatusAutocommit: "autocommit", - mysql.ServerStatusKilled: "killed", mysql.ServerMoreResultsExists: "more results exists", mysql.ServerStatusNoGoodIndexUsed: "no good index used", mysql.ServerStatusNoIndexUsed: "no index used",