[ 
https://issues.apache.org/jira/browse/JCLOUDS-1643?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17907441#comment-17907441
 ] 

Fabien Viale commented on JCLOUDS-1643:
---------------------------------------

Thanks [~nacx] for your quick response, I can do indeed a pull request in the 
mentioned class (I had in mind exactly this change). I don't have a way to 
build it myself either as I never worked inside JClouds, but I'm happy to do 
this PR.

I resolved internally our isssue by addressing the original warning without our 
GCE subscription.

> 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.5.0, 2.6.0
>         Environment: Java 8
>            Reporter: Fabien Viale
>            Priority: Major
>              Labels: google-compute-engine
>
> 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