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)

Reply via email to