Skip to content

Commit

Permalink
Fix a race condition on add_host_metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
jsoriano committed Oct 19, 2018
1 parent 78ef120 commit 7ae21ca
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 19 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.asciidoc
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ https://github.com/elastic/beats/compare/v6.4.0...master[Check the HEAD diff]
- Replace index patterns in TSVB visualizations. {pull}7929[7929]
- Fixed Support `add_docker_metadata` in Windows by identifying systems' path separator. {issue}7797[7797]
- Add backoff support to x-pack monitoring outputs. {issue}7966[7966]
- Fix a race condition with the `add_host_metadata` and the event serialization. {pull}8223[8223]
- Fix a race condition with the `add_host_metadata` and the event serialization. {pull}8653[8653]
- Enforce that data used by k8s or docker doesn't use any reference. {pull}8240[8240]
- Switch to different UUID lib due to to non-random generated UUIDs. {pull}8485[8485]

Expand Down
44 changes: 26 additions & 18 deletions libbeat/processors/add_host_metadata/add_host_metadata.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ package add_host_metadata
import (
"fmt"
"net"
"sync"
"time"

"github.com/joeshaw/multierror"
Expand All @@ -39,6 +40,8 @@ func init() {
}

type addHostMetadata struct {
sync.Mutex

info types.HostInfo
lastUpdate time.Time
data common.MapStr
Expand All @@ -64,38 +67,43 @@ func newHostMetadataProcessor(cfg *common.Config) (processors.Processor, error)
info: h.Info(),
config: config,
}
p.loadData()
return p, nil
}

// Run enriches the given event with the host meta data
func (p *addHostMetadata) Run(event *beat.Event) (*beat.Event, error) {
p.Lock()
defer p.Unlock()

p.loadData()
event.Fields.DeepUpdate(p.data.Clone())
event.Fields.DeepUpdate(p.data)
return event, nil
}

func (p *addHostMetadata) loadData() {

// Check if cache is expired
if p.lastUpdate.Add(cacheExpiration).Before(time.Now()) {
p.data = host.MapHostInfo(p.info)

if p.config.NetInfoEnabled {
// IP-address and MAC-address
var ipList, hwList, err = p.getNetInfo()
if err != nil {
logp.Info("Error when getting network information %v", err)
}
if p.lastUpdate.Add(cacheExpiration).After(time.Now()) {
return
}

if len(ipList) > 0 {
p.data.Put("host.ip", ipList)
}
if len(hwList) > 0 {
p.data.Put("host.mac", hwList)
}
p.data = host.MapHostInfo(p.info)

if p.config.NetInfoEnabled {
// IP-address and MAC-address
var ipList, hwList, err = p.getNetInfo()
if err != nil {
logp.Info("Error when getting network information %v", err)
}

if len(ipList) > 0 {
p.data.Put("host.ip", ipList)
}
if len(hwList) > 0 {
p.data.Put("host.mac", hwList)
}
p.lastUpdate = time.Now()
}
p.lastUpdate = time.Now()
}

func (p addHostMetadata) getNetInfo() ([]string, []string, error) {
Expand Down

0 comments on commit 7ae21ca

Please sign in to comment.