本文共 2284 字,大约阅读时间需要 7 分钟。
[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:提供了各
转载地址:http://lqjdv.baihongyu.com/