Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Fix nil pointer issue when getting metrics from volume mounter#34251

Merged
k8s-github-robot merged 1 commit into
kubernetes:masterfrom
jingxu97:Oct/nil-mounter-10-6
Oct 7, 2016
Merged

Fix nil pointer issue when getting metrics from volume mounter#34251
k8s-github-robot merged 1 commit into
kubernetes:masterfrom
jingxu97:Oct/nil-mounter-10-6

Conversation

@jingxu97
Copy link
Copy Markdown
Contributor

@jingxu97 jingxu97 commented Oct 6, 2016

Currently it is possible that the mounter object stored in Mounted
Volume data structure in the actual state of kubelet volume manager is
nil if this information is recovered from state sync process. This will
cause nil pointer issue when calculating stats in volume_stat_calculator.
A quick fix is to not return the volume if its mounter is nil. A more
complete fix is to also recover mounter object when reconstructing the
volume data structure which will be addressed in PR #33616

Fix nil pointer issue when getting metrics from volume mounter

This change is Reviewable

@jingxu97 jingxu97 added this to the v1.4-nonblocking milestone Oct 6, 2016
@k8s-github-robot k8s-github-robot added size/XS Denotes a PR that changes 0-9 lines, ignoring generated files. release-note-label-needed labels Oct 6, 2016
@yujuhong yujuhong added release-note Denotes a PR that will be considered when it comes time to generate release notes. and removed release-note-label-needed labels Oct 6, 2016
@yujuhong yujuhong modified the milestones: v1.4, v1.4-nonblocking Oct 6, 2016
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Jenkins unit/integration failed for commit f8baaa6. Full PR test history.

The magic incantation to run this job again is @k8s-bot unit test this. Please help us cut down flakes by linking to an open flake issue when you hit one in your PR.

podVolumes := kl.volumeManager.GetMountedVolumesForPod(
volumetypes.UniquePodName(podUID))
for outerVolumeSpecName, volume := range podVolumes {
if volume.Mounter == nil {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: Add a brief comment/TODO explaining why mounter could be nil

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done.

@yujuhong
Copy link
Copy Markdown
Contributor

yujuhong commented Oct 6, 2016

/cc @dchen1107 @matchstick

@saad-ali
Copy link
Copy Markdown
Member

saad-ali commented Oct 6, 2016

LGTM mod @yujuhong's comment

Currently it is possible that the mounter object stored in Mounted
Volume data structure in the actual state of kubelet volume manager is
nil if this information is recovered from state sync process. This will
cause nil pointer issue when calculating stats in volume_stat_calculator.
A quick fix is to not return the volume if its mounter is nil. A more
complete fix is to also recover mounter object when reconstructing the
volume data structure which will be addressed in PR kubernetes#33616
@jingxu97 jingxu97 force-pushed the Oct/nil-mounter-10-6 branch from f8baaa6 to b2b0409 Compare October 6, 2016 18:11
@jingxu97
Copy link
Copy Markdown
Contributor Author

jingxu97 commented Oct 6, 2016

To reproduce the issue:

  1. Create a pod with an attached GCE PD on a node
  2. restart kubelet on that node

Manually test the fix and it is working.

@saad-ali saad-ali added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Oct 6, 2016
@jessfraz jessfraz added the cherry-pick-approved Indicates a cherry-pick PR into a release branch has been approved by the release branch manager. label Oct 6, 2016
@yujuhong
Copy link
Copy Markdown
Contributor

yujuhong commented Oct 6, 2016

LGTM. Thanks

@jessfraz jessfraz added the priority/backlog Higher priority than priority/awaiting-more-evidence. label Oct 6, 2016
@k8s-ci-robot
Copy link
Copy Markdown
Contributor

Jenkins GKE smoke e2e failed for commit b2b0409. Full PR test history.

The magic incantation to run this job again is @k8s-bot gke e2e test this. Please help us cut down flakes by linking to an open flake issue when you hit one in your PR.

@k8s-github-robot
Copy link
Copy Markdown

Automatic merge from submit-queue

@k8s-github-robot k8s-github-robot merged commit ef5d694 into kubernetes:master Oct 7, 2016
@saad-ali
Copy link
Copy Markdown
Member

saad-ali commented Oct 7, 2016

This has merged, @jingxu97 can you please create a cherry pick for this to the 1.4 branch.

@jessfraz
Copy link
Copy Markdown
Contributor

jessfraz commented Oct 7, 2016

opened cherrypick here: #34296

@saad-ali
Copy link
Copy Markdown
Member

saad-ali commented Oct 7, 2016

Thanks @jessfraz

k8s-github-robot pushed a commit that referenced this pull request Oct 7, 2016
#34251-origin-release-1.4

Automatic merge from submit-queue

Automated cherry pick of #33520 #34251 origin release 1.4

Cherry pick of #33520 #34251 on release-1.4.

#33520: nodefs becomes imagefs on GCI since kubelet cannot identify
#34251: Fix nil pointer issue when getting metrics from volume
@jessfraz
Copy link
Copy Markdown
Contributor

jessfraz commented Oct 7, 2016

cherry-picked to 1.4 in #34296 so removing cherry-pick candidate

shyamjvs pushed a commit to shyamjvs/kubernetes that referenced this pull request Dec 1, 2016
…ck-of-#33520-kubernetes#34251-origin-release-1.4

Automatic merge from submit-queue

Automated cherry pick of kubernetes#33520 kubernetes#34251 origin release 1.4

Cherry pick of kubernetes#33520 kubernetes#34251 on release-1.4.

kubernetes#33520: nodefs becomes imagefs on GCI since kubelet cannot identify
kubernetes#34251: Fix nil pointer issue when getting metrics from volume
k8s-github-robot pushed a commit that referenced this pull request May 1, 2017
Automatic merge from submit-queue

Fix nil pointer issue when making mounts for container

When rebooting one of the nodes in my colleague's cluster, two panics were discovered:

```
E1216 04:07:00.193058    2394 runtime.go:52] Recovered from panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:58
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:51
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:41
/usr/local/go/src/runtime/asm_amd64.s:472
/usr/local/go/src/runtime/panic.go:443
/usr/local/go/src/runtime/panic.go:62
/usr/local/go/src/runtime/sigpanic_unix.go:24
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/kubelet.go:1313
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/kubelet.go:1473
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go:1495
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go:2125
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/dockertools/docker_manager.go:2093
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/kubelet.go:1971
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/kubelet.go:530
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pod_workers.go:171
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pod_workers.go:154
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/pod_workers.go:215
/usr/local/go/src/runtime/asm_amd64.s:1998
E1216 04:07:00.275030    2394 runtime.go:52] Recovered from panic: "invalid memory address or nil pointer dereference" (runtime error: invalid memory address or nil pointer dereference)
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:58
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:51
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/runtime/runtime.go:41
/usr/local/go/src/runtime/asm_amd64.s:472
/usr/local/go/src/runtime/panic.go:443
/usr/local/go/src/runtime/panic.go:62
/usr/local/go/src/runtime/sigpanic_unix.go:24
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_caculator.go:98
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/kubelet/server/stats/volume_stat_caculator.go:63
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/wait/wait.go:86
/go/src/k8s.io/kubernetes/_output/dockerized/go/src/k8s.io/kubernetes/pkg/util/wait/wait.go:87
/usr/local/go/src/runtime/asm_amd64.s:1998
```

kubectl version
```
Client Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.8", GitCommit:"693ef591120267007be359f97191a6253e0e4fb5", GitTreeState:"clean", BuildDate:"2016-09-28T03:03:21Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"3", GitVersion:"v1.3.8", GitCommit:"693ef591120267007be359f97191a6253e0e4fb5", GitTreeState:"clean", BuildDate:"2016-09-28T02:52:25Z", GoVersion:"go1.6.2", Compiler:"gc", Platform:"linux/amd64"}
```

The second panic had already been fixed by #33616 and #34251. Not sure what caused the first nil pointer issue and whether it has been fixed yet in the master branch. Just fix it by ignoring the nil pointer when making mounts.

cc @jingxu97 @yujuhong
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cherry-pick-approved Indicates a cherry-pick PR into a release branch has been approved by the release branch manager. lgtm "Looks good to me", indicates that a PR is ready to be merged. priority/backlog Higher priority than priority/awaiting-more-evidence. release-note Denotes a PR that will be considered when it comes time to generate release notes. size/XS Denotes a PR that changes 0-9 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants