Skip to content

Commit 5868852

Browse files
authored
promutil(engine): avoid embedding Mutex and prometheus.Registry in Registry (pingcap#5672)
ref pingcap#5673
1 parent 06dac5d commit 5868852

File tree

2 files changed

+19
-18
lines changed

2 files changed

+19
-18
lines changed

engine/pkg/promutil/registry.go

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@ package promutil
1616
import (
1717
"sync"
1818

19-
libModel "github.com/pingcap/tiflow/engine/lib/model"
2019
"github.com/prometheus/client_golang/prometheus"
2120
"github.com/prometheus/client_golang/prometheus/collectors"
2221
dto "github.com/prometheus/client_model/go"
22+
23+
libModel "github.com/pingcap/tiflow/engine/lib/model"
2324
)
2425

2526
var _ prometheus.Gatherer = globalMetricGatherer
@@ -39,8 +40,8 @@ func init() {
3940

4041
// Registry is used for registering metric
4142
type Registry struct {
42-
sync.Mutex
43-
*prometheus.Registry
43+
mu sync.Mutex
44+
registry *prometheus.Registry
4445

4546
// collectorByWorker is for cleaning all collectors for specific worker(jobmaster/worker)
4647
collectorByWorker map[libModel.WorkerID][]prometheus.Collector
@@ -49,7 +50,7 @@ type Registry struct {
4950
// NewRegistry return a new Registry
5051
func NewRegistry() *Registry {
5152
return &Registry{
52-
Registry: prometheus.NewRegistry(),
53+
registry: prometheus.NewRegistry(),
5354
collectorByWorker: make(map[libModel.WorkerID][]prometheus.Collector),
5455
}
5556
}
@@ -59,10 +60,10 @@ func (r *Registry) MustRegister(workerID libModel.WorkerID, c prometheus.Collect
5960
if c == nil {
6061
return
6162
}
62-
r.Lock()
63-
defer r.Unlock()
63+
r.mu.Lock()
64+
defer r.mu.Unlock()
6465

65-
r.Registry.MustRegister(c)
66+
r.registry.MustRegister(c)
6667

6768
var (
6869
cls []prometheus.Collector
@@ -78,13 +79,13 @@ func (r *Registry) MustRegister(workerID libModel.WorkerID, c prometheus.Collect
7879

7980
// Unregister unregisters all Collectors of the specified worker
8081
func (r *Registry) Unregister(workerID libModel.WorkerID) {
81-
r.Lock()
82-
defer r.Unlock()
82+
r.mu.Lock()
83+
defer r.mu.Unlock()
8384

8485
cls, exists := r.collectorByWorker[workerID]
8586
if exists {
8687
for _, collector := range cls {
87-
r.Registry.Unregister(collector)
88+
r.registry.Unregister(collector)
8889
}
8990
delete(r.collectorByWorker, workerID)
9091
}
@@ -93,7 +94,7 @@ func (r *Registry) Unregister(workerID libModel.WorkerID) {
9394
// Gather implements Gatherer interface
9495
func (r *Registry) Gather() ([]*dto.MetricFamily, error) {
9596
// NOT NEED lock here. prometheus.Registry has thread-safe methods
96-
return r.Registry.Gather()
97+
return r.registry.Gather()
9798
}
9899

99100
// AutoRegisterFactory uses inner Factory to create metrics and register metrics

engine/pkg/promutil/registry_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ func TestNewRegistry(t *testing.T) {
2424
t.Parallel()
2525

2626
reg := NewRegistry()
27-
require.NotNil(t, reg.Registry)
27+
require.NotNil(t, reg.registry)
2828
require.Len(t, reg.collectorByWorker, 0)
2929
}
3030

@@ -42,7 +42,7 @@ func TestMustRegister(t *testing.T) {
4242
t.Parallel()
4343

4444
reg := NewRegistry()
45-
require.NotNil(t, reg.Registry)
45+
require.NotNil(t, reg.registry)
4646

4747
// normal case, register successfully
4848
reg.MustRegister("worker0", prometheus.NewCounter(prometheus.CounterOpts{
@@ -112,7 +112,7 @@ func TestMustRegisterNotValidName(t *testing.T) {
112112
}()
113113

114114
reg := NewRegistry()
115-
require.NotNil(t, reg.Registry)
115+
require.NotNil(t, reg.registry)
116116

117117
// not a valid metric name
118118
reg.MustRegister("worker", prometheus.NewCounter(prometheus.CounterOpts{
@@ -130,7 +130,7 @@ func TestMustRegisterNotValidLableName(t *testing.T) {
130130
}()
131131

132132
reg := NewRegistry()
133-
require.NotNil(t, reg.Registry)
133+
require.NotNil(t, reg.registry)
134134

135135
// not a valid metric name
136136
reg.MustRegister("worker", prometheus.NewCounter(prometheus.CounterOpts{
@@ -152,7 +152,7 @@ func TestMustRegisterFailDuplicateNameLabels(t *testing.T) {
152152
}()
153153

154154
reg := NewRegistry()
155-
require.NotNil(t, reg.Registry)
155+
require.NotNil(t, reg.registry)
156156

157157
reg.MustRegister("worker", prometheus.NewCounter(prometheus.CounterOpts{
158158
Name: "counter5",
@@ -179,7 +179,7 @@ func TestMustRegisterFailInconsistent(t *testing.T) {
179179
}()
180180

181181
reg := NewRegistry()
182-
require.NotNil(t, reg.Registry)
182+
require.NotNil(t, reg.registry)
183183

184184
reg.MustRegister("worker", prometheus.NewCounter(prometheus.CounterOpts{
185185
Name: "counter5",
@@ -199,7 +199,7 @@ func TestUnregister(t *testing.T) {
199199
t.Parallel()
200200

201201
reg := NewRegistry()
202-
require.NotNil(t, reg.Registry)
202+
require.NotNil(t, reg.registry)
203203
reg.MustRegister("worker0", prometheus.NewCounter(prometheus.CounterOpts{
204204
Name: "counter5",
205205
ConstLabels: prometheus.Labels{

0 commit comments

Comments
 (0)