cassandra_0.3 源码学习笔记(1)

1). cassandra任何一个节点都可以被客户端访问。

 

2). 对cassandra某个节点的访问是通过调用org.apache.cassandra.service.Cassandra的内部类Client的相应接口实现的。

 

3). 2)中的Cassandra这个类包含了很多内部类和一个接口(Iface)。其中的Client和Processor两个内部类都是对Iface的实现,这保证了他们的内部的所有方法是一一对应的。

 

4). 当Client这个内部类中的某个方法被调用的时候,该方法会用他内部的send_开头的方法发送消息,并且用recv_开头的方法接收返回的内容,容,返回的内容可能是我们想要的数据,也可能是个异常的消息,如果是异常的消息,则会在客户端生成一个相应的异常并抛出,

 

5). Client端send_和recv_方法同目标节点的交互是分别通过oprot和iprot的实例完成的,这两个实例是负责输入输出的,具体的功能的实现在libthrift.jar中。

 

6). 节点和客户端通信的连接是由libthrift.jar中的TThreadPoolServer的实例实现的,这个实例在该节点最初启动的时候被生成,并且该实例内部还保有一个2)中提到的Processor实例。TThreadPoolServer实例给Processor实例提供了输入输出实例iprot和oprot,并且通过调用Processor的processprocess(TProtocol iprot, TProtocol oprot)接口来进一步的向内传递消息。

 

7). 节点最初启动的初始话过程是在org.apache.cassandra.service.CassandraDaemon的setup()中完成的。

 

8). 在Processor的processprocess(TProtocol iprot, TProtocol oprot)会解析iprot中传入的客户端的请求,并首先解析出要调用函数的函数名字,然后通过查询processMap_来决定究竟由那个ProcessFunction实例来接收处理消息,相应的ProcessFunction实例的process(int seqid, TProtocol iprot, TProtocol oprot)被激活并开始全权负责消息的处理和反馈。

 

9). 相应的的ProcessFunction的实例主要负责三件事:i,进一步处理iprot传入的消息 ii,将详细的信息转发给iface的相应方法处理 iii,将得到的反馈通过oprot返回给客户端。这里的iface实例实际上是org.apache.cassandra.service.CassandraServer的一个实例,在Processor的实例创建的时候(节点启动的时候)被装入了Processor实例,但是由于ProcessFunction类是Processor的内部类,所以ProcessFunction的实例也能直接访问。

 

10)以上可知,最终客户端的信息是交给CassandraServer的相应方法来处理的,而thrift的相关功能只是负责了客户端和节点间的交互(9160端口),而节点之间的交互并没有使用thrift的资源。

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值