ConnectionException: Already connected
Closed this issue · 5 comments
Hi,
I have not before used this plugin but I tried the pre-release 0.11.0
in my GoCD v18.6.0
and it always fails with ConnectionException. Have you seen this before and is there something I'm missing here?
2018-06-24 09:53:54,221 ERROR [142@MessageListener for CreateAgentListener] JMSMessageListenerAdapter:77 - Exception thrown in message handling by listener com.thoughtworks.go.server.messaging.elasticagents.CreateAgentListener@72c57e2e
java.lang.RuntimeException: Interaction with plugin with id 'cd.go.contrib.elastic-agent.openstack' implementing 'elastic-agent' extension failed while requesting for 'cd.go.elastic-agent.create-agent'. Reason: [java.lang.RuntimeException: ConnectionException{message=Already connected, status=0}]
at com.thoughtworks.go.plugin.access.PluginRequestHelper.submitRequest(PluginRequestHelper.java:57)
at com.thoughtworks.go.plugin.access.elastic.v3.ElasticAgentExtensionV3.createAgent(ElasticAgentExtensionV3.java:101)
at com.thoughtworks.go.plugin.access.elastic.ElasticAgentExtension.createAgent(ElasticAgentExtension.java:68)
at com.thoughtworks.go.plugin.access.elastic.ElasticAgentPluginRegistry.createAgent(ElasticAgentPluginRegistry.java:41)
at com.thoughtworks.go.server.messaging.elasticagents.CreateAgentListener.onMessage(CreateAgentListener.java:32)
at com.thoughtworks.go.server.messaging.elasticagents.CreateAgentListener.onMessage(CreateAgentListener.java:22)
at com.thoughtworks.go.server.messaging.activemq.JMSMessageListenerAdapter.runImpl(JMSMessageListenerAdapter.java:73)
at com.thoughtworks.go.server.messaging.activemq.JMSMessageListenerAdapter.run(JMSMessageListenerAdapter.java:53)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: ConnectionException{message=Already connected, status=0}
at com.thoughtworks.go.plugin.infra.FelixGoPluginOSGiFramework.executeActionOnTheService(FelixGoPluginOSGiFramework.java:221)
at com.thoughtworks.go.plugin.infra.FelixGoPluginOSGiFramework.doOn(FelixGoPluginOSGiFramework.java:202)
at com.thoughtworks.go.plugin.infra.DefaultPluginManager.submitTo(DefaultPluginManager.java:140)
at com.thoughtworks.go.plugin.access.PluginRequestHelper.submitRequest(PluginRequestHelper.java:48)
... 8 common frames omitted
Caused by: java.lang.RuntimeException: java.lang.RuntimeException: ConnectionException{message=Already connected, status=0}
at cd.go.contrib.elasticagents.openstack.OpenStackPlugin.handle(OpenStackPlugin.java:85)
at com.thoughtworks.go.plugin.infra.DefaultPluginManager.lambda$submitTo$0(DefaultPluginManager.java:143)
at com.thoughtworks.go.plugin.infra.FelixGoPluginOSGiFramework.executeActionOnTheService(FelixGoPluginOSGiFramework.java:219)
... 11 common frames omitted
Caused by: java.lang.RuntimeException: ConnectionException{message=Already connected, status=0}
at cd.go.contrib.elasticagents.openstack.OpenStackPlugin.refreshInstances(OpenStackPlugin.java:94)
at cd.go.contrib.elasticagents.openstack.OpenStackPlugin.handle(OpenStackPlugin.java:62)
... 13 common frames omitted
Caused by: org.openstack4j.api.exceptions.ConnectionException: Already connected
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invoke(HttpExecutorServiceImpl.java:58)
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.execute(HttpExecutorServiceImpl.java:33)
at org.openstack4j.core.transport.internal.HttpExecutor.execute(HttpExecutor.java:51)
at org.openstack4j.openstack.internal.OSAuthenticator.authenticateV3(OSAuthenticator.java:156)
at org.openstack4j.openstack.internal.OSAuthenticator.invoke(OSAuthenticator.java:78)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:163)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:127)
at cd.go.contrib.elasticagents.openstack.OpenStackClientFactory.createClient(OpenStackClientFactory.java:61)
at cd.go.contrib.elasticagents.openstack.OpenStackClientFactory.os_client(OpenStackClientFactory.java:40)
at cd.go.contrib.elasticagents.openstack.utils.OpenstackClientWrapper.<init>(OpenstackClientWrapper.java:47)
at cd.go.contrib.elasticagents.openstack.OpenStackInstances.os_client(OpenStackInstances.java:57)
at cd.go.contrib.elasticagents.openstack.OpenStackInstances.refreshAll(OpenStackInstances.java:85)
at cd.go.contrib.elasticagents.openstack.OpenStackPlugin.refreshInstances(OpenStackPlugin.java:91)
... 14 common frames omitted
Caused by: javax.ws.rs.ProcessingException: Already connected
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:233)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:656)
at org.glassfish.jersey.client.JerseyInvocation$1.call(JerseyInvocation.java:653)
at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
at org.glassfish.jersey.internal.Errors.process(Errors.java:228)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:424)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:653)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:413)
at org.openstack4j.connectors.jersey2.HttpCommand.execute(HttpCommand.java:79)
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invokeRequest(HttpExecutorServiceImpl.java:65)
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invoke(HttpExecutorServiceImpl.java:56)
... 26 common frames omitted
Caused by: java.lang.IllegalStateException: Already connected
at sun.net.www.protocol.http.HttpURLConnection.setRequestProperty(HttpURLConnection.java:3071)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.setRequestProperty(HttpsURLConnectionImpl.java:325)
at org.glassfish.jersey.client.HttpUrlConnector.setOutboundHeaders(HttpUrlConnector.java:348)
at org.glassfish.jersey.client.HttpUrlConnector.access$100(HttpUrlConnector.java:87)
at org.glassfish.jersey.client.HttpUrlConnector$3.getOutputStream(HttpUrlConnector.java:311)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:200)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commitStream(CommittingOutputStream.java:194)
at org.glassfish.jersey.message.internal.CommittingOutputStream.commit(CommittingOutputStream.java:262)
at org.glassfish.jersey.message.internal.OutboundMessageContext.commitStream(OutboundMessageContext.java:811)
at org.glassfish.jersey.client.ClientRequest.writeEntity(ClientRequest.java:543)
at org.glassfish.jersey.client.HttpUrlConnector._apply(HttpUrlConnector.java:315)
at org.glassfish.jersey.client.HttpUrlConnector.apply(HttpUrlConnector.java:227)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:224)
... 37 common frames omitted
Cheers!
Hi @haxorof
I haven't seen this error before.
I am running 0.11.0
with GoCD 18.3
without issues. However 0.11.0
added caching of openstack API calls, which perhaps could result in this. Did you try 0.10.0
version?
@tomzo I just tried 0.10.0
and got the same problem. Do you have any suggestions how I can debug this to understand better what might be the source to the problem?
You could try to reproduce this in a test and debug something within this stacktrace
Caused by: org.openstack4j.api.exceptions.ConnectionException: Already connected
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.invoke(HttpExecutorServiceImpl.java:58)
at org.openstack4j.connectors.jersey2.HttpExecutorServiceImpl.execute(HttpExecutorServiceImpl.java:33)
at org.openstack4j.core.transport.internal.HttpExecutor.execute(HttpExecutor.java:51)
at org.openstack4j.openstack.internal.OSAuthenticator.authenticateV3(OSAuthenticator.java:156)
at org.openstack4j.openstack.internal.OSAuthenticator.invoke(OSAuthenticator.java:78)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:163)
at org.openstack4j.openstack.client.OSClientBuilder$ClientV3.authenticate(OSClientBuilder.java:127)
at cd.go.contrib.elasticagents.openstack.OpenStackClientFactory.createClient(OpenStackClientFactory.java:61)
at cd.go.contrib.elasticagents.openstack.OpenStackClientFactory.os_client(OpenStackClientFactory.java:40)
at cd.go.contrib.elasticagents.openstack.utils.OpenstackClientWrapper.<init>(OpenstackClientWrapper.java:47)
at cd.go.contrib.elasticagents.openstack.OpenStackInstances.os_client(OpenStackInstances.java:57)
at cd.go.contrib.elasticagents.openstack.OpenStackInstances.refreshAll(OpenStackInstances.java:85)
at cd.go.contrib.elasticagents.openstack.OpenStackPlugin.refreshInstances(OpenStackPlugin.java:91)
... 14 common frames omitted
Since it fails on when creating openstack client, you could try to call cd.go.contrib.elasticagents.openstack.OpenStackClientFactory.createClient(OpenStackClientFactory.java:61)
from the test and see what happens. Call it twice in same test and see if it produces this error.
The error says already connected
, but that fails only in your setup, so I guess it is specific to the way you connect with openstack.
You'll only need IntelliJ and gradle to develop and debug tests in this plugin.
@tomzo I have done some review of the code and did a quick test and it seems that when the authentications is done it does not give you any options to turn off the strict SSL verification:
https://github.com/gocd-contrib/openstack-elastic-agent/blob/master/src/main/java/cd/go/contrib/elasticagents/openstack/OpenStackClientFactory.java#L57-L61
To fix this a setting needs to be introduced so it will be possible to connect to OpenStack installations with self-signed certificates. Here is an example to resolve it:
return OSFactory.builderV3()
.endpoint(pluginSettings.getOpenstackEndpoint())
.credentials(pluginSettings.getOpenstackUser(), pluginSettings.getOpenstackPassword(),
Identifier.byName(pluginSettings.getOpenstackDomain()))
.scopeToProject(Identifier.byName(pluginSettings.getOpenstackTenant()),
Identifier.byName(pluginSettings.getOpenstackDomain()))
.useNonStrictSSLClient(pluginSettings.getOpenStackNonStrictSSL())
.authenticate();
I got a OpenStack All-in-One (OSA) which I deployed using OpenStack-Ansible and by default you will only get self-signed certificates. If you want to get them to validate you will need to import the CA certificates on the client hosts which I have not.
Cheers!
That makes sense. Indeed, we should have a flag to turn off certificate validation if needed.
Thanks for feedback.