fix(go.d): avoid blocking all jobs when stopping a slow job (#21448) · netdata/netdata@510f134

File tree

1 file changed

lines changed

  • src/go/plugin/go.d/agent/jobmgr

1 file changed

lines changed

Original file line numberDiff line numberDiff line change

@@ -259,24 +259,25 @@ func (m *Manager) runNotifyRunningJobs() {

259259

}

260260
261261

func (m *Manager) startRunningJob(job *module.Job) {

262+

m.stopRunningJob(job.FullName())

263+
262264

m.runningJobs.lock()

263265

defer m.runningJobs.unlock()

264266
265-

if job, ok := m.runningJobs.lookup(job.FullName()); ok {

266-

job.Stop()

267-

}

268-
269267

go job.Start()

270268

m.runningJobs.add(job.FullName(), job)

271269

}

272270
273271

func (m *Manager) stopRunningJob(name string) {

274272

m.runningJobs.lock()

275-

defer m.runningJobs.unlock()

273+

job, ok := m.runningJobs.lookup(name)

274+

if ok {

275+

m.runningJobs.remove(name)

276+

}

277+

m.runningJobs.unlock()

276278
277-

if job, ok := m.runningJobs.lookup(name); ok {

279+

if ok {

278280

job.Stop()

279-

m.runningJobs.remove(name)

280281

}

281282

}

282283