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
Poor user experience when a channel provisioner is missing #779
Comments
We should have a backup controller which adds some clue-ifying /kind bug |
/milestone 0.4.0 |
@evankanderson: The provided milestone is not valid for this repository. Milestones in this repository: [ Use In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
/milestone v0.4.0 |
Another option might be to have the webhook set the Status to a "Failure" condition that then gets cleared by an owning controller? Not sure if that's any simpler or would avoid some potential races with multiple controllers potentially owning an object. |
@akashrv: GitHub didn't allow me to assign the following users: akashrv. Note that only knative members and repo collaborators can be assigned. In response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. |
/assign |
Summary of issue: If we create a Channel with a non-installed channel provisioner that then the channel gets created but events never flow through. There is no way for user to know what is wrong in the eventing pipleine This fix: 1. Updates the Validation Admission Webhook for Channel and fails channel creation in case the ChannelProvisioner doesn't exist. It doesn't call the API server, and instead uses a cache from the Informer on ChannelProvisioners. 2. Added check to ensure that Channel provisioner has to be of the kind ClusterChannelProvisioner.
This reverts commit 60665a2.
This reverts commit 46b6421.
This reverts commit 0463c54.
After digging around this issue here is a proposal:
It seems channel provisioners exist so that a "developer" can query and check what kind of eventing provisioners are installed. (There is also another probable reason that is to know whether the provisioned infra is ready or not and we will discuss that later) However, if for some reason the ClusterChannelProvisioner is deleted (not the infra, but just the provisioner) then the pipelines continue to work and that is what happens today, except for kafka and in-memory***. I am assuming in future this could be fixed with different authorization on artifacts created by provisioner infra. So the existence of ClusterChannelProvisioner will not affect the data plane activities, and hence there is no need for any controller to watch the channel and verify that the provisioner specified is installed or not Q1. What about orphaned channels due to any reason including invalid provisioner. Q2. What about Condition.Ready for installed provisioner. Q3. What about the user case where a developer creates a Channel with say in-memory provisioner but the provisioner was never installed by the operator.
This will help us simplify things and not add unnecessary dependencies between objects and do tricky things through webhooks and or multiple controllers watching same object. Thoughts/Suggestions/Concerns: Please share. For Google folks (lets talk in-person) and then we can summarize the minutes-of-meeting here. (just prefer in-person comm rather than writing :)) ***In Kafka and in-memory there is a clusterchannelprovisionercontroller that creates a K8s/Service for the dispatcher. While rest of the infra is created with the yaml when the provisioner is installed. |
So, as a user, when I create a Channel that specifies a provisioner that is not installed, how will I know I did something wrong? And how will I know how to fix it? |
and update its status in case the channel is not being watched by any controller This could happen if the end user creates a channel but doesn't install the provisioner. Issue#779: knative#779
@bbrowning: Please see the above PR. |
* Creating a default channel controller that will watch every channel and update its status in case the channel is not being watched by any controller This could happen if the end user creates a channel but doesn't install the provisioner. Issue#779: #779 * Removed commetned lines * Fixed some typos * Changes based on comments on code review (pull request) * Moved the code to set ChannelConditionProvisionerInstalled=True to Initialize() function from MarkProvisioned() * Changed all %v to %s when logging strings * Updating some formatting issues called out in PR
Thanks for improving this experience! |
I've helped users debug the scenario where a provisioner isn't installed a couple of times now and it's not obvious that's what the problem is unless you know what to look for.
Expected Behavior
Creating a Channel that references an unknown/uninstalled provisioner provides me some feedback that the provisioner is not installed. Either immediate feedback at the time I create the Channel via the webhook doing some checks or feedback that surfaces as a Status on the Channel from something that monitors and marks channels that don't have matching provisioners.
Actual Behavior
The Channel creates successfully, ends up with no Status whatsoever, and when trying to use that Channel you have to poke through other parts of the system to see what went wrong.
Steps to Reproduce the Problem
The text was updated successfully, but these errors were encountered: