java jute_ZooKeeper源码阅读(六):JUTE

[ZooKeeper中的Leader选举也不是Paxos, 实现相关的类包括FastLeaderElection, LeaderElection.FastLeaderElection: Leader选举初始投票选自己,收到别人的投票之后判断是否

JUTE是跨语言序列化/反序列化工具,类似Thrift

用于产生java/c版本的消息类

比如:

zkDataBase.addCommittedProposal:

QuorumPacket pp = newQuorumPacket(Leader.PROPOSAL, request.zxid,

baos.toByteArray(), null);

Proposal p = newProposal();

p.packet = pp;

p.request = request;

这里就用到了jute生成的java版QuorumPacket。

rcc.jj --javacc--> org.apache.jute.compiler

zookeeper.jute --org.apache.jute.compiler.generated.RCC--> java/c的消息类实现

//JUTE由javacc编译src\java\main\org\apache\jute\compiler\generated\rcc.jj产生

Jute is a partial implementation of Hadoop's record serialization format.

//javacc : a lexer andparser generator for LL(k) grammars

//org.apache.jute.compiler 包含C、C++、C#、java的生成器

//Generate record code in given language. Language should be alllowercase.

public voidgenCode(String language, File outputDirectory)

//org.apache.jute.compiler

CppGenerator andJavaGenerator are the main entry points from the parser.

//入口在JFile.genCode

JFile又在rcc.jj中被引用

generate_jute_parser:

创建${build.dir}/jute_compiler/org/apache/jute/compiler/generated目录

target="${java.src.dir}${jute_javacc.packagedir}/rcc.jj"

outputdirectory="${jute_javacc.dir}${jute_javacc.packagedir}/"

javacchome="${ivy.lib}"

/>

javacc rcc.jj

javacc编译.jj语法文件,生成一个工具Rcc。Rcc调用JFile的genCode

compile_jute:[A simple totally ordered broadcast protocol causal relationship指的是同一个发送者发送的两个消息,或者leader改变前发送的消息和改变后发送的消息。 怎么保证casual

生成:实体类java代码。(在文件夹src/java/generated目录下)

org.apache.zookeeper.data

生成:对应的C代码

rcc –l C++ …

org.apache.jute包中其余的类:

OutputArchive 序列化需要实现的接口

+BinaryInputArchive

+CsvInputArchive

+XmlInputArchive

InputArchive 反序列化需要实现的接口

+BinaryInputArchive

+CsvInputArchive

+XmlInputArchive

Index 表现为反序列化map的一个迭代器

+BinaryIndex

+CsvIndex

+XmlIndex

*Index idx = startVector(...);

* while(!idx.done()) {

*   .... // read element of a vector

*   idx.incr();

* }

Record : 所有产生的类都必须实现的接口

public interface Record{

public voidserialize(OutputArchive archive, String tag) throws IOException;

public voiddeserialize(InputArchive archive, String tag) throws IOException;

}

RecordReader、RecordWriter是所有InputArchive/OutputArchive的工厂类[源代码:http://svn.apache.org/repos/asf/zookeeper/trunk/ 导入eclipse:在包含build.xml目录下执行ant eclipse将产生.classpath文件 目录结构:src/recipes:提供了各

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值