gitextract_t6qjy73f/ ├── .gitignore ├── HEADER.txt ├── LICENSE.txt ├── README.md ├── codeformat.xml ├── codetemplates.xml ├── docker/ │ ├── Dockerfile │ ├── base/ │ │ └── Dockerfile │ ├── build.sh │ ├── image/ │ │ ├── admin/ │ │ │ ├── app.sh │ │ │ ├── bin/ │ │ │ │ ├── clean_log │ │ │ │ ├── clean_log.sh │ │ │ │ └── ddl.sql │ │ │ └── health.sh │ │ └── alidata/ │ │ ├── bin/ │ │ │ ├── exec_rc_local.sh │ │ │ ├── lark-wait │ │ │ └── main.sh │ │ ├── init/ │ │ │ ├── 02init-sshd.sh │ │ │ └── fix-hosts.py │ │ └── lib/ │ │ └── proc.sh │ └── run.sh ├── lib/ │ ├── install.bat │ ├── install.sh │ ├── jmockit-0.999.10-sources.jar │ ├── jmockit-0.999.10.jar │ ├── jmockit-0.999.10.pom │ ├── jtester-1.1.8-sources.jar │ ├── jtester-1.1.8.jar │ ├── jtester-1.1.8.pom │ └── ojdbc6.jar ├── manager/ │ ├── biz/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── alibaba/ │ │ │ │ └── otter/ │ │ │ │ └── manager/ │ │ │ │ └── biz/ │ │ │ │ ├── autokeeper/ │ │ │ │ │ ├── AutoKeeperStatService.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── AutoKeeperCollector.java │ │ │ │ │ ├── AutoKeeperData.java │ │ │ │ │ ├── AutoKeeperPersist.java │ │ │ │ │ └── AutoKeeperStatServiceImpl.java │ │ │ │ ├── common/ │ │ │ │ │ ├── DataSourceCreator.java │ │ │ │ │ ├── alarm/ │ │ │ │ │ │ ├── AbstractAlarmService.java │ │ │ │ │ │ ├── AlarmMessage.java │ │ │ │ │ │ ├── AlarmService.java │ │ │ │ │ │ └── DefaultAlarmService.java │ │ │ │ │ ├── arbitrate/ │ │ │ │ │ │ ├── ArbitrateConfigImpl.java │ │ │ │ │ │ └── DeadNodeListener.java │ │ │ │ │ ├── basedao/ │ │ │ │ │ │ └── GenericDAO.java │ │ │ │ │ ├── baseservice/ │ │ │ │ │ │ └── GenericService.java │ │ │ │ │ └── exceptions/ │ │ │ │ │ ├── InvalidConfigureException.java │ │ │ │ │ ├── ManagerException.java │ │ │ │ │ └── RepeatConfigureException.java │ │ │ │ ├── config/ │ │ │ │ │ ├── alarm/ │ │ │ │ │ │ ├── AlarmRuleService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── AlarmRuleDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ ├── AlarmRuleDO.java │ │ │ │ │ │ │ │ └── AlarmRuleParameter.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── AlarmRuleParameterTypeHandler.java │ │ │ │ │ │ │ └── IbatisAlarmRuleDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── AlarmRuleServiceImpl.java │ │ │ │ │ ├── autokeeper/ │ │ │ │ │ │ ├── AutoKeeperClusterService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── AutoKeeperClusterDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── AutoKeeperClusterDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisAutoKeeperClusterDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── AutoKeeperClusterServiceImpl.java │ │ │ │ │ ├── canal/ │ │ │ │ │ │ ├── CanalService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── CanalDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── CanalDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── CanalParameterTypeHandler.java │ │ │ │ │ │ │ └── IbatisCanalDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── CanalServiceImpl.java │ │ │ │ │ ├── channel/ │ │ │ │ │ │ ├── ChannelService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── ChannelDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── ChannelDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── ChannelParameterTypeHandler.java │ │ │ │ │ │ │ └── IbatisChannelDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── ChannelServiceImpl.java │ │ │ │ │ ├── datacolumnpair/ │ │ │ │ │ │ ├── DataColumnPairGroupService.java │ │ │ │ │ │ ├── DataColumnPairService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DataColumnPairDAO.java │ │ │ │ │ │ │ ├── DataColumnPairGroupDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ ├── DataColumnPairDO.java │ │ │ │ │ │ │ │ └── DataColumnPairGroupDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── IbatisDataColumnPairDAO.java │ │ │ │ │ │ │ └── IbatisDataColumnPairGroupDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ ├── DataColumnPairGroupServiceImpl.java │ │ │ │ │ │ └── DataColumnPairServiceImpl.java │ │ │ │ │ ├── datamatrix/ │ │ │ │ │ │ ├── DataMatrixService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DataMatrixDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── DataMatrixDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisDataMatrixDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── DataMatrixServiceImpl.java │ │ │ │ │ ├── datamedia/ │ │ │ │ │ │ ├── DataMediaService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DataMediaDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── DataMediaDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisDataMediaDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── DataMediaServiceImpl.java │ │ │ │ │ ├── datamediapair/ │ │ │ │ │ │ ├── DataMediaPairService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DataMediaPairDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── DataMediaPairDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisDataMediaPairDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── DataMediaPairServiceImpl.java │ │ │ │ │ ├── datamediasource/ │ │ │ │ │ │ ├── DataMediaSourceService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DataMediaSourceDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── DataMediaSourceDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisDataMediaSourceDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── DataMediaSourceServiceImpl.java │ │ │ │ │ ├── node/ │ │ │ │ │ │ ├── NodeService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── NodeDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── NodeDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── IbatisNodeDAO.java │ │ │ │ │ │ │ └── NodeParameterTypeHandler.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── NodeServiceImpl.java │ │ │ │ │ ├── parameter/ │ │ │ │ │ │ ├── SystemParameterService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── SystemParameterDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── SystemParameterDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── IbatisSystemParameterDAO.java │ │ │ │ │ │ │ └── SystemParameterTypeHandler.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── SystemParameterServiceImpl.java │ │ │ │ │ ├── pipeline/ │ │ │ │ │ │ ├── PipelineService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── PipelineDAO.java │ │ │ │ │ │ │ ├── PipelineNodeRelationDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ ├── PipelineDO.java │ │ │ │ │ │ │ │ └── PipelineNodeRelationDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── IbatisPipelineDAO.java │ │ │ │ │ │ │ ├── IbatisPipelineNodeRelationDAO.java │ │ │ │ │ │ │ └── PipelineParameterTypeHandler.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── PipelineServiceImpl.java │ │ │ │ │ ├── record/ │ │ │ │ │ │ ├── LogRecordService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── LogRecordDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── LogRecordDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisLogRecordDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── LogRecordServiceImpl.java │ │ │ │ │ └── utils/ │ │ │ │ │ ├── ListTypeHandler.java │ │ │ │ │ └── MapTypeHandler.java │ │ │ │ ├── monitor/ │ │ │ │ │ ├── AlarmController.java │ │ │ │ │ ├── AlarmRecovery.java │ │ │ │ │ ├── Monitor.java │ │ │ │ │ ├── MonitorRuleExplorerRegisty.java │ │ │ │ │ ├── MonitorTimer.java │ │ │ │ │ ├── PassiveMonitor.java │ │ │ │ │ └── impl/ │ │ │ │ │ ├── AbstractRuleMonitor.java │ │ │ │ │ ├── AlarmRecoveryDelayed.java │ │ │ │ │ ├── DefaultAlarmController.java │ │ │ │ │ ├── DelayStatRuleMonitor.java │ │ │ │ │ ├── ExceptionRuleMonitor.java │ │ │ │ │ ├── GlobalMonitor.java │ │ │ │ │ ├── PipelineMonitor.java │ │ │ │ │ ├── PipelineTimeoutRuleMonitor.java │ │ │ │ │ ├── PositionTimeoutRuleMonitor.java │ │ │ │ │ ├── ProcessTimeoutRuleMonitor.java │ │ │ │ │ ├── RestartAlarmRecovery.java │ │ │ │ │ └── SelfMonitor.java │ │ │ │ ├── remote/ │ │ │ │ │ ├── ArbitrateRemoteService.java │ │ │ │ │ ├── CanalRemoteService.java │ │ │ │ │ ├── ConfigRemoteService.java │ │ │ │ │ ├── NodeRemoteService.java │ │ │ │ │ ├── StatsRemoteService.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── ArbitrateRemoteServiceImpl.java │ │ │ │ │ │ ├── CanalRemoteServiceImpl.java │ │ │ │ │ │ ├── ConfigRemoteServiceImpl.java │ │ │ │ │ │ ├── NodeMBeanServiceImpl.java │ │ │ │ │ │ └── StatsRemoteServiceImpl.java │ │ │ │ │ └── interceptor/ │ │ │ │ │ └── RemoteExceptionLoggerInterceptor.java │ │ │ │ ├── statistics/ │ │ │ │ │ ├── delay/ │ │ │ │ │ │ ├── DelayCounter.java │ │ │ │ │ │ ├── DelayStatService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── DelayStatDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── DelayStatDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisDelayStatDAO.java │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ └── DelayStatServiceImpl.java │ │ │ │ │ │ └── param/ │ │ │ │ │ │ ├── DelayCountParam.java │ │ │ │ │ │ ├── DelayStatInfo.java │ │ │ │ │ │ ├── TimelineDelayCondition.java │ │ │ │ │ │ └── TopDelayStat.java │ │ │ │ │ ├── stage/ │ │ │ │ │ │ ├── ProcessStatService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── ProcessDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ └── ProcessStatDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ └── IbatisProcessDAO.java │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ └── ProcessStatServiceImpl.java │ │ │ │ │ ├── table/ │ │ │ │ │ │ ├── TableStatService.java │ │ │ │ │ │ ├── dal/ │ │ │ │ │ │ │ ├── TableHistoryStatDAO.java │ │ │ │ │ │ │ ├── TableStatDAO.java │ │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ │ ├── TableHistoryStatDO.java │ │ │ │ │ │ │ │ └── TableStatDO.java │ │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ │ ├── IbatisTableHistoryStatDAO.java │ │ │ │ │ │ │ └── IbatisTableStatDAO.java │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ └── TableStatServiceImpl.java │ │ │ │ │ │ └── param/ │ │ │ │ │ │ ├── BehaviorHistoryCondition.java │ │ │ │ │ │ ├── BehaviorHistoryInfo.java │ │ │ │ │ │ └── TimelineBehaviorHistoryCondition.java │ │ │ │ │ └── throughput/ │ │ │ │ │ ├── ThroughputStatService.java │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── ThroughputDAO.java │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ └── ThroughputStatDO.java │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ └── IbatisThroughputDAO.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ └── ThroughputStatServiceImpl.java │ │ │ │ │ └── param/ │ │ │ │ │ ├── AnalysisType.java │ │ │ │ │ ├── RealtimeThroughputCondition.java │ │ │ │ │ ├── ThroughputCondition.java │ │ │ │ │ ├── ThroughputInfo.java │ │ │ │ │ └── TimelineThroughputCondition.java │ │ │ │ ├── user/ │ │ │ │ │ ├── UserService.java │ │ │ │ │ ├── dal/ │ │ │ │ │ │ ├── UserDAO.java │ │ │ │ │ │ ├── dataobject/ │ │ │ │ │ │ │ └── UserDO.java │ │ │ │ │ │ └── ibatis/ │ │ │ │ │ │ └── IbatisUserDAO.java │ │ │ │ │ └── impl/ │ │ │ │ │ └── UserServiceImpl.java │ │ │ │ └── utils/ │ │ │ │ ├── DataSourceChecker.java │ │ │ │ └── RegexUtils.java │ │ │ └── resources/ │ │ │ ├── spring/ │ │ │ │ ├── otter-manager-alarm.xml │ │ │ │ ├── otter-manager-arbitrate.xml │ │ │ │ ├── otter-manager-autokeeper.xml │ │ │ │ ├── otter-manager-dal.xml │ │ │ │ ├── otter-manager-datasource.xml │ │ │ │ ├── otter-manager-monitor.xml │ │ │ │ ├── otter-manager-remote.xml │ │ │ │ └── otter-manager-service.xml │ │ │ └── sqlmap/ │ │ │ ├── sqlmap-mapping-alarmRule.xml │ │ │ ├── sqlmap-mapping-autokeeper.xml │ │ │ ├── sqlmap-mapping-canal.xml │ │ │ ├── sqlmap-mapping-channel.xml │ │ │ ├── sqlmap-mapping-datacolumnpair.xml │ │ │ ├── sqlmap-mapping-datacolumnpairgroup.xml │ │ │ ├── sqlmap-mapping-datamatrix.xml │ │ │ ├── sqlmap-mapping-datamedia.xml │ │ │ ├── sqlmap-mapping-datamediapair.xml │ │ │ ├── sqlmap-mapping-datamediasource.xml │ │ │ ├── sqlmap-mapping-delayStat.xml │ │ │ ├── sqlmap-mapping-logrecord.xml │ │ │ ├── sqlmap-mapping-node.xml │ │ │ ├── sqlmap-mapping-pipeline.xml │ │ │ ├── sqlmap-mapping-pipelinenoderelation.xml │ │ │ ├── sqlmap-mapping-systemParameter.xml │ │ │ ├── sqlmap-mapping-tableHistoryStat.xml │ │ │ ├── sqlmap-mapping-tableStat.xml │ │ │ ├── sqlmap-mapping-throughputStat.xml │ │ │ ├── sqlmap-mapping-user.xml │ │ │ └── sqlmap.xml │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── manager/ │ │ │ └── biz/ │ │ │ ├── BaseOtterTest.java │ │ │ ├── autokeeper/ │ │ │ │ └── impl/ │ │ │ │ └── AutoKeeperCollectorTest.java │ │ │ ├── monitor/ │ │ │ │ ├── AbstractRuleMonitorInPeriodTest.java │ │ │ │ ├── AlarmServiceTest.java │ │ │ │ ├── ExceptionRuleMonitorTest.java │ │ │ │ └── GlobalMonitorTest.java │ │ │ └── service/ │ │ │ ├── NodeSerivceTest.java │ │ │ └── PipelineSerivceTest.java │ │ └── resources/ │ │ └── applicationContext.xml │ ├── deployer/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── assembly/ │ │ │ ├── component.xml │ │ │ ├── dev.xml │ │ │ ├── mvn.xml │ │ │ └── release.xml │ │ ├── bin/ │ │ │ ├── startup.bat │ │ │ ├── startup.sh │ │ │ └── stop.sh │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── manager/ │ │ │ └── deployer/ │ │ │ ├── JettyEmbedServer.java │ │ │ └── OtterManagerLauncher.java │ │ └── resources/ │ │ ├── jetty.xml │ │ ├── logback.xml │ │ ├── otter.properties │ │ ├── sql/ │ │ │ └── otter-manager-schema.sql │ │ └── webapp/ │ │ ├── META-INF/ │ │ │ └── MANIFEST.MF │ │ ├── WEB-INF/ │ │ │ ├── applicationContext.xml │ │ │ ├── common/ │ │ │ │ ├── pipeline-exception.xml │ │ │ │ ├── pipeline.xml │ │ │ │ ├── resources.xml │ │ │ │ ├── uris.xml │ │ │ │ ├── webx-component-and-root.xml │ │ │ │ └── webx-component.xml │ │ │ ├── home/ │ │ │ │ └── form.xml │ │ │ ├── web.xml │ │ │ ├── webx-home.xml │ │ │ └── webx.xml │ │ ├── css/ │ │ │ ├── JSONFormatter.css │ │ │ ├── commons.css │ │ │ ├── otter.css │ │ │ └── skin.css │ │ ├── js/ │ │ │ ├── JSONFormatter.js │ │ │ ├── My97DatePicker/ │ │ │ │ ├── My97DatePicker.html │ │ │ │ ├── WdatePicker.js │ │ │ │ ├── calendar.js │ │ │ │ ├── config.js │ │ │ │ ├── lang/ │ │ │ │ │ ├── en.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh-tw.js │ │ │ │ └── skin/ │ │ │ │ ├── WdatePicker.css │ │ │ │ ├── default/ │ │ │ │ │ └── datepicker.css │ │ │ │ └── whyGreen/ │ │ │ │ └── datepicker.css │ │ │ ├── analysisStatus.js │ │ │ ├── dbCheck.js │ │ │ ├── flot/ │ │ │ │ ├── excanvas.js │ │ │ │ ├── jquery.colorhelpers.js │ │ │ │ ├── jquery.flot.crosshair.js │ │ │ │ ├── jquery.flot.fillbetween.js │ │ │ │ ├── jquery.flot.image.js │ │ │ │ ├── jquery.flot.js │ │ │ │ ├── jquery.flot.navigate.js │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ ├── jquery.flot.selection.js │ │ │ │ ├── jquery.flot.stack.js │ │ │ │ ├── jquery.flot.symbol.js │ │ │ │ ├── jquery.flot.threshold.js │ │ │ │ └── jquery.js │ │ │ ├── gchartapi.js │ │ │ ├── jquery.simplemodal-1.4.js │ │ │ ├── nodeCheck.js │ │ │ ├── pop.js │ │ │ └── trcolor.js │ │ └── templates/ │ │ └── home/ │ │ ├── control/ │ │ │ └── navigation.vm │ │ ├── layout/ │ │ │ └── default.vm │ │ └── screen/ │ │ ├── addAlarmRule.vm │ │ ├── addBatchDataMediaPair.vm │ │ ├── addCanal.vm │ │ ├── addChannel.vm │ │ ├── addColumnPair.vm │ │ ├── addColumnPairGroup.vm │ │ ├── addDataMatrix.vm │ │ ├── addDataMedia.vm │ │ ├── addDataMediaPair.vm │ │ ├── addDataSource.vm │ │ ├── addNode.vm │ │ ├── addPipeline.vm │ │ ├── addUser.vm │ │ ├── addZookeeper.vm │ │ ├── alarmRuleList.vm │ │ ├── alarmSystemList.vm │ │ ├── analysisDelayStat.vm │ │ ├── analysisStageStat.vm │ │ ├── analysisThroughputHistory.vm │ │ ├── analysisThroughputStat.vm │ │ ├── analysisTopStat.vm │ │ ├── autoKeeperClientPath.vm │ │ ├── autoKeeperClustersDetail.vm │ │ ├── autoKeeperClustersList.vm │ │ ├── behaviorHistoryCurve.vm │ │ ├── canalInfo.vm │ │ ├── canalList.vm │ │ ├── channelInfo.vm │ │ ├── channelList.vm │ │ ├── checkDelayStat.vm │ │ ├── dataMatrixInfo.vm │ │ ├── dataMatrixList.vm │ │ ├── dataMediaInfo.vm │ │ ├── dataMediaList.vm │ │ ├── dataMediaPairInfo.vm │ │ ├── dataMediaPairList.vm │ │ ├── dataSourceInfo.vm │ │ ├── dataSourceList.vm │ │ ├── editAlarmRule.vm │ │ ├── editAutoKeeper.vm │ │ ├── editCanal.vm │ │ ├── editChannel.vm │ │ ├── editDataMatrix.vm │ │ ├── editDataMedia.vm │ │ ├── editDataMediaPair.vm │ │ ├── editDataSource.vm │ │ ├── editNode.vm │ │ ├── editParameter.vm │ │ ├── editPipeline.vm │ │ ├── editUser.vm │ │ ├── error.vm │ │ ├── forbidden.vm │ │ ├── index.vm │ │ ├── initSql.vm │ │ ├── logRecordList.vm │ │ ├── logRecordTab.vm │ │ ├── login.vm │ │ ├── monitor/ │ │ │ ├── getNodes.vm │ │ │ ├── monitorTrigger.vm │ │ │ └── ok.vm │ │ ├── nodeInfo.vm │ │ ├── nodeList.vm │ │ ├── pipelineInfo.vm │ │ ├── pipelineList.vm │ │ ├── selectCanal.vm │ │ ├── selectDataMedia.vm │ │ ├── selectDataSource.vm │ │ ├── systemParameter.vm │ │ ├── systemReduction.vm │ │ ├── userManager.vm │ │ ├── wikiGuide.vm │ │ └── zkError.vm │ ├── pom.xml │ └── web/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── alibaba/ │ └── otter/ │ └── manager/ │ └── web/ │ ├── common/ │ │ ├── CanalExtraParamUtil.java │ │ ├── NumberFormatUtil.java │ │ ├── WebConstant.java │ │ ├── api/ │ │ │ ├── ApiAuthService.java │ │ │ ├── DefaultApiAuthService.java │ │ │ └── JsonResult.java │ │ └── model/ │ │ ├── SeniorCanal.java │ │ ├── SeniorChannel.java │ │ ├── SeniorDataMatrix.java │ │ ├── SeniorDataMedia.java │ │ ├── SeniorDataMediaPair.java │ │ ├── SeniorDataMediaSource.java │ │ └── SeniorNode.java │ ├── home/ │ │ └── module/ │ │ ├── action/ │ │ │ ├── AbstractAction.java │ │ │ ├── AlarmRuleAction.java │ │ │ ├── AutoKeeperClusterAction.java │ │ │ ├── CanalAction.java │ │ │ ├── ChannelAction.java │ │ │ ├── ColumnPairAction.java │ │ │ ├── ColumnPairGroupAction.java │ │ │ ├── DataMatrixAction.java │ │ │ ├── DataMediaAction.java │ │ │ ├── DataMediaPairAction.java │ │ │ ├── DataMediaSourceAction.java │ │ │ ├── NodeAction.java │ │ │ ├── PipelineAction.java │ │ │ ├── PositionAction.java │ │ │ ├── SwitchWarmupAction.java │ │ │ ├── SystemParameterAction.java │ │ │ └── UserAction.java │ │ └── screen/ │ │ ├── AddAlarmRule.java │ │ ├── AddBatchDataMediaPair.java │ │ ├── AddCanal.java │ │ ├── AddColumnPair.java │ │ ├── AddColumnPairGroup.java │ │ ├── AddDataMediaPair.java │ │ ├── AddNode.java │ │ ├── AddPipeline.java │ │ ├── AddZookeeper.java │ │ ├── AlarmRuleList.java │ │ ├── AlarmSystemList.java │ │ ├── AnalysisDelayStat.java │ │ ├── AnalysisStageStat.java │ │ ├── AnalysisThroughputHistory.java │ │ ├── AnalysisThroughputStat.java │ │ ├── AnalysisTopStat.java │ │ ├── AutoKeeperClientPath.java │ │ ├── AutoKeeperClustersDetail.java │ │ ├── AutoKeeperClustersList.java │ │ ├── BehaviorHistoryCurve.java │ │ ├── CanalInfo.java │ │ ├── CanalList.java │ │ ├── ChannelInfo.java │ │ ├── ChannelList.java │ │ ├── CheckDelayStat.java │ │ ├── DataMatrixInfo.java │ │ ├── DataMatrixList.java │ │ ├── DataMediaInfo.java │ │ ├── DataMediaList.java │ │ ├── DataMediaPairInfo.java │ │ ├── DataMediaPairList.java │ │ ├── DataSourceInfo.java │ │ ├── DataSourceList.java │ │ ├── EditAlarmRule.java │ │ ├── EditAutoKeeper.java │ │ ├── EditCanal.java │ │ ├── EditChannel.java │ │ ├── EditDataMatrix.java │ │ ├── EditDataMedia.java │ │ ├── EditDataMediaPair.java │ │ ├── EditDataSource.java │ │ ├── EditNode.java │ │ ├── EditPipeline.java │ │ ├── EditUser.java │ │ ├── LogRecordList.java │ │ ├── LogRecordTab.java │ │ ├── NodeInfo.java │ │ ├── NodeList.java │ │ ├── Ok.java │ │ ├── PipelineInfo.java │ │ ├── PipelineList.java │ │ ├── SelectCanal.java │ │ ├── SelectDataMedia.java │ │ ├── SelectDataSource.java │ │ ├── SystemParameter.java │ │ ├── SystemReduction.java │ │ ├── UserManager.java │ │ ├── api/ │ │ │ ├── AbstractJsonScreen.java │ │ │ ├── ChannelCheck.java │ │ │ ├── ChannelOp.java │ │ │ ├── NodeOp.java │ │ │ └── TopDelay.java │ │ └── monitor/ │ │ └── MonitorTrigger.java │ └── webx/ │ └── valve/ │ ├── AuthContextValve.java │ ├── PrepareExceptionValve.java │ └── auth/ │ ├── AuthorizeProtected.java │ ├── RegExpURLAnalyze.java │ ├── action/ │ │ ├── ActionPatternHolder.java │ │ ├── ActionProtected.java │ │ ├── ActionProtectedEditor.java │ │ └── ActionProtectedImpl.java │ └── url/ │ ├── URLPatternHolder.java │ ├── URLProtected.java │ ├── URLProtectedEditor.java │ └── URLProtectedImpl.java ├── node/ │ ├── canal/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── canal/ │ │ │ └── extend/ │ │ │ ├── communication/ │ │ │ │ ├── CanalCommmunicationClient.java │ │ │ │ └── CanalConfigClient.java │ │ │ └── ha/ │ │ │ ├── AuthenticationInfoUtils.java │ │ │ └── MediaHAController.java │ │ └── resources/ │ │ └── spring/ │ │ ├── otter-canal-communication.xml │ │ └── tsdb/ │ │ ├── mysql-tsdb.xml │ │ └── sql-map/ │ │ ├── sqlmap-config.xml │ │ ├── sqlmap_history.xml │ │ └── sqlmap_snapshot.xml │ ├── common/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── alibaba/ │ │ │ │ └── otter/ │ │ │ │ └── node/ │ │ │ │ └── common/ │ │ │ │ ├── communication/ │ │ │ │ │ ├── NodeCommmunicationClient.java │ │ │ │ │ └── NodeCommunicationEndpoint.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ConfigClientService.java │ │ │ │ │ ├── NodeTaskListener.java │ │ │ │ │ ├── NodeTaskService.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── ConfigClientServiceImpl.java │ │ │ │ │ │ ├── InternalConfigClientService.java │ │ │ │ │ │ └── NodeTaskServiceImpl.java │ │ │ │ │ └── model/ │ │ │ │ │ └── NodeTask.java │ │ │ │ └── statistics/ │ │ │ │ ├── StatisticsClientService.java │ │ │ │ └── impl/ │ │ │ │ └── StatisticsClientServiceImpl.java │ │ │ └── resources/ │ │ │ └── spring/ │ │ │ ├── otter-node-communication.xml │ │ │ ├── otter-node-config.xml │ │ │ └── otter-node-statistics.xml │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── node/ │ │ │ └── common/ │ │ │ ├── ArbitrateRemoteServiceIntegration.java │ │ │ ├── BaseOtterTest.java │ │ │ ├── config/ │ │ │ │ ├── ConfigClientServiceIntegration.java │ │ │ │ ├── ConfigClientServiceTest.java │ │ │ │ ├── NodeTaskServiceIntegration.java │ │ │ │ └── NodeTaskServiceTest.java │ │ │ └── statistics/ │ │ │ └── StatisticsClientServiceIntegration.java │ │ └── resources/ │ │ └── applicationContext.xml │ ├── deployer/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── assembly/ │ │ │ │ ├── component.xml │ │ │ │ ├── dev.xml │ │ │ │ ├── mvn.xml │ │ │ │ └── release.xml │ │ │ ├── bin/ │ │ │ │ ├── startup.bat │ │ │ │ ├── startup.sh │ │ │ │ └── stop.sh │ │ │ ├── java/ │ │ │ │ └── com/ │ │ │ │ └── alibaba/ │ │ │ │ └── otter/ │ │ │ │ └── node/ │ │ │ │ └── deployer/ │ │ │ │ └── OtterLauncher.java │ │ │ └── resources/ │ │ │ ├── applicationContext.xml │ │ │ ├── logback.xml │ │ │ ├── otter.properties │ │ │ └── sql/ │ │ │ ├── otter-system-ddl-mysql.sql │ │ │ └── otter-system-ddl-oracle.sql │ │ └── test/ │ │ └── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── node/ │ │ └── deployer/ │ │ └── OtterLauncherIntegration.java │ ├── etl/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ ├── Batch.proto │ │ │ │ ├── com/ │ │ │ │ │ └── alibaba/ │ │ │ │ │ └── otter/ │ │ │ │ │ └── node/ │ │ │ │ │ └── etl/ │ │ │ │ │ ├── OtterConstants.java │ │ │ │ │ ├── OtterContextLocator.java │ │ │ │ │ ├── OtterController.java │ │ │ │ │ ├── OtterControllerMBean.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── datasource/ │ │ │ │ │ │ │ ├── DataSourceService.java │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ └── DBDataSourceService.java │ │ │ │ │ │ ├── db/ │ │ │ │ │ │ │ ├── dialect/ │ │ │ │ │ │ │ │ ├── AbstractDbDialect.java │ │ │ │ │ │ │ │ ├── AbstractSqlTemplate.java │ │ │ │ │ │ │ │ ├── DbDialect.java │ │ │ │ │ │ │ │ ├── DbDialectFactory.java │ │ │ │ │ │ │ │ ├── DbDialectGenerator.java │ │ │ │ │ │ │ │ ├── SqlTemplate.java │ │ │ │ │ │ │ │ ├── mysql/ │ │ │ │ │ │ │ │ │ ├── MysqlDialect.java │ │ │ │ │ │ │ │ │ └── MysqlSqlTemplate.java │ │ │ │ │ │ │ │ └── oracle/ │ │ │ │ │ │ │ │ ├── OracleDialect.java │ │ │ │ │ │ │ │ └── OracleSqlTemplate.java │ │ │ │ │ │ │ ├── lob/ │ │ │ │ │ │ │ │ ├── AutomaticJdbcExtractor.java │ │ │ │ │ │ │ │ └── LazyNativeJdbcExtractor.java │ │ │ │ │ │ │ └── utils/ │ │ │ │ │ │ │ ├── ByteArrayConverter.java │ │ │ │ │ │ │ ├── DdlUtils.java │ │ │ │ │ │ │ ├── SqlTimestampConverter.java │ │ │ │ │ │ │ └── SqlUtils.java │ │ │ │ │ │ ├── io/ │ │ │ │ │ │ │ ├── EncryptUtils.java │ │ │ │ │ │ │ ├── EncryptedData.java │ │ │ │ │ │ │ ├── compress/ │ │ │ │ │ │ │ │ ├── Compressor.java │ │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ │ └── CompressException.java │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── AbstractCompressor.java │ │ │ │ │ │ │ │ ├── PackableObject.java │ │ │ │ │ │ │ │ ├── bzip2/ │ │ │ │ │ │ │ │ │ └── BZip2Compressor.java │ │ │ │ │ │ │ │ └── gzip/ │ │ │ │ │ │ │ │ └── GzipCompressor.java │ │ │ │ │ │ │ ├── crypto/ │ │ │ │ │ │ │ │ ├── AESException.java │ │ │ │ │ │ │ │ └── AESUtils.java │ │ │ │ │ │ │ ├── download/ │ │ │ │ │ │ │ │ ├── DataRetriever.java │ │ │ │ │ │ │ │ ├── DataRetrieverFactory.java │ │ │ │ │ │ │ │ ├── Download.java │ │ │ │ │ │ │ │ ├── DownloadStatus.java │ │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ │ └── DataRetrieveException.java │ │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ │ ├── AbstractCommandDownload.java │ │ │ │ │ │ │ │ ├── AbstractCommandRetriever.java │ │ │ │ │ │ │ │ ├── FileRetriever.java │ │ │ │ │ │ │ │ ├── aria2c/ │ │ │ │ │ │ │ │ │ ├── Aria2cConfig.java │ │ │ │ │ │ │ │ │ ├── Aria2cDownload.java │ │ │ │ │ │ │ │ │ ├── Aria2cRetriever.java │ │ │ │ │ │ │ │ │ └── Aria2cStat.java │ │ │ │ │ │ │ │ └── observer/ │ │ │ │ │ │ │ │ ├── DefaultExceptionObserver.java │ │ │ │ │ │ │ │ ├── DefaultProgressObserver.java │ │ │ │ │ │ │ │ ├── DefaultStatusObserver.java │ │ │ │ │ │ │ │ ├── ExceptionObserver.java │ │ │ │ │ │ │ │ ├── ProgressObserver.java │ │ │ │ │ │ │ │ └── StatusObserver.java │ │ │ │ │ │ │ └── signature/ │ │ │ │ │ │ │ ├── ChecksumException.java │ │ │ │ │ │ │ ├── ChecksumUtils.java │ │ │ │ │ │ │ └── Crc32C.java │ │ │ │ │ │ ├── jetty/ │ │ │ │ │ │ │ └── JettyEmbedServer.java │ │ │ │ │ │ ├── jmx/ │ │ │ │ │ │ │ ├── JmxConnectorServerFactoryBean.java │ │ │ │ │ │ │ ├── StageAggregation.java │ │ │ │ │ │ │ └── StageAggregationCollector.java │ │ │ │ │ │ ├── pipe/ │ │ │ │ │ │ │ ├── Pipe.java │ │ │ │ │ │ │ ├── PipeDataType.java │ │ │ │ │ │ │ ├── PipeKey.java │ │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ │ └── PipeException.java │ │ │ │ │ │ │ └── impl/ │ │ │ │ │ │ │ ├── RowDataPipeDelegate.java │ │ │ │ │ │ │ ├── http/ │ │ │ │ │ │ │ │ ├── AbstractHttpPipe.java │ │ │ │ │ │ │ │ ├── AttachmentHttpPipe.java │ │ │ │ │ │ │ │ ├── HttpPipeKey.java │ │ │ │ │ │ │ │ ├── LimitedInputStream.java │ │ │ │ │ │ │ │ ├── RemoteUrlBuilder.java │ │ │ │ │ │ │ │ ├── RowDataHttpPipe.java │ │ │ │ │ │ │ │ └── archive/ │ │ │ │ │ │ │ │ ├── ArchiveBean.java │ │ │ │ │ │ │ │ ├── ArchiveException.java │ │ │ │ │ │ │ │ ├── ArchiveRetriverCallback.java │ │ │ │ │ │ │ │ └── LazyFileInputStream.java │ │ │ │ │ │ │ ├── memory/ │ │ │ │ │ │ │ │ ├── AbstractMemoryPipe.java │ │ │ │ │ │ │ │ ├── MemoryPipeKey.java │ │ │ │ │ │ │ │ └── RowDataMemoryPipe.java │ │ │ │ │ │ │ └── rpc/ │ │ │ │ │ │ │ ├── AbstractRpcPipe.java │ │ │ │ │ │ │ ├── RowDataRpcPipe.java │ │ │ │ │ │ │ └── RpcPipeKey.java │ │ │ │ │ │ └── task/ │ │ │ │ │ │ └── GlobalTask.java │ │ │ │ │ ├── conflict/ │ │ │ │ │ │ ├── FileBatchConflictDetectService.java │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ └── ConflictException.java │ │ │ │ │ │ ├── impl/ │ │ │ │ │ │ │ └── FileBatchConflictDetectServiceImpl.java │ │ │ │ │ │ └── model/ │ │ │ │ │ │ ├── ConflictEventType.java │ │ │ │ │ │ └── FileConflictDetectEvent.java │ │ │ │ │ ├── extract/ │ │ │ │ │ │ ├── ExtractTask.java │ │ │ │ │ │ ├── SetlFuture.java │ │ │ │ │ │ ├── exceptions/ │ │ │ │ │ │ │ └── ExtractException.java │ │ │ │ │ │ └── extractor/ │ │ │ │ │ │ ├── AbstractExtractor.java │ │ │ │ │ │ ├── DatabaseExtractor.java │ │ │ │ │ │ ├── FileExtractor.java │ │ │ │ │ │ ├── FreedomExtractor.java │ │ │ │ │ │ ├── GroupExtractor.java │ │ │ │ │ │ ├── OtterExtractor.java │ │ │ │ │ │ ├── OtterExtractorFactory.java │ │ │ │ │ │ ├── ProcessorExtractor.java │ │ │ │ │ │ └── ViewExtractor.java │ │ │ │ │ ├── load/ │ │ │ │ │ │ ├── LoadTask.java │ │ │ │ │ │ ├── exception/ │ │ │ │ │ │ │ └── LoadException.java │ │ │ │ │ │ └── loader/ │ │ │ │ │ │ ├── AbstractLoadContext.java │ │ │ │ │ │ ├── LoadContext.java │ │ │ │ │ │ ├── LoadStatsTracker.java │ │ │ │ │ │ ├── OtterLoader.java │ │ │ │ │ │ ├── OtterLoaderFactory.java │ │ │ │ │ │ ├── db/ │ │ │ │ │ │ │ ├── DataBatchLoader.java │ │ │ │ │ │ │ ├── DbLoadAction.java │ │ │ │ │ │ │ ├── DbLoadData.java │ │ │ │ │ │ │ ├── DbLoadDumper.java │ │ │ │ │ │ │ ├── DbLoadMerger.java │ │ │ │ │ │ │ ├── FileLoadAction.java │ │ │ │ │ │ │ ├── FileloadDumper.java │ │ │ │ │ │ │ ├── context/ │ │ │ │ │ │ │ │ ├── DbLoadContext.java │ │ │ │ │ │ │ │ └── FileLoadContext.java │ │ │ │ │ │ │ └── interceptor/ │ │ │ │ │ │ │ ├── log/ │ │ │ │ │ │ │ │ └── LogLoadInterceptor.java │ │ │ │ │ │ │ ├── operation/ │ │ │ │ │ │ │ │ ├── AbstractOperationInterceptor.java │ │ │ │ │ │ │ │ ├── CanalMysqlInterceptor.java │ │ │ │ │ │ │ │ ├── CanalOracleInterceptor.java │ │ │ │ │ │ │ │ └── OperationInterceptorFactory.java │ │ │ │ │ │ │ └── sql/ │ │ │ │ │ │ │ └── SqlBuilderLoadInterceptor.java │ │ │ │ │ │ ├── interceptor/ │ │ │ │ │ │ │ ├── AbstractLoadInterceptor.java │ │ │ │ │ │ │ ├── ChainLoadInterceptor.java │ │ │ │ │ │ │ └── LoadInterceptor.java │ │ │ │ │ │ └── weight/ │ │ │ │ │ │ ├── WeightBarrier.java │ │ │ │ │ │ ├── WeightBuckets.java │ │ │ │ │ │ └── WeightController.java │ │ │ │ │ ├── model/ │ │ │ │ │ │ └── protobuf/ │ │ │ │ │ │ └── BatchProto.java │ │ │ │ │ ├── select/ │ │ │ │ │ │ ├── SelectTask.java │ │ │ │ │ │ ├── exceptions/ │ │ │ │ │ │ │ └── SelectException.java │ │ │ │ │ │ └── selector/ │ │ │ │ │ │ ├── Message.java │ │ │ │ │ │ ├── MessageDumper.java │ │ │ │ │ │ ├── MessageParser.java │ │ │ │ │ │ ├── OtterSelector.java │ │ │ │ │ │ ├── OtterSelectorFactory.java │ │ │ │ │ │ └── canal/ │ │ │ │ │ │ ├── CanalEmbedSelector.java │ │ │ │ │ │ ├── CanalFilterSupport.java │ │ │ │ │ │ ├── OtterAlarmHandler.java │ │ │ │ │ │ └── OtterDownStreamHandler.java │ │ │ │ │ └── transform/ │ │ │ │ │ ├── TransformTask.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ └── TransformException.java │ │ │ │ │ └── transformer/ │ │ │ │ │ ├── AbstractOtterTransformer.java │ │ │ │ │ ├── FileDataTransformer.java │ │ │ │ │ ├── OtterTransformer.java │ │ │ │ │ ├── OtterTransformerContext.java │ │ │ │ │ ├── OtterTransformerFactory.java │ │ │ │ │ └── RowDataTransformer.java │ │ │ │ └── protocol.txt │ │ │ └── resources/ │ │ │ ├── jetty/ │ │ │ │ └── jetty.xml │ │ │ └── spring/ │ │ │ ├── otter-node-common.xml │ │ │ ├── otter-node-conflict.xml │ │ │ ├── otter-node-database.xml │ │ │ ├── otter-node-extension.xml │ │ │ ├── otter-node-extract.xml │ │ │ ├── otter-node-jmx.xml │ │ │ ├── otter-node-load.xml │ │ │ ├── otter-node-pipe.xml │ │ │ ├── otter-node-select.xml │ │ │ └── otter-node-transform.xml │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── node/ │ │ │ └── etl/ │ │ │ ├── ArbitrateRemoteServiceIntegration.java │ │ │ ├── BaseDbTest.java │ │ │ ├── BaseOtterTest.java │ │ │ ├── SqlUtilsTest.java │ │ │ ├── TestUtils.java │ │ │ ├── common/ │ │ │ │ ├── datasource/ │ │ │ │ │ ├── AbstractDbDialectTest.java │ │ │ │ │ ├── TestMysqlUnsignedInt.java │ │ │ │ │ └── TestMysqlUnsignedNumber.java │ │ │ │ ├── db/ │ │ │ │ │ ├── BitTableIntegration.java │ │ │ │ │ ├── DbDialectIntegration.java │ │ │ │ │ ├── DbDialectTableTest.java │ │ │ │ │ ├── DbDialectTest.java │ │ │ │ │ ├── DbPerfIntergration.java │ │ │ │ │ ├── DdlUtilsTest.java │ │ │ │ │ ├── SqlTemplateTest.java │ │ │ │ │ └── TimeTableIntegration.java │ │ │ │ ├── io/ │ │ │ │ │ ├── AESUtilsTest.java │ │ │ │ │ ├── ArchiveBeanIntegration.java │ │ │ │ │ ├── ArchiveBeanTest.java │ │ │ │ │ ├── Aria2cDownLoadIntegration.java │ │ │ │ │ ├── ChecksumUtilsTest.java │ │ │ │ │ └── CompressorTest.java │ │ │ │ ├── jetty/ │ │ │ │ │ └── JettyEmbedIntegration.java │ │ │ │ ├── jmx/ │ │ │ │ │ ├── JmxLoaderIntegration.java │ │ │ │ │ └── StageAggregationTest.java │ │ │ │ └── pipe/ │ │ │ │ ├── HttpPipeIntegration.java │ │ │ │ ├── MemoryPipeTest.java │ │ │ │ └── RpcPipeTest.java │ │ │ ├── conflict/ │ │ │ │ └── FileBatchConflictDetectServiceIntegration.java │ │ │ ├── extract/ │ │ │ │ ├── DatabaseExtractorTest.java │ │ │ │ ├── EventProcessorFactoryIntegration.java │ │ │ │ └── FreedomExtractorTest.java │ │ │ ├── launcher/ │ │ │ │ ├── ArbitrateInitIntegration.java │ │ │ │ └── OtterLoaderFactoryIntegration.java │ │ │ ├── load/ │ │ │ │ ├── DbLoadActionTest.java │ │ │ │ ├── DbLoadMergerTest.java │ │ │ │ ├── FileLoadActionTest.java │ │ │ │ ├── LocalFileLoaderActionTest.java │ │ │ │ ├── WeightBarrierTest.java │ │ │ │ ├── WeightBucketTest.java │ │ │ │ └── WeightControllerTest.java │ │ │ ├── select/ │ │ │ │ ├── CanalClientIntegration.java │ │ │ │ └── OtterDownStreamHandlerIntergration.java │ │ │ └── transform/ │ │ │ └── OtterTransformerTest.java │ │ └── resources/ │ │ ├── applicationContext.xml │ │ ├── compress/ │ │ │ └── geo.protodata │ │ └── sql/ │ │ ├── mysql_init.sql │ │ └── oracle_init.sql │ ├── extend/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── node/ │ │ └── extend/ │ │ ├── fileresolver/ │ │ │ ├── AbstractFileResolver.java │ │ │ └── TestFileResolver.java │ │ └── processor/ │ │ ├── AbstractEventProcessor.java │ │ ├── HintEventProcessor.java │ │ └── TestEventProcessor.java │ └── pom.xml ├── pom.xml └── shared/ ├── arbitrate/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── alibaba/ │ │ │ └── otter/ │ │ │ └── shared/ │ │ │ └── arbitrate/ │ │ │ ├── ArbitrateEventService.java │ │ │ ├── ArbitrateManageService.java │ │ │ ├── ArbitrateViewService.java │ │ │ ├── exception/ │ │ │ │ └── ArbitrateException.java │ │ │ ├── impl/ │ │ │ │ ├── ArbitrateConstants.java │ │ │ │ ├── ArbitrateEvent.java │ │ │ │ ├── ArbitrateEventServiceImpl.java │ │ │ │ ├── ArbitrateManageServiceImpl.java │ │ │ │ ├── ArbitrateViewServiceImpl.java │ │ │ │ ├── alarm/ │ │ │ │ │ └── AlarmClientService.java │ │ │ │ ├── communication/ │ │ │ │ │ └── ArbitrateCommmunicationClient.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ArbitrateConfig.java │ │ │ │ │ ├── ArbitrateConfigRegistry.java │ │ │ │ │ └── ArbitrateConfigUtils.java │ │ │ │ ├── interceptor/ │ │ │ │ │ └── LogInterceptor.java │ │ │ │ ├── manage/ │ │ │ │ │ ├── ChannelArbitrateEvent.java │ │ │ │ │ ├── NodeArbitrateEvent.java │ │ │ │ │ ├── NodeSessionExpired.java │ │ │ │ │ ├── PipelineArbitrateEvent.java │ │ │ │ │ ├── SystemArbitrateEvent.java │ │ │ │ │ └── helper/ │ │ │ │ │ └── ManagePathUtils.java │ │ │ │ ├── setl/ │ │ │ │ │ ├── ArbitrateFactory.java │ │ │ │ │ ├── ArbitrateLifeCycle.java │ │ │ │ │ ├── ExtractArbitrateEvent.java │ │ │ │ │ ├── LoadArbitrateEvent.java │ │ │ │ │ ├── MainStemArbitrateEvent.java │ │ │ │ │ ├── SelectArbitrateEvent.java │ │ │ │ │ ├── TerminArbitrateEvent.java │ │ │ │ │ ├── ToolArbitrateEvent.java │ │ │ │ │ ├── TransformArbitrateEvent.java │ │ │ │ │ ├── delegate/ │ │ │ │ │ │ ├── AbstractDelegateArbitrateEvent.java │ │ │ │ │ │ ├── ExtractDelegateArbitrateEvent.java │ │ │ │ │ │ ├── LoadDelegateArbitrateEvent.java │ │ │ │ │ │ ├── SelectDelegateArbitrateEvent.java │ │ │ │ │ │ ├── TerminDelegateArbitrateEvent.java │ │ │ │ │ │ └── TransformDelegateArbitrateEvent.java │ │ │ │ │ ├── fastrpc/ │ │ │ │ │ │ ├── FastRpcStageController.java │ │ │ │ │ │ └── FastRpcStageEventDispatcher.java │ │ │ │ │ ├── helper/ │ │ │ │ │ │ ├── RemedyIndexComparator.java │ │ │ │ │ │ ├── ReplyProcessQueue.java │ │ │ │ │ │ ├── StageComparator.java │ │ │ │ │ │ ├── StagePathUtils.java │ │ │ │ │ │ ├── StageProgress.java │ │ │ │ │ │ └── TerminProcessQueue.java │ │ │ │ │ ├── lb/ │ │ │ │ │ │ ├── AbstractLoadBalance.java │ │ │ │ │ │ ├── ExtractRandomLoadBanlance.java │ │ │ │ │ │ ├── ExtractRoundRobinLoadBalance.java │ │ │ │ │ │ ├── ExtractStickLoadBalance.java │ │ │ │ │ │ ├── LoadBalance.java │ │ │ │ │ │ ├── LoadBalanceFactory.java │ │ │ │ │ │ ├── RandomLoadBalance.java │ │ │ │ │ │ ├── RoundRobinLoadBalance.java │ │ │ │ │ │ ├── StickLoadBalance.java │ │ │ │ │ │ ├── TransformRandomLoadBanlance.java │ │ │ │ │ │ ├── TransformRoundRobinLoadBalance.java │ │ │ │ │ │ └── TransformStickLoadBalance.java │ │ │ │ │ ├── memory/ │ │ │ │ │ │ ├── ExtractMemoryArbitrateEvent.java │ │ │ │ │ │ ├── LoadMemoryArbitrateEvent.java │ │ │ │ │ │ ├── MemoryStageController.java │ │ │ │ │ │ ├── SelectMemoryArbitrateEvent.java │ │ │ │ │ │ ├── TerminMemoryArbitrateEvent.java │ │ │ │ │ │ └── TransformMemoryArbitrateEvent.java │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── MainstemMonitor.java │ │ │ │ │ │ ├── Monitor.java │ │ │ │ │ │ ├── MonitorScheduler.java │ │ │ │ │ │ ├── NodeMonitor.java │ │ │ │ │ │ ├── PermitMonitor.java │ │ │ │ │ │ ├── TerminMonitor.java │ │ │ │ │ │ └── listener/ │ │ │ │ │ │ ├── MainstemListener.java │ │ │ │ │ │ ├── NodeListener.java │ │ │ │ │ │ └── PermitListener.java │ │ │ │ │ ├── rpc/ │ │ │ │ │ │ ├── ExtractRpcArbitrateEvent.java │ │ │ │ │ │ ├── LoadRpcArbitrateEvent.java │ │ │ │ │ │ ├── RpcStageController.java │ │ │ │ │ │ ├── RpcStageEventDispatcher.java │ │ │ │ │ │ ├── SelectRpcArbitrateEvent.java │ │ │ │ │ │ ├── TerminExecutor.java │ │ │ │ │ │ ├── TerminRpcArbitrateEvent.java │ │ │ │ │ │ ├── TransformRpcArbitrateEvent.java │ │ │ │ │ │ └── monitor/ │ │ │ │ │ │ ├── AbstractProcessListener.java │ │ │ │ │ │ ├── ProcessListener.java │ │ │ │ │ │ ├── ProcessMonitor.java │ │ │ │ │ │ └── SelectProcessListener.java │ │ │ │ │ └── zookeeper/ │ │ │ │ │ ├── ExtractZooKeeperArbitrateEvent.java │ │ │ │ │ ├── LoadZooKeeperArbitrateEvent.java │ │ │ │ │ ├── SelectZooKeeperArbitrateEvent.java │ │ │ │ │ ├── TerminZooKeeperArbitrateEvent.java │ │ │ │ │ ├── TransformZooKeeperArbitrateEvent.java │ │ │ │ │ ├── monitor/ │ │ │ │ │ │ ├── AbstractStageListener.java │ │ │ │ │ │ ├── ExtractStageListener.java │ │ │ │ │ │ ├── LoadStageListener.java │ │ │ │ │ │ ├── SelectStageListener.java │ │ │ │ │ │ ├── StageListener.java │ │ │ │ │ │ ├── StageMonitor.java │ │ │ │ │ │ └── TransformStageListener.java │ │ │ │ │ └── termin/ │ │ │ │ │ ├── ErrorTerminProcess.java │ │ │ │ │ ├── NormalTerminProcess.java │ │ │ │ │ ├── TerminProcess.java │ │ │ │ │ └── WarningTerminProcess.java │ │ │ │ └── zookeeper/ │ │ │ │ ├── AsyncWatcher.java │ │ │ │ ├── SessionExpiredNotification.java │ │ │ │ ├── ZooKeeperClient.java │ │ │ │ ├── ZooKeeperHeartBeatWorker.java │ │ │ │ ├── ZooKeeperOperation.java │ │ │ │ ├── ZooKeeperx.java │ │ │ │ └── lock/ │ │ │ │ ├── DistributedLock.java │ │ │ │ ├── DistributedReentrantLock.java │ │ │ │ └── LockNode.java │ │ │ └── model/ │ │ │ ├── EtlEventData.java │ │ │ ├── EventData.java │ │ │ ├── MainStemEventData.java │ │ │ ├── PipelineEventData.java │ │ │ ├── PositionEventData.java │ │ │ ├── ProcessEventData.java │ │ │ ├── ProcessNodeEventData.java │ │ │ ├── RemedyIndexEventData.java │ │ │ ├── SyncStatusEventData.java │ │ │ └── TerminEventData.java │ │ └── resources/ │ │ └── spring/ │ │ ├── otter-arbitrate-alarm.xml │ │ ├── otter-arbitrate-common.xml │ │ ├── otter-arbitrate-communication.xml │ │ ├── otter-arbitrate-event.xml │ │ ├── otter-arbitrate-log.xml │ │ └── otter-arbitrate-manage.xml │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── shared/ │ │ └── arbitrate/ │ │ ├── BaseEventTest.java │ │ ├── BaseOtterTest.java │ │ ├── demo/ │ │ │ ├── ArbitrateAllTest.java │ │ │ ├── multi/ │ │ │ │ ├── ArbitrateForwardIntegration.java │ │ │ │ ├── ArbitrateOppositeIntegration.java │ │ │ │ └── ChannelArbitrateEventIntegration.java │ │ │ └── servcie/ │ │ │ ├── ExtractServiceDemo.java │ │ │ ├── LoadServiceDemo.java │ │ │ ├── MainStemServiceDemo.java │ │ │ ├── PipelineLifeCycle.java │ │ │ ├── ProcessViewDemo.java │ │ │ ├── SelectServiceDemo.java │ │ │ ├── TerminProcessDemo.java │ │ │ └── TransformServiceDemo.java │ │ ├── manage/ │ │ │ ├── ArbitrateViewServiceTest.java │ │ │ ├── ChannelArbitrateEventTest.java │ │ │ ├── NodeArbitrateEventTest.java │ │ │ └── PipelineArbitrateEventTest.java │ │ ├── setl/ │ │ │ ├── BaseStageTest.java │ │ │ ├── event/ │ │ │ │ ├── BaseArbitrateEventTest.java │ │ │ │ ├── MainStemArbitrateEventTest.java │ │ │ │ ├── ToolArbitrateEventTest.java │ │ │ │ ├── memory/ │ │ │ │ │ ├── MemoryArbitrateEventTest.java │ │ │ │ │ └── TerminMemoryArbitrateEventTest.java │ │ │ │ ├── rpc/ │ │ │ │ │ └── RpcArbitrateEventTest.java │ │ │ │ └── zookeeper/ │ │ │ │ ├── ExtractArbitrateEventTest.java │ │ │ │ ├── LoadArbitrateEventTest.java │ │ │ │ ├── SelectArbitrateEventTest.java │ │ │ │ ├── TerminArbitrateEventTest.java │ │ │ │ └── TransformArbitrateEventTest.java │ │ │ ├── lb/ │ │ │ │ ├── BaseLoadBalanceTest.java │ │ │ │ ├── RandomLoadBalanceTest.java │ │ │ │ └── RoundRobinBalanceTest.java │ │ │ └── monitor/ │ │ │ ├── MainStemMonitorTest.java │ │ │ ├── PermitMonitorTest.java │ │ │ ├── ProcessMonitorTest.java │ │ │ ├── TerminMonitorTest.java │ │ │ ├── node/ │ │ │ │ └── NodeMonitorTest.java │ │ │ └── stage/ │ │ │ ├── ExtractStageListenerTest.java │ │ │ ├── LoadStageListenerTest.java │ │ │ ├── SelectStageListenerTest.java │ │ │ ├── StageMonitorTest.java │ │ │ └── TransformStageListenerTest.java │ │ └── zookeeper/ │ │ ├── DistributedLockTest.java │ │ ├── DistributedReentrantLockTest.java │ │ ├── ZooKeeperCleanerIntegration.java │ │ └── ZooKeeperClientTest.java │ └── resources/ │ └── applicationContext.xml ├── common/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── com/ │ │ │ ├── alibaba/ │ │ │ │ └── otter/ │ │ │ │ └── shared/ │ │ │ │ └── common/ │ │ │ │ ├── model/ │ │ │ │ │ ├── autokeeper/ │ │ │ │ │ │ ├── AutoKeeperCluster.java │ │ │ │ │ │ ├── AutoKeeperConnectionStat.java │ │ │ │ │ │ ├── AutoKeeperEphemeralStat.java │ │ │ │ │ │ ├── AutoKeeperQuorumType.java │ │ │ │ │ │ ├── AutoKeeperServerStat.java │ │ │ │ │ │ ├── AutoKeeperStat.java │ │ │ │ │ │ ├── AutoKeeperStateStat.java │ │ │ │ │ │ └── AutoKeeperWatchStat.java │ │ │ │ │ ├── config/ │ │ │ │ │ │ ├── ConfigException.java │ │ │ │ │ │ ├── ConfigHelper.java │ │ │ │ │ │ ├── ModeValueFilter.java │ │ │ │ │ │ ├── Transient.java │ │ │ │ │ │ ├── alarm/ │ │ │ │ │ │ │ ├── AlarmRule.java │ │ │ │ │ │ │ ├── AlarmRuleStatus.java │ │ │ │ │ │ │ └── MonitorName.java │ │ │ │ │ │ ├── channel/ │ │ │ │ │ │ │ ├── Channel.java │ │ │ │ │ │ │ ├── ChannelParameter.java │ │ │ │ │ │ │ └── ChannelStatus.java │ │ │ │ │ │ ├── data/ │ │ │ │ │ │ │ ├── Column.java │ │ │ │ │ │ │ ├── ColumnGroup.java │ │ │ │ │ │ │ ├── ColumnPair.java │ │ │ │ │ │ │ ├── ColumnPairMode.java │ │ │ │ │ │ │ ├── DataMatrix.java │ │ │ │ │ │ │ ├── DataMedia.java │ │ │ │ │ │ │ ├── DataMediaPair.java │ │ │ │ │ │ │ ├── DataMediaPairComparable.java │ │ │ │ │ │ │ ├── DataMediaSource.java │ │ │ │ │ │ │ ├── DataMediaType.java │ │ │ │ │ │ │ ├── ExtensionData.java │ │ │ │ │ │ │ ├── ExtensionDataType.java │ │ │ │ │ │ │ ├── db/ │ │ │ │ │ │ │ │ ├── DbDataMedia.java │ │ │ │ │ │ │ │ └── DbMediaSource.java │ │ │ │ │ │ │ └── mq/ │ │ │ │ │ │ │ ├── MqDataMedia.java │ │ │ │ │ │ │ └── MqMediaSource.java │ │ │ │ │ │ ├── enums/ │ │ │ │ │ │ │ ├── AreaType.java │ │ │ │ │ │ │ └── StageType.java │ │ │ │ │ │ ├── node/ │ │ │ │ │ │ │ ├── Node.java │ │ │ │ │ │ │ ├── NodeParameter.java │ │ │ │ │ │ │ └── NodeStatus.java │ │ │ │ │ │ ├── parameter/ │ │ │ │ │ │ │ ├── Parameter.java │ │ │ │ │ │ │ └── SystemParameter.java │ │ │ │ │ │ ├── pipeline/ │ │ │ │ │ │ │ ├── Pipeline.java │ │ │ │ │ │ │ └── PipelineParameter.java │ │ │ │ │ │ └── record/ │ │ │ │ │ │ └── LogRecord.java │ │ │ │ │ ├── statistics/ │ │ │ │ │ │ ├── delay/ │ │ │ │ │ │ │ ├── DelayCount.java │ │ │ │ │ │ │ └── DelayStat.java │ │ │ │ │ │ ├── stage/ │ │ │ │ │ │ │ ├── ProcessStat.java │ │ │ │ │ │ │ └── StageStat.java │ │ │ │ │ │ ├── table/ │ │ │ │ │ │ │ └── TableStat.java │ │ │ │ │ │ └── throughput/ │ │ │ │ │ │ ├── ThroughputStat.java │ │ │ │ │ │ └── ThroughputType.java │ │ │ │ │ └── user/ │ │ │ │ │ ├── AuthorizeType.java │ │ │ │ │ └── User.java │ │ │ │ └── utils/ │ │ │ │ ├── AddressUtils.java │ │ │ │ ├── Assert.java │ │ │ │ ├── ByteUtils.java │ │ │ │ ├── JsonUtils.java │ │ │ │ ├── NioUtils.java │ │ │ │ ├── OtterToStringStyle.java │ │ │ │ ├── RegexUtils.java │ │ │ │ ├── SecurityUtils.java │ │ │ │ ├── TestUtils.java │ │ │ │ ├── cache/ │ │ │ │ │ ├── ExtensionMemoryMirror.java │ │ │ │ │ └── RefreshMemoryMirror.java │ │ │ │ ├── cmd/ │ │ │ │ │ ├── Exec.java │ │ │ │ │ ├── StreamAppender.java │ │ │ │ │ ├── StreamCollector.java │ │ │ │ │ └── StreamCopier.java │ │ │ │ ├── code/ │ │ │ │ │ ├── Code.java │ │ │ │ │ └── ResourceBundleUtil.java │ │ │ │ ├── compile/ │ │ │ │ │ ├── JavaSourceCompiler.java │ │ │ │ │ ├── exception/ │ │ │ │ │ │ ├── CompileExprException.java │ │ │ │ │ │ └── JdkCompileException.java │ │ │ │ │ ├── impl/ │ │ │ │ │ │ ├── JdkCompileTask.java │ │ │ │ │ │ └── JdkCompiler.java │ │ │ │ │ └── model/ │ │ │ │ │ ├── JavaFileManagerImpl.java │ │ │ │ │ ├── JavaFileObjectImpl.java │ │ │ │ │ ├── JavaSource.java │ │ │ │ │ └── JdkCompilerClassLoader.java │ │ │ │ ├── extension/ │ │ │ │ │ ├── DefaultExtensionFactory.java │ │ │ │ │ ├── ExtensionFactory.java │ │ │ │ │ ├── classpath/ │ │ │ │ │ │ ├── ClassFilter.java │ │ │ │ │ │ ├── ClassNameUtils.java │ │ │ │ │ │ ├── ClassScanner.java │ │ │ │ │ │ ├── ClasspathClassScanner.java │ │ │ │ │ │ ├── FileSystemClassLoader.java │ │ │ │ │ │ └── FileSystemClassScanner.java │ │ │ │ │ └── exceptions/ │ │ │ │ │ └── ExtensionLoadException.java │ │ │ │ ├── lock/ │ │ │ │ │ └── BooleanMutex.java │ │ │ │ ├── meta/ │ │ │ │ │ ├── DdlSchemaFilter.java │ │ │ │ │ ├── DdlTableNameFilter.java │ │ │ │ │ ├── DdlUtils.java │ │ │ │ │ ├── DdlUtilsFilter.java │ │ │ │ │ └── TableType.java │ │ │ │ ├── sizeof/ │ │ │ │ │ ├── NaiveSizeOf.java │ │ │ │ │ └── ObjectProfiler.java │ │ │ │ ├── spring/ │ │ │ │ │ └── PropertyPlaceholderConfigurer.java │ │ │ │ ├── test/ │ │ │ │ │ └── JTesterxClassPathXmlApplicationContext.java │ │ │ │ ├── thread/ │ │ │ │ │ ├── ExecutorServiceFactoryBean.java │ │ │ │ │ ├── ExecutorTemplate.java │ │ │ │ │ ├── ExecutorTemplateGetter.java │ │ │ │ │ └── NamedThreadFactory.java │ │ │ │ ├── version/ │ │ │ │ │ ├── OtterVersionAnnotation.java │ │ │ │ │ └── VersionInfo.java │ │ │ │ └── zookeeper/ │ │ │ │ ├── ByteSerializer.java │ │ │ │ ├── StringSerializer.java │ │ │ │ ├── ZkClientx.java │ │ │ │ ├── ZkEventThread.java │ │ │ │ └── ZooKeeperx.java │ │ │ └── google/ │ │ │ └── common/ │ │ │ └── collect/ │ │ │ └── OtterMigrateMap.java │ │ └── resources/ │ │ └── jtester.properties │ ├── saveVersion.sh │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── shared/ │ │ └── common/ │ │ ├── AddressUtilsTest.java │ │ ├── BaseOtterPerformance.java │ │ ├── BaseOtterTest.java │ │ ├── InteAddressTest.java │ │ ├── JsonUtilsTest.java │ │ ├── config/ │ │ │ └── ConfigHelperTest.java │ │ ├── sample/ │ │ │ ├── JtesterxSampleTest.java │ │ │ ├── TestMockService1.java │ │ │ ├── TestMockService2.java │ │ │ ├── TestMockService3.java │ │ │ └── TestService.java │ │ └── utils/ │ │ ├── BooleanMutexTest.java │ │ ├── ExecIntegration.java │ │ ├── ExecutorTemplateTest.java │ │ ├── JavaSourceCompilerTest.java │ │ ├── NioUtilsPerformance.java │ │ ├── NioUtilsTest.java │ │ └── ResourceBundleUtilTest.java │ └── resources/ │ ├── applicationContext.xml │ ├── code/ │ │ └── ResourceBundleUtil.properties │ ├── compiler.txt │ ├── otter.properties │ └── spring/ │ └── otter-test-sample.xml ├── communication/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── shared/ │ │ └── communication/ │ │ ├── core/ │ │ │ ├── CommunicationClient.java │ │ │ ├── CommunicationEndpoint.java │ │ │ ├── CommunicationRegistry.java │ │ │ ├── exception/ │ │ │ │ └── CommunicationException.java │ │ │ ├── impl/ │ │ │ │ ├── AbstractCommunicationEndpoint.java │ │ │ │ ├── DefaultCommunicationClientImpl.java │ │ │ │ ├── connection/ │ │ │ │ │ ├── CommunicationConnection.java │ │ │ │ │ ├── CommunicationConnectionFactory.java │ │ │ │ │ ├── CommunicationConnectionPoolFactory.java │ │ │ │ │ ├── CommunicationConnectionPoolable.java │ │ │ │ │ └── CommunicationConnectionPoolableFactory.java │ │ │ │ ├── dubbo/ │ │ │ │ │ ├── DubboCommunicationConnection.java │ │ │ │ │ ├── DubboCommunicationConnectionFactory.java │ │ │ │ │ └── DubboCommunicationEndpoint.java │ │ │ │ └── rmi/ │ │ │ │ ├── RmiCommunicationClientImpl.java │ │ │ │ ├── RmiCommunicationConnection.java │ │ │ │ ├── RmiCommunicationConnectionFactory.java │ │ │ │ └── RmiCommunicationEndpoint.java │ │ │ └── model/ │ │ │ ├── Callback.java │ │ │ ├── CommunicationParam.java │ │ │ ├── Event.java │ │ │ ├── EventType.java │ │ │ └── heart/ │ │ │ └── HeartEvent.java │ │ └── model/ │ │ ├── OtterRemoteException.java │ │ ├── arbitrate/ │ │ │ ├── ArbitrateEventType.java │ │ │ ├── NodeAlarmEvent.java │ │ │ ├── StageSingleEvent.java │ │ │ ├── StopChannelEvent.java │ │ │ └── StopNodeEvent.java │ │ ├── canal/ │ │ │ ├── CanalEventType.java │ │ │ ├── FindCanalEvent.java │ │ │ └── FindFilterEvent.java │ │ ├── config/ │ │ │ ├── ConfigEventType.java │ │ │ ├── FindChannelEvent.java │ │ │ ├── FindMediaEvent.java │ │ │ ├── FindNodeEvent.java │ │ │ ├── FindTaskEvent.java │ │ │ ├── NotifyChannelEvent.java │ │ │ └── NotifyMediaEvent.java │ │ └── statistics/ │ │ ├── DelayCountEvent.java │ │ ├── StatisticsEventType.java │ │ ├── TableStatEvent.java │ │ └── ThroughputStatEvent.java │ └── test/ │ ├── java/ │ │ └── com/ │ │ └── alibaba/ │ │ └── otter/ │ │ └── shared/ │ │ └── communication/ │ │ ├── BaseOtterTest.java │ │ ├── CommunicationSpringIntegrateTest.java │ │ ├── app/ │ │ │ ├── CommunicationAppService.java │ │ │ ├── CommunicationAppServiceImpl.java │ │ │ └── event/ │ │ │ ├── AppCreateEvent.java │ │ │ ├── AppDeleteEvent.java │ │ │ ├── AppEventType.java │ │ │ ├── AppFindEvent.java │ │ │ └── AppUpdateEvent.java │ │ ├── dubbo/ │ │ │ ├── DubboCommunicationTest.java │ │ │ └── DubboConnectionTest.java │ │ └── rmi/ │ │ ├── RmiCommunicationTest.java │ │ └── RmiConnectionTest.java │ └── resources/ │ ├── applicationContext.xml │ └── spring/ │ └── otter-test-communication.xml ├── etl/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── alibaba/ │ └── otter/ │ └── shared/ │ └── etl/ │ ├── extend/ │ │ ├── fileresolver/ │ │ │ ├── FileInfo.java │ │ │ ├── FileResolver.java │ │ │ └── support/ │ │ │ ├── RemoteDirectory.java │ │ │ ├── RemoteDirectoryFetcher.java │ │ │ └── RemoteDirectoryFetcherAware.java │ │ └── processor/ │ │ ├── EventProcessor.java │ │ └── support/ │ │ ├── DataSourceFetcher.java │ │ └── DataSourceFetcherAware.java │ └── model/ │ ├── BatchObject.java │ ├── DbBatch.java │ ├── EventColumn.java │ ├── EventColumnIndexComparable.java │ ├── EventData.java │ ├── EventType.java │ ├── FileBatch.java │ ├── FileData.java │ ├── Identity.java │ ├── ObjectData.java │ └── RowBatch.java ├── pom.xml └── push/ ├── pom.xml └── src/ └── main/ ├── java/ │ └── com/ │ └── alibaba/ │ └── otter/ │ └── common/ │ └── push/ │ ├── AbstractSubscribeManager.java │ ├── PushException.java │ ├── SubscribeCallback.java │ ├── SubscribeManager.java │ ├── SubscribeManagerFactory.java │ ├── SubscribeType.java │ ├── datasource/ │ │ ├── DataSourceHanlder.java │ │ ├── DataSourceKey.java │ │ └── media/ │ │ ├── MediaPushDataSource.java │ │ └── MediaPushDataSourceHandler.java │ ├── media/ │ │ └── MediaSubscribeManager.java │ └── supplier/ │ ├── AbstractDatasourceSupplier.java │ ├── DatasourceChangeCallback.java │ ├── DatasourceInfo.java │ ├── DatasourceSupplier.java │ ├── HaDatasourceInfo.java │ └── media/ │ └── MediaDatasourceSupplier.java └── resources/ └── spring/ └── otter-push-common.xml