A Eucalyptus cloud setup consists of three types of components -- the cloud controller, the cluster controller(s), and the node controller(s). The cloud controller is a Java program that, in addition to high-level resource scheduling and system accounting, offers a Web services interface and a Web interface to the outside world. Cluster controller and node controller are written in C and deployed as Web services inside Apache.
Eucalyptus使用了Axis2 ,啥是Axis2或者说Axis2有啥用。Axis就是快速发布web service的工具,提供了SOAP协议的封装,方便于client端于webservice通信。
log机制使用了log4j。
使用X509认证。
class AbstractIsomorph ,注释为MappedSuperclass,个人认为是一个保存用户信息和状态的抽象类。
class AbstractKeyStore ,这个抽象类很有意思,其静态方法调用了子类的构造函数。并且子类GenericKeyStore是其内部类。感觉设计得不好。其意图是让这个类含有几个抽象的方法,但是这几个抽象方法有一个默认的实现。AbstractKeyStore主要是为了添加证书查找证书,并查找用户名对应的password来认证。并且将alias,cert添加到某一文件中。并将此alias对应的password放入到keystore中。
class AbstractNamedRegistry ,这个抽象类将存放、更新某种继承自HasName接口的对象的两种状态。一种是active,一种是disable,这两种状态放在ConcurrentNavigableMap中,并且以对象的名作为key,value就是对象自身。
class AbstractOperation ,这个抽象类是操作的抽象,并认为凡是操作就应该有request和reply,并且request和reply继承自EucalyptusMessage
class AccessDeniedException ,就是一个禁止访问的异常,继承自EucalyptusCloudException。
class Address ,这是一个address类(废话),存放地址id,地址名(?? 个人认为可能是真实地址) ,cluster的地址,使用者的用户名,实例地址等(其实就是一个描述实例所需要的属性。)并使用高性能锁ReentrantReadWriteLock加以控制。加锁是为了将实例assign出去,或者收回。不过我个人觉得ReentrantReadWriteLock可能使用的有问题。以为我看到函数release()中有this.canHas.writeLock().lock();,并在之后调用了unassign()方法,而unassign()方法中也有this.canHas.writeLock().lock();...难道可以对同一写锁加两次lock?不过我没有研究过ReentrantReadWriteLock。
class Addresses, 这个类继承了 AbstractNamedRegistry, 并且可以填入Address .这就是说,这个类是用来active,disable一个address的。另外它是用来单实例模式,也就是整个cloud中只有这一份实例。(这里会不会崩溃后无法恢复的问题? )
class AddressManager ,继承了org.mule.api.lifecycle.Startable类,Startable可能是处理生命周期吧 ..不过这个类是和地址相关的,是用来分配,释放,将address和vm关联起来的类。
class AddressUpdateCallback 继承了QueuedEventCallback并且实现了Runnable,也就是说它可以作为一个线程类。另外它sleep的时间好像有点过长了5*1000.这个类的作用好像是将用户名封装到msg中,然后发送给cluster队列来处理。之后睡一个5*1000秒,然后再醒来看看是否有cluster的回复,然后根据回复设置实例的地址。这里采用线程,是因为需要一直监督address的更新。可以看成是守护线程。
add_key.pl,这个是perl文件,看不太明白,应该是加入了ssh的public key.不过中间为啥使用loop device,并且将图片加载到loop device上就不得而知了。后来发现,这里image的含义不是图片的意思,而是镜像,也就是将镜像加载到loop device上。
add_key~add_wsdllocation.pl都是perl写成的。
class Admin 是用来创建EucalyptusMessage的类。
admin.xml 用来配置www的conf的。
interface Allocator ,这接口用来分配的,根据String requestId, String userName, String vmtype, int min, int max, SortedSet<ClusterNodeState> clusters 来分配资源,会抛出NotEnoughResourcesAvailable异常
class AlreadyExistsException 继承了RuntimeException
class AOEManager 继承了StorageExportManager,是用来导出存储容量的?
interface AppMessages 继承了Messages,从其函数中看,是一个与页面控件事件相关的类。
class AssignAddressCallback ,分配地址的cluster,发送回消息后就会将network configure更新。
class AttachedVolumeInfo 这是一个将附加逻辑磁盘id,逻辑磁盘名,实例id,设备名,状态和添加时间合成的类。如果其为一行,那么一张表就是AttachedVolumes
interface Authenticator 是将X509证书和EucalyptusMessage中信息来生成是否授权的Msg的接口。
aws-base.xml~aws-zones.xml 是将java类映射为XML,是否为Hibernate就不得而知了。
Axis2.xml~class AxisHttpResponseImpl 可以认为是和Axis2打交道的东西。可以以后再研究下。
class BadPaddingException 这个类传说是sun的实现。
enum BaseDirectory ,枚举类型的类,其实就是来设置 HOME( "euca.home" ),VAR( "euca.var.dir" ),CONF( "euca.conf.dir" ),LOG( "euca.log.dir" )这四个变量的。
class BasicClient, 实现了Client,其中包含有serverclient和httpclient两个,主要使用uri进行连接的类。因为使用Axis2所以还没看懂。
class BCrypt ,这个类竟然有注释!BCrypt implements OpenBSD-style Blowfish password hashing using the scheme described in "A Future-Adaptable Password Scheme" by Niels Provos and David Mazieres.实现了一个OpenBSD中的密码机制。来自于A Future-Adaptable Password Scheme一文。
bin-assembly.xml 主要是为了将各个文件war包,jar包,so文件等集合在一起,包括其依赖关系。可能有自动化的程序代为处理吧。
class Binding ,这个类看样子是一个抽象工厂的类,将class名和class的实例类型当做参数传入,然后得到IBindingFactory的某个实现类的实例。
class BindingManager ,其实就是一个map,关于Binding类和绑定名的map.
class BindingUtil ,这个类就是做了一个string中特殊字符的替换,先将http://和字符串末尾的"/"去掉,然后再将./-变为_,也就是说http://blog.csdn.net/cctt_1/将变为blog_csdn_net_cctt_1.
interface BlockStorageManager ,主要是管理逻辑磁盘,快照,得到某个逻辑盘集合状态的接口。
class BucketAlreadyExistsException ,这个异常类继承了EucalyptusCloudException ,而EucalyptusCloudException又继承了AxisFault 。不过这里的bucket是指的什么?
class BucketAlreadyOwnedByYouException ,这个异常类也继承了EucalyptusCloudException ,从名字上很明显就是不不能将已经分配给你的bucket再重复分配给你。
class BucketInfo ,这就是bucket的类了。里面有几个属性,bucketid,所有者的id,bucket的name,bucket创建的时间,是否全局读写,这个bucket所拥有的objects和那些objects的Info,global_read_acp和global_write_acp这里acp是什么? bucket的size,位置,bucket的所有授权和授权信息。授权里的信息可以表明能否有读写acp的权限。不过我还是不明白bucket是啥米?
class BucketNotEmptyException ,同样继承了EucalyptusCloudException,不过什么时候会抛出这个异常呢?
下面是一堆build.xml,这个是ant的build.xml.
class Bukkit , 这个类是管理存储空间,bucket,image的类,应该是clc的核心类(image管理)。好像Eucalyptus中设置每个用户的最大bucketsize为5.其中也含有创建bucket的方法.终于渐渐有点眉目了,其实就是Eucalyptus中将image上传 Walrus的过程。详情查看 ,并且含有解密Image和检查Manifest的过程。其中这个java文件中还含有几个内部类:class ImageCacheFlusher ,这个是私有的。并且是个线程类,调用的是私有函数flushImageCache主要用于将Image写入并清除ImageCache.上面还有一个共有函数FlushImageCache,和这个私有函数的区别在于没有使用信号量,并且首字母是大写的。class ImageCacher 也是一个私有线程类,主要用于将Image做Cache.class StreamConsumer 同样是一个私有线程类,大意应该是做上传操作的。Eucalyptus中一个IO Chunk size的大小为102400byte也就是100KB.class Tar私有类主要是untar,解密Image用的。class Reader 是一个default的线程类,是用于读取一个Object用的也是每100KB一读。class SnapshotDeleter 也是私有线程类,用于快照的删除。
class BukkitImageTest 做测试用的,继承于TestCase
class BukkitTest ,继承于TestCase,是测试Bukkit用的。
c3p0-config.xml这个是用在何处的xml配置文件?在clc/module/core/resources中。
class CaseInsensitiveMap,这个就是一个并发的hashmap,也就是ConcurrentHashMap的一个展现,不过它将所有key中的string都变为小写存储。
CC-binding.xml,这个也是类映射到XML的文件。
cc-client-marshal-adb.c现在变为c语言了。
cc-client-marshal.h是cc-client-marshal-adb.c的头文件。
cc-getlogs.xml~cc-vms.xml都是将类映射到XML
CCclient.c包含了cc-client-marshal.h,是cc控制的主函数入口。其实就是命令行参数的解析,用法为CCclient <host:port> <command> <opts>
class CertAuthentication,实现了Authenticator,使用AbstractKeyStore的getCertificateAlias()方法得到证书的useralias,然后这个alias和EucalyptusProperties.NAME也就是"eucalyptus"作比较。成功的话就将msg中的userID和effectiveUserID设置为"eucalyptus"。
class CertificateInfo,这个就是证书的信息:证书的id,alias,和value.
class Cipher,这个是sun的package javax.crypto中的。是用来加密解密的算法。
class CipherInputStream,这个同样也是sun的package javax.crypto中的。这个是用来返回通过Cipher处理过后的数据的。
class CipherOutputStream ,这个是用来写数据的。
class CipherSpi 这个是用来提供Cipher服务的抽象接口。也是sun的。我发现一条规律:凡是代码中出现多行注释的,都不是Eucalyptus的代码。
client-marshal-adb.c这个已经涉及到nc了。
client-marshal-local.c,这就是本地的方法,和桩不桩的就没有关系了。但是为了统一,还是和上面的函数签名一致。因为client-marshal-local.c和client-marshal-adb.c的头文件都是client-marshal.h
client-marshal.h,不再过多介绍
client-policy-template.xml这是x509的证书模板。
interface Client,含有发送msg,取消订阅某些消息,根据OMElement同步异步,返回uri的函数接口。OMElement是啥米?