X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=adapter%2Fstatsclient%2Fstatseg_v2.go;h=f8081124184516d167a8e01ed9a0f2642fb6ec52;hb=67cea0df30f7ef348e265c9326f7a9f15ba26240;hp=16f1729257c8806e42ad92e1c75d518a6c240521;hpb=ba6e92d715c59dc71c4e18e66b262d07578d524b;p=govpp.git diff --git a/adapter/statsclient/statseg_v2.go b/adapter/statsclient/statseg_v2.go index 16f1729..f808112 100644 --- a/adapter/statsclient/statseg_v2.go +++ b/adapter/statsclient/statseg_v2.go @@ -20,7 +20,7 @@ import ( "sync/atomic" "unsafe" - "git.fd.io/govpp.git/adapter" + "go.fd.io/govpp/adapter" ) type statSegmentV2 struct { @@ -72,7 +72,7 @@ func (ss *statSegmentV2) GetDirectoryVector() dirVector { return ss.adjust(dirVector(&header.dirVector)) } -func (ss *statSegmentV2) GetStatDirOnIndex(v dirVector, index uint32) (dirSegment, dirName, dirType) { +func (ss *statSegmentV2) GetStatDirOnIndex(v dirVector, index uint32) (dirSegment, dirName, adapter.StatType) { statSegDir := dirSegment(uintptr(v) + uintptr(index)*unsafe.Sizeof(statSegDirectoryEntryV2{})) dir := (*statSegDirectoryEntryV2)(statSegDir) var name []byte @@ -82,7 +82,7 @@ func (ss *statSegmentV2) GetStatDirOnIndex(v dirVector, index uint32) (dirSegmen break } } - return statSegDir, name, dir.directoryType + return statSegDir, name, getStatType(dir.directoryType, ss.getErrorVector() != nil) } func (ss *statSegmentV2) GetEpoch() (int64, bool) { @@ -92,16 +92,18 @@ func (ss *statSegmentV2) GetEpoch() (int64, bool) { func (ss *statSegmentV2) CopyEntryData(segment dirSegment, index uint32) adapter.Stat { dirEntry := (*statSegDirectoryEntryV2)(segment) - if dirEntry.unionData == 0 { - debugf("data value or pointer not defined for %s", dirEntry.name) + typ := getStatType(dirEntry.directoryType, ss.getErrorVector() != nil) + // skip zero pointer value + if typ != adapter.ScalarIndex && typ != adapter.Empty && typ != adapter.ErrorIndex && dirEntry.unionData == 0 { + debugf("data pointer not defined for %s", dirEntry.name) return nil } - switch adapter.StatType(dirEntry.directoryType) { - case statDirScalarIndex: + switch typ { + case adapter.ScalarIndex: return adapter.ScalarStat(dirEntry.unionData) - case statDirErrorIndex: + case adapter.ErrorIndex: dirVector := ss.getErrorVector() if dirVector == nil { debugf("error vector pointer is out of range for %s", dirEntry.name) @@ -122,7 +124,7 @@ func (ss *statSegmentV2) CopyEntryData(segment dirSegment, index uint32) adapter } return adapter.ErrorStat(errData) - case statDirCounterVectorSimple: + case adapter.SimpleCounterVector: dirVector := ss.adjust(dirVector(&dirEntry.unionData)) if dirVector == nil { debugf("data vector pointer is out of range for %s", dirEntry.name) @@ -157,7 +159,7 @@ func (ss *statSegmentV2) CopyEntryData(segment dirSegment, index uint32) adapter } return adapter.SimpleCounterStat(data) - case statDirCounterVectorCombined: + case adapter.CombinedCounterVector: dirVector := ss.adjust(dirVector(&dirEntry.unionData)) if dirVector == nil { debugf("data vector pointer is out of range for %s", dirEntry.name) @@ -192,7 +194,7 @@ func (ss *statSegmentV2) CopyEntryData(segment dirSegment, index uint32) adapter } return adapter.CombinedCounterStat(data) - case statDirNameVector: + case adapter.NameVector: dirVector := ss.adjust(dirVector(&dirEntry.unionData)) if dirVector == nil { debugf("data vector pointer is out of range for %s", dirEntry.name) @@ -224,11 +226,11 @@ func (ss *statSegmentV2) CopyEntryData(segment dirSegment, index uint32) adapter } return adapter.NameStat(data) - case statDirEmpty: + case adapter.Empty: return adapter.EmptyStat("") // no-op - case statDirSymlink: + case adapter.Symlink: // prevent recursion loops if index != ^uint32(0) { debugf("received symlink with defined item index")