Jeremy Lv created WHIRR-733:
-------------------------------

             Summary: Need to support a new option called whirr.user-thread 
when it comes to the Openstack
                 Key: WHIRR-733
                 URL: https://issues.apache.org/jira/browse/WHIRR-733
             Project: Whirr
          Issue Type: New Feature
          Components: core
    Affects Versions: 0.8.2
         Environment: Ubuntu
Openstack
            Reporter: Jeremy Lv
             Fix For: 0.9.0


I found it will be blocked when create a virtual machine based on the 
Openstack(It is because the whirr project can't remove the swift container 
after created the new instance) 

Here's my reproduced steps:

First of all, you must configrate the Openstack environments including the 
openstack swift

1>. Configurate my properties file called zookeeper.properties(In my 
environment, I have put the file in the directory of 
"/home/Jeremy/zookeeper.properties")
{code}
whirr.cluster-name=myhadoopcluster
#whirr.instance-templates=1 hadoop-jobtracker+hadoop-namenode,1 
hadoop-datanode+hadoop-tasktracker
whirr.instance-templates=1 zookeeper

whirr.provider=openstack-nova
whirr.location-id=RegionOne
whirr.identity=admin:admin
whirr.credential=hastexo
whirr.image-id=RegionOne/7cf21d93-d04a-4fb4-a09b-f546a9461726
whirr.endpoint = http://10.167.157.86:5000/v2.0
whirr.blobstore-provider=swift-keystone
whirr.blobstore-endpoint=http://10.167.157.86:5000/v2.0/
whirr.blobstore-identity=service:swift
whirr.blobstore-credential=hastexo
#whirr.blobstore-cache-container=swift
#whirr.blobstore-location-id=sdb1
whirr.zookeeper.tarball.url=file:///home/Jeremy/test_sample1.war
jclouds.openstack-nova.auto-generate-keypairs = true
#jclouds.openstack-nova.auto-create-floating-ips = true

whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub
{code}

2>. Download the whirr-0.8.2.zip to my local platform(/home/Jeremy/whirr-0.8.2) 
and unzip it

3>. cd /home/Jeremy/whirr-0.8.2 and execute the following command:
./bin/whirr launch-cluster --config ../zookeeper.properties

4>.You will found the swift blob container can be created successfully but 
can't be removed automatically after create the new instance.(It will be 
blocked during the process of launch-cluster and can't be canced).

After a further investigation about the whirr project, I found it is because of 
the following code:
{code:title=BlobCache.java|borderStyle=solid}
  static {
    /* Ensure that all created containers are removed when the JVM stops */
    Runtime.getRuntime().addShutdownHook(new Thread() {
      @Override
      public void run() {
        BlobCache.dropAndCloseAll();
      }
    });
  }
{code} 
It is because the default value of the user thread in jclouds side is "0", even 
we create a new thread in the whirr side, we can't delete the container here 
because of the following Exception
{code}
Exception in thread "Thread-0" java.util.concurrent.RejectedExecutionException: 
Task [delegate=[method=SwiftKeystoneAsyncClient.listContainers, request=GET 
http://10.167.157.86:8080/v1/AUTH_60d91f3ee474439e8edbbf9f15f424c1/?format=json 
HTTP/1.1], 
executionList=com.google.common.util.concurrent.ExecutionList@1b8633e] rejected 
from java.util.concurrent.ThreadPoolExecutor@7b7e61[Terminated, pool size = 0, 
active threads = 0, queued tasks = 0, completed tasks = 8]
        at 
java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2013)
        at 
java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:816)
        at 
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1337)
        at 
org.jclouds.concurrent.config.DescribingExecutorService.execute(DescribingExecutorService.java:105)
        at 
org.jclouds.concurrent.Futures$FutureListener.addListener(Futures.java:122)
        at 
org.jclouds.concurrent.Futures$ListenableFutureAdapter.addListener(Futures.java:153)
        at com.google.common.util.concurrent.Futures.transform(Futures.java:269)
        at com.google.common.util.concurrent.Futures.transform(Futures.java:380)
        at org.jclouds.concurrent.Futures.compose(Futures.java:270)
        at 
org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
        at 
org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
        at 
org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:254)
        at 
org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:148)
        at $Proxy70.listContainers(Unknown Source)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:170)
        at $Proxy71.listContainers(Unknown Source)
        at com.jclouds.test.JCloudsSwift.deleteConatiner(JCloudsSwift.java:63)
        at com.jclouds.test.JCloudsSwift.access$0(JCloudsSwift.java:60)
        at com.jclouds.test.JCloudsSwift$1.run(JCloudsSwift.java:34)
{code}

All in all, I have also write a sample related to the jcloud and found if we 
define the PROPERTY_USER_THREADS in the jclouds side, it will be successful to 
remove the swift container though the Runtime.getRuntime().addShutdownHook(new 
Thread(). If we didn't define the PROPERTY_USER_THREADS in the jclouds side and 
it will be thrown the RejectedExecutionException in calling the 
Blobstore.deleteContainer method because of the default user thread is "0"

So I think we need to define a new option to support this situation.



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to