-
Notifications
You must be signed in to change notification settings - Fork 40k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix startup type error in initializeCaches #28002
Conversation
Can one of the admins verify that this patch is reasonable to test? If so, please reply "ok to test". This message may repeat a few times in short succession due to jenkinsci/ghprb-plugin#292. Sorry. Otherwise, if this message is too spammy, please complain to ixdy. |
4 similar comments
Can one of the admins verify that this patch is reasonable to test? If so, please reply "ok to test". This message may repeat a few times in short succession due to jenkinsci/ghprb-plugin#292. Sorry. Otherwise, if this message is too spammy, please complain to ixdy. |
Can one of the admins verify that this patch is reasonable to test? If so, please reply "ok to test". This message may repeat a few times in short succession due to jenkinsci/ghprb-plugin#292. Sorry. Otherwise, if this message is too spammy, please complain to ixdy. |
Can one of the admins verify that this patch is reasonable to test? If so, please reply "ok to test". This message may repeat a few times in short succession due to jenkinsci/ghprb-plugin#292. Sorry. Otherwise, if this message is too spammy, please complain to ixdy. |
Can one of the admins verify that this patch is reasonable to test? If so, please reply "ok to test". This message may repeat a few times in short succession due to jenkinsci/ghprb-plugin#292. Sorry. Otherwise, if this message is too spammy, please complain to ixdy. |
@k8s-bot ok to test |
return | ||
} | ||
for _, volume := range volumeList.Items { | ||
volumeListVal := reflect.Indirect(reflect.ValueOf(volumeListObj)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add a comment why reflect
is needed as both List
and PersistentVolumeList
need to be processed.
@k8s-bot e2e test this issue: #IGNORE |
LGTM |
@k8s-bot e2e test this issue: #IGNORE |
labeling into 1.3, this basically fixes controller initialization after crash, without this patch the controller may release (and recycle!) bound volumes! |
@asalkeld, please squash your commits into one and I'll merge it. |
GCE e2e build/test passed for commit 035f9e6a916f5b80fa5fb5938aa2d301ea86302e. |
Ok, so @asalkeld is probably sleeping by now. @saad-ali, can you please coordinate with him to either squash the patches or merge them as they are? I'd really like to have them in Kube 1.3. This patch won't break volume controller more than it already is. Nobody noticed this error earlier, as the volume sources behaves differently in unit tests and we don't really test controller startup with existing PVs/PVCs anywhere else. I'll write an integration test for this. |
I'm testing the patch properly and it seems it does not work as expected. Problem is that
|
@k8s-bot test this [submit-queue is verifying that this PR is safe to merge] |
GCE e2e build/test passed for commit b4f7e67. |
Automatic merge from submit-queue |
Possibly. Need to understand the locking mechanism to say for sure. |
It's not likely. Once the controller has complete view of the world (i.e. after initial startup), it can receive events from PVs and PVCs at different pace as long as the controller is the only one who binds volumes. Bad things can happen when a bound PV appears and the controller does not see appropriate counterpart PVC. The PV may get recycled or deleted, which is exactly what happened in this bug. |
If events from PVs and PVCs arrive at very different paces, doesn't that mean a bound PV could show up before the create for a PVC ever shows up? |
@erictune no, because the controller must have observed the PVC in order to make the binding in the first place. (Assumption: there's only one controller in operation, and no other actor can cause a binding to occur.) @jsafrane I recall talking locking methods to make all of these operations safe even with multiple controllers with a group of red hatters and googlers a few months ago. I take it that has not been implemented yet? |
@lavalamp, even with locking as suggested on the meeting we were able to find races when two controllers were trying to bind two PVs/PVCs at the same time. |
Automatic merge from submit-queue Fix startup type error in initializeCaches The following error was getting logged: PersistentVolumeController can't initialize caches, expected list of volumes, got: &{TypeMeta:{Kind: APIVersion:} ListMeta:{SelfLink:/api/v1/persistentvolumes ResourceVersion:11} Items:[]} The tests make extensive use of NewFakeControllerSource which uses api.List instead of api.PersistentVolumeList. So use reflect to help iterate over the items then assert the item type. fixes kubernetes#27757 (cherry picked from commit 1effc5a)
Automatic merge from submit-queue Batch update for 1.3 #28030: Revert "Federation e2e supports aws" #28026: Address outstanding review comments in #27999. #28034: Adding lock files for kubeconfig updating #28004: return nil from NewClientConfig instead of empty struct #28032: Increase pod CPU/memory for fluentd, dns and kube-proxy. #27208: Bump minimum API version for docker to 1.21 #28061: Remove extra double quotes in --federations. #28060: rkt: Fix the 'privileged' check when stage1 annotation is provided. #27996: Image GC logic should compensate for reserved blocks #28044: rkt: Bump required rkt version to 1.9.1. #28040: Tracked addition of federation, sed support in kube DNS #28043: Set grace period to 0 when deleting namespaces after the test. #28002: Fix startup type error in initializeCaches #28087: Hotfix: Fixup the hyperkube dns manifest from a breaking federation PR #28108: Fix initialization of volume controller caches. #28056: Increase kube-dns requirements on CoreOS. #28147: Fix error checks after cloning. #28159: Use : as seccomp security option operator for Docker 1.10 #28165: Refactored, expanded and fixed federated-services e2e tests. #28095: Kubelet should mark VolumeInUse before checking if it is Attached #28172: Build: Add KUBE_GCS_RELEASE_BUCKET_MIRROR option to push-ci-build.sh #28207: Bump cluster autoscaler to 0.2.2 #28160: Volume manager must verify containers terminated before deleting for ungracefully terminated pods #28211: Fix federation e2e tests by correctly managing cluster clients #27944: Fix pvc label selector validation error #28186: federation: Upgrading the groupversion to v1beta1
Commit found in the "release-1.3" branch appears to be this PR. Removing the "cherrypick-candidate" label. If this is an error find help to get your PR picked. |
Tests kubernetes#28002 with real etcd (unit tests have a fake one with different behavior).
Automatic merge from submit-queue Add integration test for volume controller startup. Tests #28002 with real etcd (unit tests have a fake one with different behavior). @kubernetes/sig-storage
The following error was getting logged:
PersistentVolumeController can't initialize caches, expected list of volumes, got:
&{TypeMeta:{Kind: APIVersion:} ListMeta:{SelfLink:/api/v1/persistentvolumes ResourceVersion:11} Items:[]}
The tests make extensive use of NewFakeControllerSource which uses api.List
instead of api.PersistentVolumeList. So use reflect to help iterate over the
items then assert the item type.
fixes #27757