Yes, LGTM. -Fritz
On 14.03.2017 09:44, Ignasi Barrera wrote: > I've just merged the PR: https://github.com/jclouds/jclouds/pull/1076 > Fritz, the provided mock test properly covers the change so I think > there is no need for the specific live test. Do you agree? > > > Thanks! > > I. > > On 13 March 2017 at 11:13, Tomasz Wojtun <[email protected]> wrote: >> It would need to either create an instance from a snapshot and then call >> listNodes, or call DiskUriToImage.load(URI_TO_SNAPSHOT) directly. >> >> I have submitted a pull request with a fix and a mock test. >> >> Please take a look @ https://github.com/jclouds/jclouds/pull/1075 >> >> >> >> Cheers, >> >> Tomek >> >> >> >> From: Ignasi Barrera <[email protected]> >> Reply-To: "[email protected]" <[email protected]> >> Date: Monday, 13 March 2017 at 09:43 >> To: "[email protected]" <[email protected]> >> Subject: Re: diskURIToImage.getUnchecked() fails on instance created from >> snapshot (GCE) >> >> >> >> Absolutely. A live test would be perfect. >> >> >> >> I'd add a test method to the compute service adapter live test that takes an >> snapshot of one of the created test nodes and then calls getNode. >> >> >> >> I'm not very familiar with the GCE API though, and I only see there methods >> to create snapshots of a given Disk. Would that be enough to replicate the >> failure scenario for the test? >> >> >> >> >> >> On Mar 9, 2017 22:03, "Fritz Elfert" <[email protected]> wrote: >> >> Hi, >> >> I'm the maintainer of the jenkins jclouds-plugin and just wanted to >> chime in here... >> >> I'd suggest designing that little test program as a LiveTest (fetching >> account-specifics and credentials from a local maven settings.xml). If >> you like, I can help with that but not before the end of next week >> (extremely busy at work right now). >> >> Cheers >> -Fritz >> >> On 09.03.2017 13:03, Ignasi Barrera wrote: >>> I'd say you could just create a snapshot in your account and write a >>> small main program that calls `listNodes` . Something like this: >>> >>> try { >>> String identity = "<client email>"; // Something like >>> "[email protected]" >>> String credential = Files.toString(new File("<path to the GCE >>> account private key>"), Charsets.UTF_8); >>> >>> ComputeServiceContext ctx = >>> ContextBuilder.newBuilder("google-compute-engine") >>> .credentials(identity, credential) >>> .modules(ImmutableSet.of(new SshjSshClientModule())) >>> .buildView(ComputeServiceContext.class); >>> >>> ComputeService compute = ctx.getComputeService(); >>> >>> compute.listNodes(); // This will fail if there are snapshots >>> until the issue is fixed. >>> finally { >>> ctx.close(); >>> } >>> >>> You'll just need to add the >>> "org.apache.jclouds.provider/google-compute-engine" and >>> "org.apache.jclouds.driver/jclouds-sshj" dependencies to run that >>> small program. >>> >>> >>> You can have a look at the README for more info on how to get the >>> credentials: >>> >>> https://github.com/jclouds/jclouds/tree/master/providers/google-compute-engine >>> >>> >>> HTH! >>> >>> I. >>> >>> On 8 March 2017 at 17:57, Tomasz Wojtun <[email protected]> >>> wrote: >>>> Hi Ignasi. >>>> >>>> I will be glad to make a pull request. Can you tell me if there is an >>>> easy way to test the fix in IDE? >>>> >>>> Regards, >>>> Tomasz >>>> >>>> On 07/03/2017, 14:32, "Ignasi Barrera" <[email protected]> wrote: >>>> >>>> Hi Tomasz, >>>> >>>> You're right. jclouds should not fail in that case, The >>>> "diskuRIToImage" in the InstanceToNodeMetadata class is a cache, and >>>> it makes no sense to try to load a "null" key. I'd say the right way >>>> to fix it is just to execute this [1] only if the input disk's source >>>> is not null. Do you want to try opening a pull request with a patch? >>>> I'd be happy to help! >>>> >>>> >>>> I. >>>> >>>> [1] >>>> https://github.com/jclouds/jclouds/blob/master/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java#L77 >>>> >>>> >>>> On 7 March 2017 at 13:31, Tomasz Wojtun <[email protected]> >>>> wrote: >>>> > Hi Jclouds users. >>>> > >>>> > >>>> > >>>> > I want to use jclouds-plugin on Jenkins to provide jenkina slave >>>> machines >>>> > on Google Compute. >>>> > >>>> > The plugin fails to count nodes with specific images, when it comes >>>> up on >>>> > instance created from snapshot. >>>> > >>>> > The cause seems to be in jclouds code. >>>> > >>>> > Shouldn’t diskURIToImage.getUnchecked() in InstanceToNodeMetadata >>>> return >>>> > null and not throw an error in this case? >>>> > >>>> > >>>> > >>>> > Best regards, >>>> > >>>> > Tomasz >>>> > >>>> > >>>> > >>>> > StackTrace: >>>> > >>>> > Timer task >>>> hudson.slaves.NodeProvisioner$NodeProvisionerInvoker@79b4d01d >>>> > failed >>>> > >>>> shaded.com.google.common.util.concurrent.UncheckedExecutionException: >>>> > java.util.concurrent.ExecutionException: could not find image for >>>> disk >>>> > >>>> https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/INSTANCE_NAME: >>>> > endpoint for [0] not configured for >>>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public >>>> abstract >>>> > org.jclouds.googlecomputeengine.domain.Image >>>> > >>>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4829) >>>> > at >>>> > >>>> org.jclouds.googlecomputeengine.compute.functions.InstanceToNodeMetadata.apply(InstanceToNodeMetadata.java:77) >>>> > at >>>> > >>>> org.jclouds.googlecomputeengine.compute.functions.InstanceToNodeMetadata.apply(InstanceToNodeMetadata.java:43) >>>> > at >>>> > >>>> shaded.com.google.common.base.Functions$FunctionComposition.apply(Functions.java:211) >>>> > at >>>> > >>>> shaded.com.google.common.collect.Iterators$8.transform(Iterators.java:794) >>>> > at >>>> > >>>> shaded.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48) >>>> > at >>>> > >>>> shaded.com.google.common.collect.Iterators$7.computeNext(Iterators.java:646) >>>> > at >>>> > >>>> shaded.com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143) >>>> > at >>>> > >>>> shaded.com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138) >>>> > at >>>> shaded.com.google.common.collect.Iterators.addAll(Iterators.java:356) >>>> > at >>>> shaded.com.google.common.collect.Iterables.addAll(Iterables.java:350) >>>> > at >>>> shaded.com.google.common.collect.Sets.newLinkedHashSet(Sets.java:328) >>>> > at >>>> > >>>> org.jclouds.compute.internal.BaseComputeService.listNodes(BaseComputeService.java:342) >>>> > at >>>> > >>>> jenkins.plugins.jclouds.compute.JCloudsCloud.getRunningNodesCount(JCloudsCloud.java:482) >>>> > at >>>> > >>>> jenkins.plugins.jclouds.compute.JCloudsCloud.provision(JCloudsCloud.java:365) >>>> > at >>>> > >>>> hudson.slaves.NodeProvisioner$StandardStrategyImpl.apply(NodeProvisioner.java:701) >>>> > at hudson.slaves.NodeProvisioner.update(NodeProvisioner.java:307) >>>> > at >>>> hudson.slaves.NodeProvisioner.access$000(NodeProvisioner.java:60) >>>> > at >>>> > >>>> hudson.slaves.NodeProvisioner$NodeProvisionerInvoker.doRun(NodeProvisioner.java:798) >>>> > at hudson.triggers.SafeTimerTask.run(SafeTimerTask.java:50) >>>> > at >>>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) >>>> > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) >>>> > at >>>> > >>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) >>>> > at >>>> > >>>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) >>>> > at >>>> > >>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) >>>> > at >>>> > >>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) >>>> > at java.lang.Thread.run(Thread.java:745) >>>> > Caused by: java.util.concurrent.ExecutionException: could not find >>>> image for >>>> > disk >>>> > >>>> https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/INSTANCE_NAME: >>>> > endpoint for [0] not configured for >>>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public >>>> abstract >>>> > org.jclouds.googlecomputeengine.domain.Image >>>> > >>>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI) >>>> > at >>>> > >>>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:50) >>>> > at >>>> > >>>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:32) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195) >>>> > at >>>> shaded.com.google.common.cache.LocalCache.get(LocalCache.java:3934) >>>> > at >>>> shaded.com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821) >>>> > at >>>> > >>>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827) >>>> > ... 26 more >>>> > Caused by: java.lang.IllegalArgumentException: endpoint for [0] not >>>> > configured for >>>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public >>>> abstract >>>> > org.jclouds.googlecomputeengine.domain.Image >>>> > >>>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI) >>>> > at >>>> > >>>> shaded.com.google.common.base.Preconditions.checkArgument(Preconditions.java:148) >>>> > at >>>> > >>>> org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInParametersOrNull(RestAnnotationProcessor.java:526) >>>> > at >>>> > >>>> org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:548) >>>> > at >>>> > >>>> org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:204) >>>> > at >>>> > >>>> org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137) >>>> > at >>>> > >>>> org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:188) >>>> > at >>>> > >>>> org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:84) >>>> > at >>>> > >>>> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73) >>>> > at >>>> > >>>> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44) >>>> > at >>>> > >>>> org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156) >>>> > at >>>> > >>>> org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123) >>>> > at com.sun.proxy.$Proxy109.image(Unknown Source) >>>> > at >>>> > >>>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:48) >>>> > ... 35 more >>>> > >>>> > >>>> >>>> >>
signature.asc
Description: OpenPGP digital signature
