-
Task
-
Resolution: Unresolved
-
Minor
-
None
-
b23
This ticket started life as a bug, after observing what was thought to be a regression.
The BlueOcean main pipeline screen (https://ci.blueocean.io/blue/pipelines) appears to be receiving events for running pipelines that are not visible, and then fetching data, creating more than expected traffic.
On a regular basis this sends event from the backend to the frontend detailing things that are running.
To reproduce
- Open /blue/pipelines/ in one tab
- Run a job like bwalding-alwaysBlue from a classic screen in another tab : https://ci.blueocean.io/job/scratch/job/bwalding-alwaysBlue/configure
- Note that /blue/pipelines/ receives events for this job and does requests.
Expected behavior:
- Should not fetch the run data if the job isn't even in the store.
Some details
Event socket:
https://ci.blueocean.io/sse-gateway/listen/jenkins-blueocean-core-js-1487311928759-80shtgg3w8q5hpelba9k9
Event data:
open {"dispatcherId":"jenkins-blueocean-core-js-1487311928759-80shtgg3w8q5hpelba9k9","dispatcherInst":1238701885} 16:15:00.445 job {"jenkins_object_type":"org.jenkinsci.plugins.workflow.job.WorkflowRun","jenkins_event_uuid":"6c1358f1-f887-41bb-beb9-3228dda99df8","sse_subs_dispatcher_inst":"1238701885","job_run_status":"SUCCESS","job_name":"scratch/bwalding-alwaysBlue","jenkins_org":"jenkins","job_run_queueId":"5246","jenkins_object_name":"#2","blueocean_job_rest_url":"/blue/rest/organizations/jenkins/pipelines/scratch/pipelines/bwalding-alwaysBlue/","jenkins_object_id":"2","jenkins_event":"job_run_ended","sse_subs_dispatcher":"jenkins-blueocean-core-js-1487311928759-80shtgg3w8q5hpelba9k9","blueocean_job_pipeline_name":"scratch/bwalding-alwaysBlue","jenkins_object_url":"job/scratch/job/bwalding-alwaysBlue/2/","jenkins_channel":"job"}
Once the frontend receives those events, the frontend then makes a call to retrieve details about the run.
However the important thing to note is that the bwalding-alwaysBlue job is not visible on the front screen - so the frontend is querying the backend for details on jobs that will not change the state of the front end (afaik)
In a large instance that is running a lot of jobs all the time, this could be problematic.
- is related to
-
JENKINS-42196 Eliminate overly-eager SSE ping request
-
- Closed
-
That sounds perfectly reasonable, but in reality is not easy to do because this is a SPA. If we receive an event about something that's in the data store (but not visible on the screen at that time), we need to decide how to handle that i.e. update that data, invalidate it (so it will be retrieved again if it's needed after transitioning to a different route) etc etc. And invalidation of data probably isn't as clean/easy as you might think either, because it might mean you actually need to invalidate a lot more than just "that run" (for example) if the data is part of a collection etc etc. If you go down that road then, we'd start seeing tickets about what appear to be unnecessary REST API calls to refetch data that "appears" to be getting invalidated for no good reason. There are lots of swings and round-about, tradeoffs etc. It's rarely as clearcut as it seems.