您的位置:首页 > 其它

curator client 2.7.1源码笔记

2016-01-06 12:14 232 查看
curator有四个包,curator-client,curator-test,curator-framework,curator-recipes,其中curator-client和curator-test是最基础的,curator-framework依赖这两个包,curator-recipes又依赖curator-framework。

curator-client总共不过三多行代码,记录一下:

CuratorZookeeperClient包含一个ConnectionState,一个RetryPolicy,一个TracerDriver。如果sessionTimeout<connectionTimeout会报warning。

TracerDriver提供打点接口,DefaultTracerDriver以log.trace形式打点, TimeTrace相当于Cat的Transaction。

DefaultZookeeperFactory直接new Zookeeper,没有多余动作。

ConnectionState实现zk的Watcher接口,其中getZooKeeper时会先判断exception,exception从队列poll出来,然后checkTimeout,取sessionTimeout和connectionTimeout最大值,如果大于该值没有连上会尝试重连,如果大于等于最小值小于最大值,且有新的connectionString时尝试连接新的connectionString,否则抛出ConnectionLossException。instanceIndex代表重试连接的次数。其process方法中会调用所有parentWatchers,对于None事件还会调用checkState方法。connectionStartMs是每次状态变更的时间而不一定是连接建立时间。HandleHolder包含了zk
client的使用。

HanldeHolder中关闭zk的做法是register一个dummy watcher,不知道这个会起到什么作用呢。

ensembleprovider提供了zookeeper conenction string,有start,close,getConnectionString(当前连接服务器)的接口,FixedEnsembleProvider是最简单的EnsembleProvider,ExhibitorEnsembleProvider则定时轮询Exhibitors集群获得ConnectionString,允许设置一个RetryPolicy提供查询重试,没看出其中masterExhibitors和exhibitors的区别。

Exhibitors只是个pojo,提供了backup exhibitors集群。Exhibitors是netflix开源的zk监控,备份,恢复,清理和可视化工具,有时间倒是可以看看。

RetryPolicy <- SleepingRetry <- RetryNTImes <- RetryOneTime

RetryUntilElapsed也继承自SleepingRetry,但是时间未超出时不sleep

ExponentialBackoffRetry也继承自SleepingRetry,BoundedExponentialBackoffRetry继承自ExponentBackoffRetry,但没什么特殊。

RetrySleeper无public类,其实现在RetryLoop中。

RetryLoop就是循环重试,提供了static utility:callWithRetry,shouldRetry,isRetryException(从这里看到KeeperException中会带一个code)。其takeException方法会判断是否忽略错误,进行重试,如果不能忽略错误或不允许重试则rethrow exception。

SessionRetryLoop并非继承自RetryLoop,但用法基本与RetryLoop相同,实现了Closeable接口(因此callWithRetry最后会close),包含一个RetryLoop引用。需要先调用start,监听session是否过期。支持两个mode,RETRY时对SessionFailed无条件重试,对于FAIL总是交给retryloop引用来判断。

CloseableExecutorService实现了Closeable接口,可以进行关闭,关闭时把所有future task cancel掉,CloseableScheduledExecutorService继承自该类,功能类似。

CloseableUtils提供了closeQuietly方法,吞掉close时可能的IOException,主要是因为guava v16去掉了Closeables.closeQuietly方法。

EnsurePath确保zk路径已经创建,第一次调用的时候使用RetryLoop创建dir(同步方式),后面的ensure都是NOPs(InitialHelper和doNothingHelper)。

ZKPaths提供了很多utility:fixForNamespace,getNodeFromPath,getPathAndNode,split,mkdirs,deleteChildren,getSortedChildren,makePath

InternalACLProvider只是个接口,可以对不同路径使用不同ACL

PathUtils提供了validatePath方法,顺序节点的话路径后加1 (为什么?)

ThreadUtils是线程相关utils
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: