diff --git a/go.mod b/go.mod index ce79f065..051a5b6d 100644 --- a/go.mod +++ b/go.mod @@ -20,6 +20,7 @@ require ( github.com/prometheus/client_model v0.2.0 github.com/stathat/consistent v1.0.0 github.com/stretchr/testify v1.7.0 + github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1 github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07 github.com/twmb/murmur3 v1.1.3 go.etcd.io/etcd/api/v3 v3.5.2 diff --git a/go.sum b/go.sum index 2ae88f5f..01a82fba 100644 --- a/go.sum +++ b/go.sum @@ -201,6 +201,8 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1 h1:iffZXeHZTd35tTOS3nJ2OyMUmn40eNkLHCeQXMs6KYI= +github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07 h1:ckPpxKcl75mO2N6a4cJXiZH43hvcHPpqc9dh1TmH1nc= github.com/tikv/pd/client v0.0.0-20221031025758-80f0d8ca4d07/go.mod h1:CipBxPfxPUME+BImx9MUYXCnAVLS3VJUr3mnSJwh40A= github.com/twmb/murmur3 v1.1.3 h1:D83U0XYKcHRYwYIpBKf3Pks91Z0Byda/9SJ8B6EMRcA= diff --git a/integration_tests/go.mod b/integration_tests/go.mod index 511cdb15..19c426e5 100644 --- a/integration_tests/go.mod +++ b/integration_tests/go.mod @@ -69,6 +69,7 @@ require ( github.com/shirou/gopsutil/v3 v3.22.7 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stathat/consistent v1.0.0 // indirect + github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1 // indirect github.com/tidwall/match v1.1.1 // indirect github.com/tidwall/pretty v1.2.0 // indirect github.com/twmb/murmur3 v1.1.3 // indirect diff --git a/integration_tests/go.sum b/integration_tests/go.sum index a74cbace..825d5e4f 100644 --- a/integration_tests/go.sum +++ b/integration_tests/go.sum @@ -505,6 +505,8 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/tiancaiamao/appdash v0.0.0-20181126055449-889f96f722a2 h1:mbAskLJ0oJfDRtkanvQPiooDH8HvJ2FBh+iKT/OmiQQ= +github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1 h1:iffZXeHZTd35tTOS3nJ2OyMUmn40eNkLHCeQXMs6KYI= +github.com/tiancaiamao/gp v0.0.0-20221214071713-abacb15f16f1/go.mod h1:h4xBhSNtOeEosLJ4P7JyKXX7Cabg7AVkWCK5gV2vOrM= github.com/tidwall/gjson v1.14.1 h1:iymTbGkQBhveq21bEvAQ81I0LEBork8BFe1CUZXdyuo= github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= diff --git a/txnkv/transaction/2pc.go b/txnkv/transaction/2pc.go index c05060a4..41427d5c 100644 --- a/txnkv/transaction/2pc.go +++ b/txnkv/transaction/2pc.go @@ -49,6 +49,7 @@ import ( "github.com/pingcap/kvproto/pkg/kvrpcpb" "github.com/pkg/errors" "github.com/prometheus/client_golang/prometheus" + "github.com/tiancaiamao/gp" "github.com/tikv/client-go/v2/config" tikverr "github.com/tikv/client-go/v2/error" "github.com/tikv/client-go/v2/internal/client" @@ -88,6 +89,8 @@ var ( CommitMaxBackoff = uint64(40000) ) +var gP = gp.New(128, 10*time.Second) + type kvstore interface { // GetRegionCache gets the RegionCache. GetRegionCache() *locate.RegionCache @@ -987,7 +990,7 @@ func (c *twoPhaseCommitter) doActionOnGroupMutations(bo *retry.Backoffer, action return nil } c.store.WaitGroup().Add(1) - go func() { + gP.Go(func() { defer c.store.WaitGroup().Done() if c.sessionID > 0 { if v, err := util.EvalFailpoint("beforeCommitSecondaries"); err == nil { @@ -1011,7 +1014,7 @@ func (c *twoPhaseCommitter) doActionOnGroupMutations(bo *retry.Backoffer, action zap.Error(e)) metrics.SecondaryLockCleanupFailureCounterCommit.Inc() } - }() + }) } else { err = c.doActionOnBatches(bo, action, batchBuilder.allBatches()) }