fix: parallelism fix for ifname processor (#10007)

This commit is contained in:
Thomas Casteleyn 2021-12-03 21:44:41 +01:00 committed by GitHub
parent 1143a50da3
commit cc397279f5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 23 deletions

View File

@ -99,18 +99,13 @@ type IfName struct {
ifTable *si.Table ifTable *si.Table
ifXTable *si.Table ifXTable *si.Table
lock sync.Mutex cache *TTLCache
cache *TTLCache lock sync.Mutex
parallel parallel.Parallel parallel parallel.Parallel
acc telegraf.Accumulator sigs sigMap
getMapRemote mapFunc getMapRemote mapFunc
makeTable makeTableFunc makeTable makeTableFunc
gsBase snmp.GosnmpWrapper
sigs sigMap
} }
const minRetry = 5 * time.Minute const minRetry = 5 * time.Minute
@ -132,6 +127,10 @@ func (d *IfName) Init() error {
d.sigs = make(sigMap) d.sigs = make(sigMap)
if _, err := snmp.NewWrapper(d.ClientConfig); err != nil {
return fmt.Errorf("parsing SNMP client config: %w", err)
}
return nil return nil
} }
@ -192,14 +191,7 @@ func (d *IfName) invalidate(agent string) {
} }
func (d *IfName) Start(acc telegraf.Accumulator) error { func (d *IfName) Start(acc telegraf.Accumulator) error {
d.acc = acc
var err error var err error
d.gsBase, err = snmp.NewWrapper(d.ClientConfig)
if err != nil {
return fmt.Errorf("parsing SNMP client config: %w", err)
}
d.ifTable, err = d.makeTable("IF-MIB::ifDescr") d.ifTable, err = d.makeTable("IF-MIB::ifDescr")
if err != nil { if err != nil {
return fmt.Errorf("looking up ifDescr in local MIB: %w", err) return fmt.Errorf("looking up ifDescr in local MIB: %w", err)
@ -299,27 +291,27 @@ func (d *IfName) getMap(agent string) (entry nameMap, age time.Duration, err err
} }
func (d *IfName) getMapRemoteNoMock(agent string) (nameMap, error) { func (d *IfName) getMapRemoteNoMock(agent string) (nameMap, error) {
gs := d.gsBase gs, err := snmp.NewWrapper(d.ClientConfig)
err := gs.SetAgent(agent)
if err != nil { if err != nil {
return nil, fmt.Errorf("parsing SNMP client config: %w", err)
}
if err = gs.SetAgent(agent); err != nil {
return nil, fmt.Errorf("parsing agent tag: %w", err) return nil, fmt.Errorf("parsing agent tag: %w", err)
} }
err = gs.Connect() if err = gs.Connect(); err != nil {
if err != nil {
return nil, fmt.Errorf("connecting when fetching interface names: %w", err) return nil, fmt.Errorf("connecting when fetching interface names: %w", err)
} }
//try ifXtable and ifName first. if that fails, fall back to //try ifXtable and ifName first. if that fails, fall back to
//ifTable and ifDescr //ifTable and ifDescr
var m nameMap var m nameMap
m, err = buildMap(gs, d.ifXTable, "ifName") if m, err = buildMap(gs, d.ifXTable, "ifName"); err == nil {
if err == nil {
return m, nil return m, nil
} }
m, err = buildMap(gs, d.ifTable, "ifDescr") if m, err = buildMap(gs, d.ifTable, "ifDescr"); err == nil {
if err == nil {
return m, nil return m, nil
} }