Fabien Viale created JCLOUDS-1643:
-------------------------------------
Summary: When Google Compute Engine instances/start contains a
warning message without code, deployment fails
Key: JCLOUDS-1643
URL: https://issues.apache.org/jira/browse/JCLOUDS-1643
Project: jclouds
Issue Type: Bug
Components: jclouds-compute
Affects Versions: 2.6.0, 2.5.0
Environment: Java 8
Reporter: Fabien Viale
The following error is raised in our software which uses Apache Jclouds to
interact with GCE.
{noformat}
[2024-12-20 15:26:54,396 r thread 0 ERROR j.compute]
createNodesInGroup(googlecloud-dynamic), completed: 0/1, errors: 1, rate:
1055ms/op
java.util.concurrent.ExecutionException:
org.jclouds.http.HttpResponseException: Error parsing input: Null code
{statusCode=200, message=OK, headers={Transfer-Encoding=[chunked],
Accept-Ranges=[none], X-Frame-Options=[SAMEORIGIN], Alt-Svc=[h3=":443";
ma=2592000,h3-29=":443"; ma=2592000], Server=[ESF],
X-Content-Type-Options=[nosniff], Vary=[Origin,Accept-Encoding, Referer,
X-Origin], X-XSS-Protection=[0], Date=[Fri, 20 Dec 2024 14:26:54 GMT]},
payload=[content=true, contentMetadata=[cacheControl=private,
contentDisposition=null, contentEncoding=null, contentLanguage=null,
contentLength=null, contentMD5=null, contentType=application/json;
charset=UTF-8, expires=null], written=false, isSensitive=false]}
at
com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:592)
at
com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:551)
at
com.google.common.util.concurrent.FluentFuture$TrustedFuture.get(FluentFuture.java:91)
at
org.jclouds.concurrent.FutureIterables$1.run(FutureIterables.java:123)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
Caused by: org.jclouds.http.HttpResponseException: Error parsing input: Null
code
{statusCode=200, message=OK, headers={Transfer-Encoding=[chunked],
Accept-Ranges=[none], X-Frame-Options=[SAMEORIGIN], Alt-Svc=[h3=":443";
ma=2592000,h3-29=":443"; ma=2592000], Server=[ESF],
X-Content-Type-Options=[nosniff], Vary=[Origin,Accept-Encoding, Referer,
X-Origin], X-XSS-Protection=[0], Date=[Fri, 20 Dec 2024 14:26:54 GMT]},
payload=[content=true, contentMetadata=[cacheControl=private,
contentDisposition=null, contentEncoding=null, contentLanguage=null,
contentLength=null, contentMD5=null, contentType=application/json;
charset=UTF-8, expires=null], written=false, isSensitive=false]}
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:68)
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:42)
at
org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:91)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45)
at
org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at
com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy1141.create(Unknown Source)
at
org.jclouds.googlecomputeengine.compute.GoogleComputeEngineServiceAdapter.createNodeWithGroupEncodedIntoName(GoogleComputeEngineServiceAdapter.java:184)
at
org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:196)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:81)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:64)
at
com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)
at
com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:75)
at
com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:750)
at java.lang.Thread.getStackTrace(Thread.java:1564)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.createNodeInGroupWithNameAndTemplate(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:169)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:124)
at
org.jclouds.googlecomputeengine.compute.strategy.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:140)
at
org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:213)
at
org.ow2.proactive.connector.iaas.cloud.provider.jclouds.google.GCEJCloudsProvider.createInstance(GCEJCloudsProvider.java:146)
at
org.ow2.proactive.connector.iaas.cloud.CloudManager.createInstance(CloudManager.java:53)
at
org.ow2.proactive.connector.iaas.service.InstanceService.lambda$createInstance$0(InstanceService.java:53)
at java.util.Optional.map(Optional.java:215)
at
org.ow2.proactive.connector.iaas.service.InstanceService.createInstance(InstanceService.java:53)
at
org.ow2.proactive.connector.iaas.rest.InstanceRest.createInstance(InstanceRest.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
at
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
at
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
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:267)
at
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
at
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305)
at
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154)
at
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473)
at
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341)
at
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228)
at
org.eclipse.jetty.servlet.ServletHolder$NotAsync.service(ServletHolder.java:1450)
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:554)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at
org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at
org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:322)
at
org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:59)
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at
org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:555)
at
org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:410)
at
org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:164)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
... 1 more
Caused by: java.lang.NullPointerException: Null code
at
org.jclouds.googlecomputeengine.domain.AutoValue_Warning.<init>(AutoValue_Warning.java:18)
at
org.jclouds.googlecomputeengine.domain.Warning.create(Warning.java:35)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
com.google.common.reflect.Invokable$MethodInvokable.invokeInternal(Invokable.java:379)
at com.google.common.reflect.Invokable.invoke(Invokable.java:259)
at
org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.newInstance(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:229)
at
org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:209)
at
org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactories.java:96)
at
org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:84)
at
org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:63)
at
org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:277)
at
org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:189)
at com.google.gson.Gson.fromJson(Gson.java:1227)
at com.google.gson.Gson.fromJson(Gson.java:1137)
at com.google.gson.Gson.fromJson(Gson.java:1107)
at org.jclouds.json.internal.GsonWrapper.fromJson(GsonWrapper.java:56)
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:83)
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:77)
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:62)
at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:42)
at
org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:91)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:74)
at
org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:45)
at
org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
at
com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
at com.sun.proxy.$Proxy1141.create(Unknown Source)
at
org.jclouds.googlecomputeengine.compute.GoogleComputeEngineServiceAdapter.createNodeWithGroupEncodedIntoName(GoogleComputeEngineServiceAdapter.java:184)
at
org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.createNodeWithGroupEncodedIntoName(AdaptingComputeServiceStrategies.java:196)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:81)
at
org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet$AddNode.call(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:64)
at
com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)
at
com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:75)
at
com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
... 1 more{noformat}
This error is due to the following response from GCE Rest API
{code:java}
{
"endTime": "2024-12-20T06:26:55.302-08:00",
"id": "5655170973470081096",
"insertTime": "2024-12-20T06:26:47.438-08:00",
"kind": "compute#operation",
"name": "operation-1734704804423-629b46fa86810-61e6ae78-a2675f54",
"operationType": "insert",
"progress": 100,
"selfLink":
"https://www.googleapis.com/compute/v1/projects/fifth-totality-235316/zones/us-central1-c/operations/operation-1734704804423-629b46fa86810-61e6ae78-a2675f54",
"startTime": "2024-12-20T06:26:47.438-08:00",
"status": "DONE",
"targetId": "8053283752946221131",
"targetLink":
"https://www.googleapis.com/compute/v1/projects/fifth-totality-235316/zones/us-central1-c/instances/googlecloud-dynamic-5e0",
"user": "proactive-system-t...@fifth-totality-235316.iam.gserviceaccount.com",
"warnings": [
{
"message": "You are creating a global DNS VM. VM instances using global
DNS are vulnerable to cross-regional outages. To reduce the risk of widespread
service disruption, use zonal DNS instead. Learn more at
https://cloud.google.com/compute/docs/networking/zonal-dns"
}
],
"zone":
"https://www.googleapis.com/compute/v1/projects/fifth-totality-235316/zones/us-central1-c"
} {code}
In this response the "warnings" structure does not contain "code", nor "data"
Yet the following class (auto-generated from the Warning class) that raises
the error expects code and data to be present:
{code:java}
AutoValue_Warning(
String code,
@Nullable String message,
List<KeyValuePair> data) {
if (code == null) {
throw new NullPointerException("Null code");
}
this.code = code;
this.message = message;
if (data == null) {
throw new NullPointerException("Null data");
}
this.data = data;
}{code}
Currently, our only way to make this deployment pass seem to find a way to
resolve the GCE configuration that triggers this warning. But I believe a fix
should be done in Jclouds to accept @Nullable "code" and "data"
--
This message was sent by Atlassian Jira
(v8.20.10#820010)