From d47252ace035d86ddf3a44086490f710c6015dc8 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Wed, 11 Nov 2020 18:52:27 +0800 Subject: [PATCH] store/tikv: Fix goroutine leak in tikv client (#20808) (#20863) --- store/tikv/kv.go | 4 ++++ store/tikv/safepoint.go | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/store/tikv/kv.go b/store/tikv/kv.go index e7081ab58e685..933d99c82b27f 100644 --- a/store/tikv/kv.go +++ b/store/tikv/kv.go @@ -305,6 +305,10 @@ func (s *tikvStore) Close() error { s.txnLatches.Close() } s.regionCache.Close() + + if err := s.kv.Close(); err != nil { + return errors.Trace(err) + } return nil } diff --git a/store/tikv/safepoint.go b/store/tikv/safepoint.go index a976dfb10ae83..e032a4d86fcf6 100644 --- a/store/tikv/safepoint.go +++ b/store/tikv/safepoint.go @@ -43,6 +43,7 @@ const ( type SafePointKV interface { Put(k string, v string) error Get(k string) (string, error) + Close() error } // MockSafePointKV implements SafePointKV at mock test @@ -74,6 +75,11 @@ func (w *MockSafePointKV) Get(k string) (string, error) { return elem, nil } +// Close implements the Close method for SafePointKV +func (w *MockSafePointKV) Close() error { + return nil +} + // EtcdSafePointKV implements SafePointKV at runtime type EtcdSafePointKV struct { cli *clientv3.Client @@ -113,6 +119,11 @@ func (w *EtcdSafePointKV) Get(k string) (string, error) { return "", nil } +// Close implements the Close for SafePointKV +func (w *EtcdSafePointKV) Close() error { + return errors.Trace(w.cli.Close()) +} + func saveSafePoint(kv SafePointKV, key string, t uint64) error { s := strconv.FormatUint(t, 10) err := kv.Put(GcSavedSafePoint, s)