Add option to select http client#133
Open
lifemanship wants to merge 2 commits intojenkinsci:masterfrom
Open
Conversation
ec1207e to
1a24523
Compare
The plugin depends on network library yavijava https://github.com/jenkinsci/vsphere-cloud-plugin/blob/master/pom.xml#L95-L96 The yavijava supports two types of http clients: `CloseableHttpClient` `HttpURLConnection` - is default The HttpURLConnection client's behaviour can be impacted by system-wide cookie handler CookieManager: https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html The major problem is that the CookieManager overlaps logic provided by HttpURLConnection to setup http header `Cookie`. Global CookieManager know nothing about logic of vsphere-cloud-plugin and fill all http headers with stored cookies, as result vsphere center rejects login requests with error: ``` <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <soapenv:Fault> <faultcode>ServerFaultCode</faultcode> <faultstring>Cannot complete login due to an incorrect user name or password.</faultstring> <detail> <InvalidLoginFault xmlns="urn:vim25" xsi:type="InvalidLogin"> <faultMessage> <key>vim.fault.InvalidLoginWithReason</key> <arg> <key>1</key> <value xsi:type="xsd:string">vim.fault.InvalidLoginReasonRegisterFailed</value> </arg> <message>Login failed because the session could not be re-registered.</message> </faultMessage> </InvalidLoginFault> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> ``` The vsphere-cloud-plugin does not use CookieManager, but there is no guarantee that other plugins avoid it. Example: https://github.com/jenkinsci/parameterized-remote-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java#L158-L159 As workaroud we can switch to CloseableHttpClient http client. Issue in Jira: https://issues.jenkins.io/browse/JENKINS-69999
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The plugin depends on network library yavijava
https://github.com/jenkinsci/vsphere-cloud-plugin/blob/master/pom.xml#L95-L96
The yavijava supports two types of http clients:
CloseableHttpClientHttpURLConnection- is defaultThe HttpURLConnection client's behaviour can be impacted by system-wide cookie handler CookieManager:
https://docs.oracle.com/javase/8/docs/api/java/net/CookieManager.html The major problem is that the CookieManager overlaps logic provided by HttpURLConnection to setup http header
Cookie. Global CookieManager know nothing about logic of vsphere-cloud-plugin and fill all http headers with stored cookies, as result vsphere center rejects login requests with error:The vsphere-cloud-plugin does not use CookieManager, but there is no guarantee that other plugins avoid it. Example:
https://github.com/jenkinsci/parameterized-remote-trigger-plugin/blob/master/src/main/java/org/jenkinsci/plugins/ParameterizedRemoteTrigger/RemoteBuildConfiguration.java#L158-L159
As workaroud we can switch to CloseableHttpClient http client.
Issue in Jira:
https://issues.jenkins.io/browse/JENKINS-69999