Good to see you managed to fix it! I.
On 25 May 2014 19:06, Daniel Widdis <[email protected]> wrote: > My apologies to Ignasi Barrera who already replied to this; but I apparently > had some issues being subscribed to the list and don't have his message to > reply to, so I'm replying to my own message to maintain threading. > > I did manage to get my multithreaded server creation working, and it was my > own stupidity at fault. > > I had instantiated a single computeService object prior to the various > threaded context.getComputeService() calls, and this meant they were all > sharing (and overwriting references to) the same computeService object. As > soon as one of the threads finished, one of the two possible errors would > occur depending on if the first thread was the one which was not already > null. Easily resolved by giving each thread its own computeService > instantiation. > > > > On 5/6/14, 3:42 PM, Daniel Widdis wrote: > > I'm relatively new to jclouds, using it to create (and delete) servers on > Rackspace, and have been steadily trying to improve its use in my code. > > I have developed a class based on the excellent examples provided in > org.jclouds.examples.rackspace.cloudservers and they have been working fine. > > In my code I have a need to build three types of servers from my saved > images, and am currently doing so with consecutive calls to a server > creation class, which eventually calls computeService.createNodesInGroup(). > The build process has been taking from a few seconds to a few minutes > routinely, with occasional long creation times of about 20 minutes, but > usually in about the 3 or 4 minute range. Building three different types > of images in sequence has been taking up to 10 minutes to complete. > > In order to try to speed up this process, I have tried to multi-thread my > server generation calls using the Callable interface (basically replacing > create() and delete() with call() and using an ExecutorService to submit() > the creation task and get() the resulting NodeMetadata. The code executes > just fine in a test case where I invoke the call() method sequentially, but > when I submit the same code to the Executor, it does not work. I am > successfully creating all the servers I ask for, but the threaded calls I'm > using to return the NodeMetadata are all timing out with errors similar to > this: > > SEVERE: << problem customizing > node(IAD/a04b5524-1c75-459b-b7ec-bd3256f52928): > java.lang.IllegalStateException: > node(IAD/a04b5524-1c75-459b-b7ec-bd3256f52928) didn't achieve the status > running; aborting after 124 seconds with final status: PENDING > > I've seen times from 124 seconds (shortest) to 179 seconds (longest). > > After research, I found jclouds.compute.timeout.node-running value in the > org.jclouds.compute.functions.PollNodeRunning class is what I wanted to try > to manipulate here, and used ComputeService Properties to override that > setting with 30 minutes; however, that introduces a new error: > > SEVERE: RuntimeException while executing runnable > callGetOnFuture(server-test-5be,com.google.common.util.concurrent.Futures$ChainingListenableFuture@2a6a4239) > with executor > com.google.common.util.concurrent.MoreExecutors$ListeningDecorator@2621c1f0 > java.util.concurrent.RejectedExecutionException: > java.lang.InterruptedException > at > org.jclouds.concurrent.DynamicThreadPoolExecutor$ForceQueuePolicy.rejectedExecution(DynamicThreadPoolExecutor.java:132) > > So, my questions are: > > 1. Why is the timeout.node-running value different when running in a > Callable thread vs. when running sequentially? What is its default? > > 2. Why might I be getting the second exception? Is it not possible to > multithread server creation? Are there any working examples of a > multithreaded implementation? > >
