[JIRA] (JENKINS-60142) ConnectionHelper.java constructors call connectionRetry()

45 views
Skip to first unread message

jbateman@qti.qualcomm.com (JIRA)

unread,
Nov 12, 2019, 7:35:03 AM11/12/19
to jenkinsc...@googlegroups.com
James Bateman created an issue
 
Jenkins / Bug JENKINS-60142
ConnectionHelper.java constructors call connectionRetry()
Issue Type: Bug Bug
Assignee: Rob Petti
Components: perforce-plugin
Created: 2019-11-12 12:34
Priority: Minor Minor
Reporter: James Bateman

The constructor for the ConnectionHelper class calls the 'connectionRetry()' method that opens up a connection to the perforce server regardless of whether the connection is needed or not.

Example in action:

  • Monitor traffic to the perforce server using a network packet monitor such as wireshark
  • Connect to Jenkins from a browser.
  • Find a job that uses the Jenkins Perforce plugin
  • Click on ANY previous ran build from the left size of the window (i.e. items in the 'Build History')

Wireshark will report a large amount of traffic to the Perforce server

OK you might think that this isn't important, but if you have a Groovy script that parses old build jobs (checking say the environment variables that were used by the build) then each and every job that the script checks will generate hundreds of perforce network connections which are completely pointless. (slowing down the script in the process)

An example groovy script that can be ran from the 'Script Console' window (Start wireshark and monitor network traffic to the perforce server before running the script)

  • String jobName = 'A_valid_Jenkins_job_that_uses_the_perforce_plugin';
    
    FreeStyleProject buildJob = Jenkins.instance.getItemByFullName(jobName);
    if(buildJob) {
         for(FreeStyleBuild job in buildJob.builds) {
    		println job.url;
    		job.getEnvironment(TaskListener.NULL).each { k, v ->
    			println '  | ' + k + ' = ' + v
    		}
    		println '';
    	}
    }
    

There is absolutely no reason why the above script should generate any network traffic to the perforce server.

(NOTE: Re-running the groovy script a 2nd time might produce less network traffic since I think there might be some caching somewhere)

Add Comment Add Comment
 
This message was sent by Atlassian Jira (v7.13.6#713006-sha1:cc4451f)
Atlassian logo

rob.petti@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:27:03 AM11/12/19
to jenkinsc...@googlegroups.com
Rob Petti updated an issue
Change By: Rob Petti
Component/s: p4-plugin
Component/s: perforce-plugin

rob.petti@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:27:04 AM11/12/19
to jenkinsc...@googlegroups.com
Rob Petti assigned an issue to Paul Allen
Change By: Rob Petti
Assignee: Rob Petti Paul Allen

rob.petti@gmail.com (JIRA)

unread,
Nov 12, 2019, 10:27:04 AM11/12/19
to jenkinsc...@googlegroups.com
Rob Petti commented on Bug JENKINS-60142
 
Re: ConnectionHelper.java constructors call connectionRetry()

Wrong plugin. Perforce-plugin is deprecated and no longer supported. Please make sure you are filing tickets under the correct plugin (p4-plugin).

jbateman@qti.qualcomm.com (JIRA)

unread,
Nov 19, 2019, 11:23:03 AM11/19/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Nov 29, 2019, 10:35:04 AM11/29/19
to jenkinsc...@googlegroups.com
Karl Wirth assigned an issue to Karl Wirth
Change By: Karl Wirth
Assignee: Paul Allen Karl Wirth

kwirth@perforce.com (JIRA)

unread,
Nov 29, 2019, 10:36:02 AM11/29/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Nov 29, 2019, 10:44:03 AM11/29/19
to jenkinsc...@googlegroups.com

Hi James Bateman - Sorry for the delay. This one  slipped through our monitoring script that looks for new unowned bugs for 'p4-plugin' every hour.

 

I think this we made a change where to save disk space on the Jenkins server we no longer keep all the change history. I'll try and repro this here.

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:45:03 PM12/3/19
to jenkinsc...@googlegroups.com

Confirmed. One invocation of the above script against a freestyle job that had 8 successful executions caused 24 P4 commands to be run:

	2019/12/03 17:32:31 pid 1868 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1869 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1870 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1871 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1872 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1873 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1874 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1875 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1876 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1877 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1878 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1879 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1880 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1881 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1882 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1883 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:31 pid 1884 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:31 pid 1885 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:32 pid 1886 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:32 pid 1887 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:32 pid 1888 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:32 pid 1889 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:32:32 pid 1890 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:32:32 pid 1891 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
$ grep user- tmpa.txt  | wc -l
24

For a job with 4 successful runs I saw 11 commands kicked off:

	2019/12/03 17:40:17 pid 2509 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:17 pid 2510 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2512 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:40:48 pid 2513 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2514 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2515 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:40:48 pid 2516 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2517 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2518 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
	2019/12/03 17:40:48 pid 2519 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
	2019/12/03 17:40:48 pid 2520 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'

Have a suspicion that the variable code gets ready to retrieve any extra information that's needed from the Perforce server but then doesn't need to run 'p4 describe' etc.

 

 

 

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:45:04 PM12/3/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:49:04 PM12/3/19
to jenkinsc...@googlegroups.com
Karl Wirth edited a comment on Bug JENKINS-60142
Confirmed. One invocation of the above script against a freestyle job that had 8 successful executions caused 24 P4 commands to be run:
{code:java}
{code}

For a job with 4 successful runs I saw 11 commands kicked off:
{code:java}

2019/12/03 17:40:17 pid 2509 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:17 pid 2510 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2512 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
2019/12/03 17:40:48 pid 2513 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2514 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2515 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
2019/12/03 17:40:48 pid 2516 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2517 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2518 nouser@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-info'
2019/12/03 17:40:48 pid 2519 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
2019/12/03 17:40:48 pid 2520 super@_____CLIENT_UNSET_____ 127.0.0.1 [jenkins.p4-plugin/1.10.7/Linux] 'user-login -s'
{code}
Have a suspicion that the variable code gets ready to retrieve any extra information that's needed from the Perforce server but then doesn't need to run 'p4 describe' etc.
Passing to developers.

 

*Reproduction Steps:*

(1) Create an empty Jenkins system.

(2) Add a freestyle job called 'Freestyle1'.

(3) Execute 10 builds of the freestyle job.

(4) Delete the existing P4D log.

(5) Open 'Manage Jenkins' > ' Script Console'.

(6) Enter the following text and click run:
 
{code:java}
String jobName = 'Freestyle1';


FreeStyleProject buildJob = Jenkins.instance.getItemByFullName(jobName);
if(buildJob) {
     for(FreeStyleBuild job in buildJob.builds) {
  println job.url;
  job.getEnvironment(TaskListener.NULL).each { k, v ->
   println '  | ' + k + ' = ' + v
  }
  println '';
}
}
{code}
 

(7) Check the P4D log immediately.

 

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:50:02 PM12/3/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:51:02 PM12/3/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:51:04 PM12/3/19
to jenkinsc...@googlegroups.com

kwirth@perforce.com (JIRA)

unread,
Dec 3, 2019, 12:51:04 PM12/3/19
to jenkinsc...@googlegroups.com
Karl Wirth assigned an issue to Unassigned
Change By: Karl Wirth
Assignee: Karl Wirth

kwirth@perforce.com (JIRA)

unread,
Dec 10, 2019, 5:21:02 AM12/10/19
to jenkinsc...@googlegroups.com
Karl Wirth edited a comment on Bug JENKINS-60142
Have a suspicion that the variable code gets ready to retrieve any extra information that's needed from the Perforce server but then doesn't need to run 'p4 describe' etc. Passing to developers.

 

*Reproduction Steps:*

(1) Create an empty Jenkins system.

(2) Add a freestyle job called 'Freestyle1'.

(3) Execute 10 builds of the freestyle job.

(4) Delete the existing P4D log.

(5) Open 'Manage Jenkins' > ' Script Console'.

(6) Enter the following text and click run: 
{code:java}
String jobName = 'Freestyle1';

FreeStyleProject buildJob = Jenkins.instance.getItemByFullName(jobName);
if(buildJob) {
     for(FreeStyleBuild job in buildJob.builds) {
  println job.url;
  job.getEnvironment(TaskListener.NULL).each { k, v ->
   println '  | ' + k + ' = ' + v
  }
  println '';
}
}
{code}
 

(7) Check the P4D log immediately.

 


*Important Note:* There is some Jenkins caching going on here so the behavior above only occurs the first time you run the script against a job. Not sure if that cache expires after an hour/day/week/next restart.

 

 

msmeeth@perforce.com (JIRA)

unread,
Dec 10, 2019, 6:23:03 AM12/10/19
to jenkinsc...@googlegroups.com

Hi James Bateman,

"getEnvironment" fetches various Perforce variables including p4ticket, unfortunately some of our customers require a Perforce ticket to be added to the environment for their scripts. However if you set the "Hide TICKET" option in the "Perforce: Secure P4_TICKET" section on the Jenkins configuration page, this will prevent Jenkins from getting a ticket when you call the "getEnvironment" function.

msmeeth@perforce.com (JIRA)

unread,
Dec 10, 2019, 6:23:04 AM12/10/19
to jenkinsc...@googlegroups.com
Matthew Smeeth edited a comment on Bug JENKINS-60142
Hi [~jbateman],

"getEnvironment" fetches various Perforce variables including p4ticket, unfortunately some of our customers require a Perforce ticket to be added to the environment for their scripts.
However if If you set the "Hide TICKET" option in the "Perforce: Secure P4_TICKET" section on the Jenkins configuration page, this will prevent Jenkins from getting a ticket when you call the "getEnvironment" function.

msmeeth@perforce.com (JIRA)

unread,
Dec 11, 2019, 6:26:02 AM12/11/19
to jenkinsc...@googlegroups.com
Matthew Smeeth closed an issue as Won't Fix
 

Not fixing due to being able to prevent login -s being called by enabling the "hide tickets" option.

Change By: Matthew Smeeth
Status: Open Closed
Resolution: Won't Fix
Reply all
Reply to author
Forward
0 new messages