Fix nil pointer dereference in metrics value calculator.
The metrics structure passed to volume stat calculator can contain real stats on subset of metrics fields. For example, the metrics structure filled by a CSI driver can have either INODES or BYTES filled, IOW it a valid return. In such cases the volume stat calculator panic with below trace: 0516 21:36:19.013143 14452 runtime.go:69] Observed a panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference) /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:76 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:65 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go:51 /usr/local/go/src/runtime/panic.go:522 /usr/local/go/src/runtime/panic.go:82 /usr/local/go/src/runtime/signal_unix.go:390 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go:697 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go:685 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go:144 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go:125 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_calculator.go:65 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:152 /home/hchiramm/gopath/src/k8s.io/kubernetes/_output/local/go/src/k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go:153 /usr/local/go/src/runtime/asm_amd64.s:1337 Signed-off-by: Humble Chirammal <hchiramm@redhat.com>
This commit is contained in:
parent
03f091ae30
commit
cada0270fe
@ -138,12 +138,26 @@ func (s *volumeStatCalculator) calcAndStoreStats() {
|
||||
|
||||
// parsePodVolumeStats converts (internal) volume.Metrics to (external) stats.VolumeStats structures
|
||||
func (s *volumeStatCalculator) parsePodVolumeStats(podName string, pvcRef *stats.PVCReference, metric *volume.Metrics, volSpec v1.Volume) stats.VolumeStats {
|
||||
available := uint64(metric.Available.Value())
|
||||
capacity := uint64(metric.Capacity.Value())
|
||||
used := uint64(metric.Used.Value())
|
||||
inodes := uint64(metric.Inodes.Value())
|
||||
inodesFree := uint64(metric.InodesFree.Value())
|
||||
inodesUsed := uint64(metric.InodesUsed.Value())
|
||||
|
||||
var available, capacity, used, inodes, inodesFree, inodesUsed uint64
|
||||
if metric.Available != nil {
|
||||
available = uint64(metric.Available.Value())
|
||||
}
|
||||
if metric.Capacity != nil {
|
||||
capacity = uint64(metric.Capacity.Value())
|
||||
}
|
||||
if metric.Used != nil {
|
||||
used = uint64(metric.Used.Value())
|
||||
}
|
||||
if metric.Inodes != nil {
|
||||
inodes = uint64(metric.Inodes.Value())
|
||||
}
|
||||
if metric.InodesFree != nil {
|
||||
inodesFree = uint64(metric.InodesFree.Value())
|
||||
}
|
||||
if metric.InodesUsed != nil {
|
||||
inodesUsed = uint64(metric.InodesUsed.Value())
|
||||
}
|
||||
|
||||
return stats.VolumeStats{
|
||||
Name: podName,
|
||||
|
Loading…
Reference in New Issue
Block a user