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) 收藏 举报
浙公网安备 33010602011771号