From: Vladimir Lavor Date: Tue, 1 Jun 2021 07:21:49 +0000 (+0200) Subject: statsclient: fix retrieving stats type X-Git-Tag: v0.4.0~15 X-Git-Url: https://gerrit.fd.io/r/gitweb?p=govpp.git;a=commitdiff_plain;h=da95997338b77811bc2ea850db393c652b3bd18e statsclient: fix retrieving stats type Signed-off-by: Vladimir Lavor Change-Id: Id51fa03ac69a2fc29aca5ff644178cdfcabe523c --- diff --git a/adapter/statsclient/statsclient.go b/adapter/statsclient/statsclient.go index 0b16a77..8c5904d 100644 --- a/adapter/statsclient/statsclient.go +++ b/adapter/statsclient/statsclient.go @@ -505,13 +505,17 @@ func (sc *StatsClient) getStatEntriesOnIndex(vector dirVector, indexes ...uint32 if len(dirName) == 0 { return } + var t adapter.StatType d := sc.CopyEntryData(dirPtr, ^uint32(0)) + if d != nil { + t = d.Type() + } entries = append(entries, adapter.StatEntry{ StatIdentifier: adapter.StatIdentifier{ Index: index, Name: dirName, }, - Type: d.Type(), + Type: t, Data: d, Symlink: adapter.StatType(dirType) == adapter.Symlink, }) diff --git a/adapter/statsclient/statseg_v2.go b/adapter/statsclient/statseg_v2.go index 16f1729..0780248 100644 --- a/adapter/statsclient/statseg_v2.go +++ b/adapter/statsclient/statseg_v2.go @@ -92,12 +92,14 @@ 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 := adapter.StatType(dirEntry.directoryType) + // skip zero pointer value + if typ != statDirScalarIndex && typ != statDirEmpty && dirEntry.unionData == 0 { + debugf("data pointer not defined for %s", dirEntry.name) return nil } - switch adapter.StatType(dirEntry.directoryType) { + switch typ { case statDirScalarIndex: return adapter.ScalarStat(dirEntry.unionData)