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
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
相关文章推荐
- Java Script 第二节课 Java Script的变量 var声明变量
- OS X El Capitan的 U 盘制作过程
- U-Boot的网络控制台netcon的使用
- Android:ListView数据的分批加载
- [PTA]4-8 Percolate Up and Down (20分)
- 处理大并发之 libevent demo详细分析(对比epoll)
- Swift开发IOS-UIButton
- Ubuntu Server 14.04 安装后的各种需要修改的蛋疼配置(在Vmware12.0中)
- 蓝桥杯 删除数组零元素
- 【SQL 编程你也行】SQL Server 2012新功能之函数:format函数
- 处理大并发之 对libevent的初步认识
- activity跳转另一个activity时,当前activity销毁的原因探究
- MySQL-innodb_flush_log_at_trx_commit
- 处理大并发之 对libevent的初步认识
- Android系统之路(初识MTK) ------ 客制化开机LOGO跟开机动画/系统默认壁纸
- ubuntu 64位下安装wps
- res与res-auto的区别
- SQLserver 2008将数据导出到Sql脚本文件的方法
- OkHttp的UI层回调封装
- Java:1拒绝访问问题