eucalyptus clc 调用函数过程

以runInstances为例:

由/eucalyptus-devel/clc/modules/cloud/src/main/resources/eucalyptus-services.xml文件可以看出eucalyptus注册的mule服务。

/eucalyptus-devel/clc/modules/cloud/src/main/resources/eucalyptus-verification.xml文件是runInstances消息传递的路径。

由此可知,runInstances函数调用的流成为

1./eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/VmAdmissionControl.java

下的VmAllocationInfo verify( RunInstancesType request )函数,这些应该是通过mule自动猜解参数类型自动调用的。以下类似,不再赘述。

2./eucalyptus-devel/clc/modules/image-manager/src/main/java/com/eucalyptus/images/ImageManager.java

3./eucalyptus-devel/clc/modules/key-manager/src/main/java/com/eucalyptus/keys/KeyPairManager.java

4./eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/VmTypeVerify.java

5./eucalyptus-devel/clc/modules/group-manager/src/main/java/com/eucalyptus/network/NetworkGroupManager.java

6.资源验证添加完成后,重新回到/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/VmAdmissionControl.java,调用VmAllocationInfo evaluate( VmAllocationInfo vmAllocInfo )函数进行启动实例的准备。主要的函数文件在/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla下。
List<ResourceAllocator> pending = Lists.newArrayList( );
    pending.add( new NodeResourceAllocator() );
    if( Clusters.getInstance( ).hasNetworking( ) ) {
      pending.add( new AddressAllocator() );
      pending.add( new PrivateNetworkAllocator( ) );
      pending.add( new SubnetIndexAllocator( ) );
    }

1)/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/NodeResourceAllocator.java

2)/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/AddressAllocator.groovy

3)/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/PrivateNetworkAllocator.groovy

4)/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/SubnetIndexAllocator.groovy

7.之后调用/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/CreateVmInstances.java下的VmAllocationInfo allocate( VmAllocationInfo vmAllocInfo )函数。注册实例信息。

8./eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/cluster/ClusterEndpoint.java 下的enqueue( VmAllocationInfo vmAllocInfo )函数。

9./eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/sla/ClusterAllocator.java

for ( NetworkToken networkToken : vmToken.getNetworkTokens( ) )
          this.setupNetworkMessages( networkToken );
        this.setupVmMessages( vmToken );

这里设置启动cc端的网络,然后设置启动实例。

10.最后返回/eucalyptus-devel/clc/modules/cluster-manager/src/main/java/com/eucalyptus/vm/VmReplyTransform.java RunInstancesResponseType allocate( VmAllocationInfo vmAllocInfo )函数,将调用结果返回给用户。

 

具体的实现细节大家可以讨论以下。

posted on 2011-11-25 09:36  longzhao&&dilanlx  阅读(676)  评论(1)    收藏  举报

导航