Skip to content

Commit 23e2d3a

Browse files
committed
chore: rebuild provider load
1 parent 6e35cf9 commit 23e2d3a

File tree

3 files changed

+26
-77
lines changed

3 files changed

+26
-77
lines changed

adapter/provider/healthcheck.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,14 @@ type HealthCheck struct {
4343
}
4444

4545
func (hc *HealthCheck) process() {
46-
if hc.started.Load() {
46+
if !hc.started.CompareAndSwap(false, true) {
4747
log.Warnln("Skip start health check timer due to it's started")
4848
return
4949
}
50+
defer hc.started.Store(false)
5051

5152
ticker := time.NewTicker(hc.interval)
52-
hc.start()
53+
go hc.check()
5354
for {
5455
select {
5556
case <-ticker.C:
@@ -62,7 +63,6 @@ func (hc *HealthCheck) process() {
6263
}
6364
case <-hc.ctx.Done():
6465
ticker.Stop()
65-
hc.stop()
6666
return
6767
}
6868
}
@@ -131,14 +131,6 @@ func (hc *HealthCheck) touch() {
131131
hc.lastTouch.Store(time.Now())
132132
}
133133

134-
func (hc *HealthCheck) start() {
135-
hc.started.Store(true)
136-
}
137-
138-
func (hc *HealthCheck) stop() {
139-
hc.started.Store(false)
140-
}
141-
142134
func (hc *HealthCheck) check() {
143135
if len(hc.proxies) == 0 {
144136
return

adapter/provider/provider.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -302,9 +302,6 @@ func (cp *compatibleProvider) Update() error {
302302
}
303303

304304
func (cp *compatibleProvider) Initial() error {
305-
if cp.healthCheck.interval != 0 && cp.healthCheck.url != "" {
306-
cp.HealthCheck()
307-
}
308305
return nil
309306
}
310307

hub/executor/executor.go

Lines changed: 23 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -113,12 +113,11 @@ func ApplyConfig(cfg *config.Config, force bool) {
113113
tunnel.OnInnerLoading()
114114

115115
initInnerTcp()
116-
loadProxyProvider(cfg.Providers)
116+
loadProvider(cfg.Providers)
117117
updateProfile(cfg)
118-
loadRuleProvider(cfg.RuleProviders)
118+
loadProvider(cfg.RuleProviders)
119119
runtime.GC()
120120
tunnel.OnRunning()
121-
hcCompatibleProvider(cfg.Providers)
122121
updateUpdater(cfg)
123122

124123
resolver.ResetConnection()
@@ -303,79 +302,40 @@ func updateRules(rules []C.Rule, subRules map[string][]C.Rule, ruleProviders map
303302
tunnel.UpdateRules(rules, subRules, ruleProviders)
304303
}
305304

306-
func loadProvider(pv provider.Provider) {
307-
if pv.VehicleType() == provider.Compatible {
308-
return
309-
} else {
310-
log.Infoln("Start initial provider %s", (pv).Name())
311-
}
305+
func loadProvider[P provider.Provider](providers map[string]P) {
306+
load := func(pv P) {
307+
name := pv.Name()
308+
if pv.VehicleType() == provider.Compatible {
309+
log.Infoln("Start initial compatible provider %s", name)
310+
} else {
311+
log.Infoln("Start initial provider %s", name)
312+
}
312313

313-
if err := pv.Initial(); err != nil {
314-
switch pv.Type() {
315-
case provider.Proxy:
316-
{
317-
log.Errorln("initial proxy provider %s error: %v", (pv).Name(), err)
318-
}
319-
case provider.Rule:
320-
{
321-
log.Errorln("initial rule provider %s error: %v", (pv).Name(), err)
314+
if err := pv.Initial(); err != nil {
315+
switch pv.Type() {
316+
case provider.Proxy:
317+
{
318+
log.Errorln("initial proxy provider %s error: %v", name, err)
319+
}
320+
case provider.Rule:
321+
{
322+
log.Errorln("initial rule provider %s error: %v", name, err)
323+
}
322324
}
323-
324325
}
325326
}
326-
}
327-
328-
func loadRuleProvider(ruleProviders map[string]provider.RuleProvider) {
329-
wg := sync.WaitGroup{}
330-
ch := make(chan struct{}, concurrentCount)
331-
for _, ruleProvider := range ruleProviders {
332-
ruleProvider := ruleProvider
333-
wg.Add(1)
334-
ch <- struct{}{}
335-
go func() {
336-
defer func() { <-ch; wg.Done() }()
337-
loadProvider(ruleProvider)
338-
339-
}()
340-
}
341327

342-
wg.Wait()
343-
}
344-
345-
func loadProxyProvider(proxyProviders map[string]provider.ProxyProvider) {
346-
// limit concurrent size
347328
wg := sync.WaitGroup{}
348329
ch := make(chan struct{}, concurrentCount)
349-
for _, proxyProvider := range proxyProviders {
350-
proxyProvider := proxyProvider
330+
for _, pv := range providers {
331+
pv := pv
351332
wg.Add(1)
352333
ch <- struct{}{}
353334
go func() {
354335
defer func() { <-ch; wg.Done() }()
355-
loadProvider(proxyProvider)
336+
load(pv)
356337
}()
357338
}
358-
359-
wg.Wait()
360-
}
361-
func hcCompatibleProvider(proxyProviders map[string]provider.ProxyProvider) {
362-
// limit concurrent size
363-
wg := sync.WaitGroup{}
364-
ch := make(chan struct{}, concurrentCount)
365-
for _, proxyProvider := range proxyProviders {
366-
proxyProvider := proxyProvider
367-
if proxyProvider.VehicleType() == provider.Compatible {
368-
log.Infoln("Start initial Compatible provider %s", proxyProvider.Name())
369-
wg.Add(1)
370-
ch <- struct{}{}
371-
go func() {
372-
defer func() { <-ch; wg.Done() }()
373-
if err := proxyProvider.Initial(); err != nil {
374-
log.Errorln("initial Compatible provider %s error: %v", proxyProvider.Name(), err)
375-
}
376-
}()
377-
}
378-
}
379339
wg.Wait()
380340
}
381341

0 commit comments

Comments
 (0)