After using the p4 plugin, and after it finished its task, the p4 plugin keeps opening connection and closing it. Each such action takes 1-2 seconds. So during the rest of the build, there is a delay of 5-20 seconds between the commands.
How to reproduce:
- Go to <jenkins url>/log/ and add a new logger called "p4"
Logger = "org.jenkinsci.plugins.p4" ; Log level = "ALL" - Create a pipeline job with this script:
node() { // library retriever: legacySCM(perforce( // fill your data here. // p4sync // fill your data here. stage('run') { 3.times { sh 'date' } } }
- Build the Job
- Now remove one of the commented lines (library with perforce or p4sync), fill the needed data. You can use the "Pipeline Syntax".
- Build the Job again
- Compare the time that the 'run' stage took:
- in step 3 it took ~350 ms
- in step 5 it took 53 seconds
and this time diff is only for 3 "sh" calls. For longer jobs it increases.
- Pay attention that this time is only for the 3 calls to "sh", and not including the p4 stage.
- Open the log you created at stage 1 (<jenkins url>/log/p4).
You can see there a loop of
P4: opened connection OK
P4: closed connection OK
Each "open" takes 1-2 seconds, and during this time the build can't proceed.
Thank you p4paul for the quick reply.
I tried "autoClean", "forceClean" and "syncOnly". The behavior is he same.
How can I use the new logging feature you added?
The issue here is that the p4-pluging continue to do a loop of open and close p4 connections long after it finished its task. Can you please explain the need for this?
I fail to see the need for it. If there will be need to do another use of p4, then it can open the connection then.
I have jobs with duration of hours and days, and I keep see this slowness. You can see it yourself, in the pipeline code in steps to reproduce above, add long sleep between the p4 command and the "stage('run')". You will see that the plugin keep connecting to the p4 server and add long time to the build duration.
This is not some overhead but a big issue.
I apologize. I am not familiar with the internals of Jenkins so I do not understand the last paragraph you wrote.
Anyway, as you can see be the simple steps to reproduce above, when using the p4-plugin, it makes the whole run of the build to be much slower. I am talking about a constant delay of 1-10 seconds between each two command in the Jenkinsfile. We had this slowness for long time but did not know why. Now that we discovered the reason we discussed it today in the team and due to this we consider moving to git.