You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@inlong.apache.org by go...@apache.org on 2021/07/06 02:30:40 UTC

[incubator-inlong] branch master updated: [INLONG-613] Adjust the project codes according to the renaming requirements (#501)

This is an automated email from the ASF dual-hosted git repository.

gosonzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 4b22232  [INLONG-613] Adjust the project codes according to the renaming requirements (#501)
4b22232 is described below

commit 4b2223269da92aacd0cec8d40da4d624dc42ca3e
Author: gosonzhang <go...@apache.org>
AuthorDate: Tue Jul 6 10:30:02 2021 +0800

    [INLONG-613] Adjust the project codes according to the renaming requirements (#501)
    
    Co-authored-by: gosonzhang <go...@tencent.com>
    Co-authored-by: zhaolei-best <zh...@163.com>
    Co-authored-by: thirtyzhao <th...@tencent.com>
    Co-authored-by: chantccc <52...@users.noreply.github.com>
    Co-authored-by: tianqiwan <ti...@tencent.com>
    Co-authored-by: Daniel <le...@outlook.com>
    Co-authored-by: ziruipeng <zp...@connect.ust.hk>
    Co-authored-by: stingpeng <st...@tencent.com>
---
 .asf.yaml                                          |     6 +-
 .gitignore                                         |    46 +-
 .gitmodules                                        |     4 +-
 .travis.yml                                        |     2 +-
 CHANGES.md                                         |   642 +-
 DISCLAIMER-WIP                                     |     4 +-
 LICENSE                                            |    44 +-
 NOTICE                                             |     2 +-
 README.md                                          |   146 +-
 bin/broker.cmd                                     |    28 -
 bin/env.cmd                                        |    31 -
 bin/groupAdmin.sh                                  |    43 -
 bin/indexReBuilder.sh                              |    56 -
 bin/master.cmd                                     |    28 -
 bin/tubemq-broker-admin.sh                         |    40 -
 bin/tubemq-consumer-test.sh                        |    40 -
 bin/tubemq-producer-test.sh                        |    40 -
 bin/tubemq.sh                                      |   178 -
 codestyle/checkstyle.xml                           |   717 +-
 codestyle/suppressions.xml                         |    30 +-
 inlong-agent/agent-common/pom.xml                  |   108 +
 .../apache/inlong/agent/cache/LocalFileCache.java  |    90 +
 .../apache/inlong/agent/checkpoint/Checkpoint.java |    31 +
 .../apache/inlong/agent/common/AbstractDaemon.java |    97 +
 .../inlong/agent/common/AgentThreadFactory.java    |    44 +
 .../org/apache/inlong/agent/common/Service.java    |    42 +
 .../inlong/agent/conf/AbstractConfiguration.java   |   268 +
 .../inlong/agent/conf/AgentConfiguration.java      |   118 +
 .../org/apache/inlong/agent/conf/JobProfile.java   |    85 +
 .../apache/inlong/agent/conf/ProfileFetcher.java   |    39 +
 .../apache/inlong/agent/conf/TriggerProfile.java   |    55 +
 .../inlong/agent/constants/AgentConstants.java     |   162 +
 .../inlong/agent/constants/CommonConstants.java    |   136 +
 .../inlong/agent/constants/JobConstants.java       |    88 +
 .../org/apache/inlong/agent/db/BerkeleyDbImp.java  |   234 +
 .../java/org/apache/inlong/agent/db/CommandDb.java |    82 +
 .../org/apache/inlong/agent/db/CommandEntity.java  |    46 +
 .../main/java/org/apache/inlong/agent/db/Db.java   |   109 +
 .../org/apache/inlong/agent/db/JobProfileDb.java   |   182 +
 .../org/apache/inlong/agent/db/KeyValueEntity.java |   105 +
 .../org/apache/inlong/agent/db/LocalProfile.java   |    71 +
 .../org/apache/inlong/agent/db/RocksDbImp.java     |   123 +
 .../org/apache/inlong/agent/db/StateSearchKey.java |    32 +
 .../apache/inlong/agent/db/TriggerProfileDb.java   |    79 +
 .../inlong/agent/message/DefaultMessage.java       |    53 +
 .../apache/inlong/agent/message/EndMessage.java    |    39 +
 .../apache/inlong/agent/message/ProxyMessage.java  |    74 +
 .../inlong/agent/metrics/AgentDynamicMBean.java    |   129 +
 .../org/apache/inlong/agent/metrics/Metric.java    |    63 +
 .../inlong/agent/metrics/MetricException.java      |    29 +
 .../inlong/agent/metrics/MetricSnapshot.java       |    22 +
 .../org/apache/inlong/agent/metrics/Metrics.java   |    52 +
 .../inlong/agent/metrics/MetricsRegister.java      |   146 +
 .../apache/inlong/agent/metrics/MutableMetric.java |    25 +
 .../java/org/apache/inlong/agent/metrics/Tag.java  |    40 +
 .../inlong/agent/metrics/counter/Counter.java      |    36 +
 .../inlong/agent/metrics/counter/CounterInt.java   |    41 +
 .../inlong/agent/metrics/counter/CounterLong.java  |    44 +
 .../apache/inlong/agent/metrics/gauge/Gauge.java   |    50 +
 .../inlong/agent/metrics/gauge/GaugeInt.java       |    57 +
 .../inlong/agent/metrics/gauge/GaugeLong.java      |    57 +
 .../inlong/agent/metrics/meta/MetricMeta.java      |    79 +
 .../inlong/agent/metrics/meta/MetricsMeta.java     |    61 +
 .../org/apache/inlong/agent/plugin/Channel.java    |    54 +
 .../org/apache/inlong/agent/plugin/Filter.java     |    30 +
 .../org/apache/inlong/agent/plugin/Message.java    |    42 +
 .../org/apache/inlong/agent/plugin/Reader.java     |    49 +
 .../java/org/apache/inlong/agent/plugin/Sink.java  |    38 +
 .../org/apache/inlong/agent/plugin/Source.java     |    35 +
 .../java/org/apache/inlong/agent/plugin/Stage.java |    38 +
 .../org/apache/inlong/agent/plugin/Trigger.java    |    57 +
 .../org/apache/inlong/agent/plugin/Validator.java  |    32 +
 .../inlong/agent/state/AbstractStateWrapper.java   |    93 +
 .../java/org/apache/inlong/agent/state/State.java  |    36 +
 .../apache/inlong/agent/state/StateCallback.java   |    26 +
 .../inlong/agent/state/StateTransferException.java |    26 +
 .../apache/inlong/agent/utils/AgentDbUtils.java    |   242 +
 .../org/apache/inlong/agent/utils/AgentUtils.java  |   363 +
 .../org/apache/inlong/agent/utils/ByteUtil.java    |   237 +
 .../apache/inlong/agent/AgentBaseTestsHelper.java  |    65 +
 .../agent/common/TestAgentThreadFactory.java       |    42 +
 .../apache/inlong/agent/common/TestAgentUtils.java |    88 +
 .../inlong/agent/conf/TestConfiguration.java       |    73 +
 .../apache/inlong/agent/db/TestBerkeleyDBImp.java  |   135 +
 .../apache/inlong/agent/metrics/TestMetrics.java   |   113 +
 .../src/test/resources/agent.properties            |    25 +
 .../agent-common/src/test/resources/job.json       |    11 +
 .../agent-common/src/test/resources/job.properties |    23 +
 .../src/test/resources/log4j.properties            |    21 +
 inlong-agent/agent-core/pom.xml                    |    64 +
 .../org/apache/inlong/agent/core/AgentMain.java    |   121 +
 .../org/apache/inlong/agent/core/AgentManager.java |   206 +
 .../apache/inlong/agent/core/conf/ConfigJetty.java |   118 +
 .../inlong/agent/core/conf/ConfigServlet.java      |   107 +
 .../inlong/agent/core/conf/ResponseResult.java     |    49 +
 .../java/org/apache/inlong/agent/core/job/Job.java |   105 +
 .../apache/inlong/agent/core/job/JobManager.java   |   249 +
 .../apache/inlong/agent/core/job/JobMetrics.java   |    47 +
 .../apache/inlong/agent/core/job/JobWrapper.java   |   130 +
 .../org/apache/inlong/agent/core/task/Task.java    |    77 +
 .../apache/inlong/agent/core/task/TaskManager.java |   255 +
 .../apache/inlong/agent/core/task/TaskMetrics.java |    55 +
 .../agent/core/task/TaskPositionManager.java       |   148 +
 .../apache/inlong/agent/core/task/TaskWrapper.java |   198 +
 .../inlong/agent/core/trigger/TriggerManager.java  |   248 +
 .../inlong/agent/core/AgentBaseTestsHelper.java    |    65 +
 .../apache/inlong/agent/core/TestAgentMain.java    |    48 +
 .../inlong/agent/core/TestCompletableFuture.java   |   114 +
 .../apache/inlong/agent/core/TestConfigJetty.java  |   125 +
 .../apache/inlong/agent/task/TestTaskWrapper.java  |   185 +
 .../agent-core/src/test/resources/agent.properties |    22 +
 .../agent-core/src/test/resources/log4j.properties |    20 +
 inlong-agent/agent-plugins/pom.xml                 |   127 +
 .../inlong/agent/plugin/channel/MemoryChannel.java |   111 +
 .../inlong/agent/plugin/except/FileException.java  |    25 +
 .../agent/plugin/fetcher/ManagerFetcher.java       |   409 +
 .../plugin/fetcher/ManagerResultFormatter.java     |   136 +
 .../plugin/fetcher/constants/CommandConstants.java |    57 +
 .../plugin/fetcher/constants/FetcherConstants.java |    54 +
 .../agent/plugin/fetcher/dtos/CmdConfig.java       |    29 +
 .../agent/plugin/fetcher/dtos/CommandInfoDto.java  |    31 +
 .../plugin/fetcher/dtos/ConfirmAgentIpRequest.java |    30 +
 .../agent/plugin/fetcher/dtos/DataConfig.java      |    43 +
 .../agent/plugin/fetcher/dtos/JobProfileDto.java   |    70 +
 .../plugin/fetcher/dtos/ManagerReturnDto.java      |    28 +
 .../agent/plugin/fetcher/dtos/TaskRequsetDto.java  |    30 +
 .../agent/plugin/fetcher/dtos/TaskResult.java      |    43 +
 .../agent/plugin/fetcher/enums/ManagerOpEnum.java  |    62 +
 .../agent/plugin/filter/DateFormatRegex.java       |   134 +
 .../agent/plugin/message/PackProxyMessage.java     |   141 +
 .../inlong/agent/plugin/message/SequentialID.java  |    92 +
 .../inlong/agent/plugin/metrics/PluginMetric.java  |    57 +
 .../inlong/agent/plugin/sinks/ConsoleSink.java     |    51 +
 .../inlong/agent/plugin/sinks/ProxySink.java       |   200 +
 .../inlong/agent/plugin/sinks/PulsarSink.java      |   237 +
 .../inlong/agent/plugin/sinks/SenderManager.java   |   241 +
 .../agent/plugin/sources/DataBaseSource.java       |    67 +
 .../agent/plugin/sources/TextFileSource.java       |    67 +
 .../agent/plugin/sources/reader/SqlReader.java     |   206 +
 .../plugin/sources/reader/TextFileReader.java      |   164 +
 .../inlong/agent/plugin/trigger/CronTrigger.java   |    53 +
 .../agent/plugin/trigger/DirectoryTrigger.java     |   270 +
 .../plugin/trigger/FormatDateDirectoryTrigger.java |    25 +
 .../inlong/agent/plugin/trigger/PathPattern.java   |   181 +
 .../inlong/agent/plugin/utils/HttpManager.java     |   127 +
 .../inlong/agent/plugin/utils/PluginUtils.java     |   156 +
 .../agent/plugin/validator/PatternValidator.java   |    34 +
 .../agent/plugin/validator/PrefixValidator.java    |    34 +
 .../inlong/agent/plugin/AgentBaseTestsHelper.java  |    71 +
 .../org/apache/inlong/agent/plugin/MiniAgent.java  |    64 +
 .../apache/inlong/agent/plugin/TestFileAgent.java  |   133 +
 .../agent/plugin/filter/TestDateFormatRegex.java   |    79 +
 .../apache/inlong/agent/plugin/sinks/MockSink.java |    62 +
 .../agent/plugin/sources/TestTextFileReader.java   |   165 +
 .../agent/plugin/sources/TestTextFileSource.java   |    77 +
 .../agent/plugin/trigger/TestWatchDirTrigger.java  |   146 +
 .../inlong/agent/plugin/utils/TestUtils.java       |    81 +
 .../agent/plugin/validators/TestValidators.java    |    41 +
 .../src/test/resources/fileAgent.trigger.json      |    23 +
 .../src/test/resources/fileAgentJob.json           |    20 +
 .../src/test/resources/log4j.properties            |    21 +
 .../agent-plugins/src/test/resources/test/1.txt    |     2 +
 .../agent-plugins/src/test/resources/test/2.txt    |     2 +
 .../agent-plugins/src/test/resources/test/a.txt    |     2 +
 inlong-agent/agent-release/package.xml             |    61 +
 inlong-agent/agent-release/pom.xml                 |    75 +
 inlong-agent/bin/agent-env.sh                      |    52 +
 inlong-agent/bin/agent.sh                          |   121 +
 inlong-agent/conf/agent.properties                 |   103 +
 inlong-agent/conf/log4j.properties                 |    57 +
 inlong-agent/pom.xml                               |   278 +
 inlong-common/pom.xml                              |   148 +
 .../inlong/commons/msg/AttributeConstants.java     |    74 +
 .../apache/inlong/commons/msg/DataInputBuffer.java |   116 +
 .../inlong/commons/msg/DataOutputBuffer.java       |   133 +
 .../java/org/apache/inlong/commons/msg/TDMsg1.java |  1108 +
 .../inlong/commons/msg/TDMsgAttrBuilder.java       |   457 +
 inlong-dataproxy-sdk/pom.xml                       |   116 +
 .../apache/inlong/dataproxy/ConfigConstants.java   |    69 +
 .../inlong/dataproxy/DefaultMessageSender.java     |   603 +
 .../org/apache/inlong/dataproxy/FileCallback.java  |    42 +
 .../org/apache/inlong/dataproxy/MessageSender.java |   146 +
 .../inlong/dataproxy/MessageSenderFactory.java     |    22 +
 .../apache/inlong/dataproxy/ProxyClientConfig.java |   434 +
 .../inlong/dataproxy/SendMessageCallback.java      |    26 +
 .../org/apache/inlong/dataproxy/SendResult.java    |    31 +
 .../inlong/dataproxy/codec/EncodeObject.java       |   387 +
 .../apache/inlong/dataproxy/codec/ErrorCode.java   |    52 +
 .../inlong/dataproxy/codec/ProtocolDecoder.java    |   117 +
 .../inlong/dataproxy/codec/ProtocolEncoder.java    |   420 +
 .../dataproxy/config/EncryptConfigEntry.java       |   145 +
 .../inlong/dataproxy/config/EncryptInfo.java       |    55 +
 .../apache/inlong/dataproxy/config/HostInfo.java   |    67 +
 .../inlong/dataproxy/config/ProxyConfigEntry.java  |   106 +
 .../dataproxy/config/ProxyConfigManager.java       |   931 +
 .../org/apache/inlong/dataproxy/demo/Event.java    |    96 +
 .../inlong/dataproxy/demo/MyFileCallBack.java      |    59 +
 .../inlong/dataproxy/demo/MyMessageCallBack.java   |    60 +
 .../inlong/dataproxy/demo/SendMsgThread.java       |    74 +
 .../inlong/dataproxy/http/InternalHttpSender.java  |   278 +
 .../inlong/dataproxy/metric/MessageRecord.java     |    77 +
 .../dataproxy/metric/MetricTimeNumSummary.java     |   107 +
 .../inlong/dataproxy/network/ClientHandler.java    |    93 +
 .../apache/inlong/dataproxy/network/ClientMgr.java |   907 +
 .../dataproxy/network/ClientPipelineFactory.java   |    48 +
 .../inlong/dataproxy/network/HttpMessage.java      |    75 +
 .../inlong/dataproxy/network/HttpProxySender.java  |   230 +
 .../inlong/dataproxy/network/NettyClient.java      |   215 +
 .../dataproxy/network/ProxysdkException.java       |    39 +
 .../inlong/dataproxy/network/QueueObject.java      |    65 +
 .../apache/inlong/dataproxy/network/Sender.java    |   694 +
 .../inlong/dataproxy/network/SequentialID.java     |    47 +
 .../dataproxy/network/SyncMessageCallable.java     |    71 +
 .../inlong/dataproxy/network/TimeScanObject.java   |    59 +
 .../org/apache/inlong/dataproxy/network/Utils.java |   188 +
 .../dataproxy/threads/IndexCollectThread.java      |    71 +
 .../dataproxy/threads/ManagerFetcherThread.java    |    66 +
 .../dataproxy/threads/MetricWorkerThread.java      |   320 +
 .../dataproxy/threads/TimeoutScanThread.java       |   186 +
 .../inlong/dataproxy/utils/ConcurrentHashSet.java  |    45 +
 .../apache/inlong/dataproxy/utils/EncryptUtil.java |   478 +
 .../inlong/dataproxy/utils/MapBackedSet.java       |    74 +
 .../apache/inlong/dataproxy/utils/ProxyUtils.java  |   151 +
 .../dataproxy/utils/ServiceDiscoveryUtils.java     |   292 +
 .../java/org/apache/inlong/dataproxy/AppTest.java  |    51 +
 .../inlong/dataproxy/TestMetricWorkerThread.java   |    69 +
 inlong-dataproxy/bin/flume-ng                      |   379 +
 inlong-dataproxy/bin/prepare_env.sh                |    27 +
 inlong-dataproxy/bin/start.sh                      |    22 +
 inlong-dataproxy/conf/flume.conf                   |   273 +
 inlong-dataproxy/conf/log4j.properties             |   202 +
 inlong-dataproxy/dataproxy-dist/pom.xml            |    71 +
 .../dataproxy-dist/src/main/assembly/bin.xml       |   110 +
 inlong-dataproxy/dataproxy-source/pom.xml          |    46 +
 .../inlong/dataproxy/base/NamedThreadFactory.java  |    44 +
 .../apache/inlong/dataproxy/base/ProxyMessage.java |    82 +
 .../dataproxy/channel/FailoverChannelSelector.java |   143 +
 .../apache/inlong/dataproxy/config/AuthUtils.java  |    62 +
 .../inlong/dataproxy/config/ConfigHolder.java      |   138 +
 .../inlong/dataproxy/config/ConfigManager.java     |   327 +
 .../inlong/dataproxy/config/RemoteConfigJson.java  |    54 +
 .../config/holder/BidPropertiesHolder.java         |    88 +
 .../config/holder/ConfigUpdateCallback.java        |    29 +
 .../dataproxy/config/holder/FileConfigHolder.java  |    94 +
 .../config/holder/MxPropertiesHolder.java          |    57 +
 .../config/holder/PropertiesConfigHolder.java      |   154 +
 .../config/remote/ConfigMessageServlet.java        |   129 +
 .../dataproxy/config/remote/RequestContent.java    |    55 +
 .../dataproxy/config/remote/ResponseResult.java    |    48 +
 .../dataproxy/consts/AttributeConstants.java       |    83 +
 .../inlong/dataproxy/consts/ConfigConstants.java   |   116 +
 .../inlong/dataproxy/consts/StatConstants.java     |    40 +
 .../inlong/dataproxy/exception/ErrorCode.java      |    47 +
 .../dataproxy/exception/MessageIDException.java    |    39 +
 .../apache/inlong/dataproxy/http/StatusCode.java   |    30 +
 .../apache/inlong/dataproxy/sink/EventStat.java    |    64 +
 .../inlong/dataproxy/sink/IdCacheCleaner.java      |    79 +
 .../org/apache/inlong/dataproxy/sink/MetaSink.java |   740 +
 .../dataproxy/source/DefaultServiceDecoder.java    |   519 +
 .../apache/inlong/dataproxy/source/MsgType.java    |    54 +
 .../dataproxy/source/ServerMessageFactory.java     |   148 +
 .../dataproxy/source/ServerMessageHandler.java     |   645 +
 .../inlong/dataproxy/source/ServiceDecoder.java    |    42 +
 .../inlong/dataproxy/source/SimpleTcpSource.java   |   374 +
 .../inlong/dataproxy/utils/NetworkUtils.java       |    75 +
 .../dataproxy-source/src/main/resources/flume.conf |   272 +
 inlong-dataproxy/pom.xml                           |    96 +
 inlong-manager/doc/sql/apache_inlong_manager.sql   |   857 +
 inlong-manager/manager-common/pom.xml              |   174 +
 .../inlong/manager/common/beans/ClusterBean.java   |    40 +
 .../inlong/manager/common/beans/PageRequest.java   |    52 +
 .../inlong/manager/common/beans/PageResult.java    |    90 +
 .../inlong/manager/common/beans/Response.java      |    76 +
 .../manager/common/enums/AuthenticationType.java   |    27 +
 .../inlong/manager/common/enums/BizConstant.java   |    58 +
 .../manager/common/enums/BizErrorCodeEnum.java     |   110 +
 .../manager/common/enums/ConsumptionStatus.java    |    81 +
 .../inlong/manager/common/enums/EntityStatus.java  |   150 +
 .../apache/inlong/manager/common/enums/Env.java    |    64 +
 .../common/enums/FileAgentDataGenerateRule.java    |    54 +
 .../inlong/manager/common/enums/OperationType.java |    39 +
 .../inlong/manager/common/enums/UserTypeEnum.java  |    48 +
 .../manager/common/exceptions/BaseException.java   |    36 +
 .../common/exceptions/BusinessException.java       |    37 +
 .../manager/common/exceptions/JsonException.java   |    44 +
 .../common/pojo/agent/AgentHeartbeatRequest.java   |    36 +
 .../manager/common/pojo/agent/AgentStatus.java     |   300 +
 .../pojo/agent/AgentStatusReportRequest.java       |    36 +
 .../manager/common/pojo/agent/AgentSysConfig.java  |   112 +
 .../common/pojo/agent/AgentSysconfRequest.java     |    36 +
 .../pojo/agent/CheckAgentTaskConfRequest.java      |    34 +
 .../common/pojo/agent/ConfirmAgentIpRequest.java   |    34 +
 .../manager/common/pojo/agent/DataConfig.java      |    69 +
 .../common/pojo/agent/FileAgentCMDConfig.java      |    39 +
 .../common/pojo/agent/FileAgentCommandInfo.java    |   106 +
 .../common/pojo/agent/FileAgentTaskConfig.java     |    83 +
 .../common/pojo/agent/FileAgentTaskInfo.java       |    36 +
 .../common/pojo/agent/HeartbeatMessage.java        |    90 +
 .../common/pojo/business/BusinessApproveInfo.java  |    46 +
 .../common/pojo/business/BusinessCountVO.java      |    42 +
 .../common/pojo/business/BusinessExtInfo.java      |    44 +
 .../manager/common/pojo/business/BusinessInfo.java |   102 +
 .../common/pojo/business/BusinessListVO.java       |    57 +
 .../common/pojo/business/BusinessPageRequest.java  |    43 +
 .../common/pojo/business/BusinessTopicVO.java      |    43 +
 .../common/pojo/business/DataSchemaInfo.java       |    49 +
 .../manager/common/pojo/cluster/ClusterInfo.java   |    58 +
 .../common/pojo/cluster/ClusterRequest.java        |    51 +
 .../common/pojo/cluster/DataProxyClusterInfo.java  |    66 +
 .../pojo/cluster/DataProxyClusterPageRequest.java  |    43 +
 .../pojo/commonserver/CommonDbServerInfo.java      |   105 +
 .../pojo/commonserver/CommonDbServerListVo.java    |    61 +
 .../commonserver/CommonDbServerPageRequest.java    |    43 +
 .../pojo/commonserver/CommonFileServerInfo.java    |    76 +
 .../pojo/commonserver/CommonFileServerListVo.java  |    55 +
 .../commonserver/CommonFileServerPageRequest.java  |    46 +
 .../pojo/dataconsumption/ConsumerProgressInfo.java |   101 +
 .../dataconsumption/ConsumerProgressInfoQuery.java |    73 +
 .../pojo/dataconsumption/ConsumptionInfo.java      |    99 +
 .../pojo/dataconsumption/ConsumptionListVo.java    |    68 +
 .../pojo/dataconsumption/ConsumptionQuery.java     |    78 +
 .../dataconsumption/ConsumptionSaveResponse.java   |    40 +
 .../pojo/dataconsumption/ConsumptionSummary.java   |    48 +
 .../dataconsumption/ConsumptionUpdateInfo.java     |    36 +
 .../pojo/dataproxy/BusinessClusterGroupInfo.java   |    29 +
 .../common/pojo/dataproxy/DataProxyConfig.java     |    31 +
 .../common/pojo/dataproxy/DataProxyIpRequest.java  |    36 +
 .../common/pojo/dataproxy/DataProxyIpResponse.java |    80 +
 .../common/pojo/datasource/SourceDbBasicInfo.java  |    61 +
 .../common/pojo/datasource/SourceDbDetailInfo.java |    88 +
 .../pojo/datasource/SourceDbDetailListVO.java      |    73 +
 .../pojo/datasource/SourceDbDetailPageRequest.java |    46 +
 .../pojo/datasource/SourceFileBasicInfo.java       |    75 +
 .../pojo/datasource/SourceFileDetailInfo.java      |    88 +
 .../pojo/datasource/SourceFileDetailListVO.java    |    69 +
 .../datasource/SourceFileDetailPageRequest.java    |    46 +
 .../pojo/datastorage/BaseStorageClusterInfo.java   |    34 +
 .../common/pojo/datastorage/BaseStorageInfo.java   |    78 +
 .../common/pojo/datastorage/BaseStorageListVO.java |    45 +
 .../pojo/datastorage/StorageApproveInfo.java       |    48 +
 .../pojo/datastorage/StorageClusterInfo.java       |    36 +
 .../common/pojo/datastorage/StorageExtInfo.java    |    50 +
 .../pojo/datastorage/StorageHiveClusterInfo.java   |    50 +
 .../pojo/datastorage/StorageHiveFieldInfo.java     |    60 +
 .../common/pojo/datastorage/StorageHiveInfo.java   |    90 +
 .../common/pojo/datastorage/StorageHiveListVO.java |    54 +
 .../pojo/datastorage/StoragePageRequest.java       |    46 +
 .../pojo/datastorage/StorageSummaryInfo.java       |    48 +
 .../pojo/datastream/DataStreamApproveInfo.java     |    45 +
 .../common/pojo/datastream/DataStreamBaseInfo.java |    35 +
 .../common/pojo/datastream/DataStreamExtInfo.java  |    45 +
 .../pojo/datastream/DataStreamFieldInfo.java       |    61 +
 .../common/pojo/datastream/DataStreamInfo.java     |    94 +
 .../datastream/DataStreamInfoToHiveConfig.java     |   105 +
 .../common/pojo/datastream/DataStreamListVO.java   |    63 +
 .../pojo/datastream/DataStreamPageRequest.java     |    55 +
 .../pojo/datastream/DataStreamSummaryInfo.java     |    56 +
 .../pojo/datastream/FullDataStreamPageRequest.java |    43 +
 .../common/pojo/datastream/FullPageInfo.java       |    55 +
 .../common/pojo/datastream/FullPageUpdateInfo.java |    43 +
 .../manager/common/pojo/query/ColumnInfoBean.java  |    29 +
 .../manager/common/pojo/query/ColumnQueryBean.java |    49 +
 .../manager/common/pojo/query/ConnectionInfo.java  |    40 +
 .../manager/common/pojo/query/DatabaseDetail.java  |    41 +
 .../common/pojo/query/DatabaseQueryBean.java       |    43 +
 .../manager/common/pojo/query/TableQueryBean.java  |    56 +
 .../common/pojo/query/hive/HiveColumnInfoBean.java |    24 +
 .../pojo/query/hive/HiveColumnQueryBean.java       |    37 +
 .../common/pojo/query/hive/HiveTableQueryBean.java |    55 +
 .../manager/common/pojo/sort/StorageForHive.java   |    21 +
 .../pojo/tubemq/AddTubeConsumeGroupRequest.java    |    51 +
 .../common/pojo/tubemq/AddTubeMqTopicRequest.java  |    44 +
 .../common/pojo/tubemq/QueryTubeTopicRequest.java  |    31 +
 .../common/pojo/tubemq/TubeClusterResponse.java    |    78 +
 .../common/pojo/tubemq/TubeManagerResponse.java    |    29 +
 .../inlong/manager/common/pojo/user/LoginUser.java |    36 +
 .../common/pojo/user/PasswordChangeRequest.java    |    32 +
 .../manager/common/pojo/user/UserDetail.java       |    52 +
 .../manager/common/pojo/user/UserDetailListVO.java |    41 +
 .../common/pojo/user/UserDetailPageRequest.java    |    32 +
 .../inlong/manager/common/pojo/user/UserInfo.java  |    51 +
 .../manager/common/pojo/workflow/FilterKey.java    |    55 +
 .../common/pojo/workflow/WorkflowApprover.java     |    69 +
 .../workflow/WorkflowApproverFilterContext.java    |    39 +
 .../pojo/workflow/WorkflowApproverQuery.java       |    58 +
 .../inlong/manager/common/util/AgentConstants.java |    68 +
 .../manager/common/util/CommonBeanUtils.java       |   116 +
 .../inlong/manager/common/util/HttpUtils.java      |   113 +
 .../inlong/manager/common/util/JsonUtils.java      |   168 +
 .../inlong/manager/common/util/LoginUserUtil.java  |    48 +
 .../inlong/manager/common/util/NetworkUtils.java   |    82 +
 .../inlong/manager/common/util/PageUtils.java      |    56 +
 .../inlong/manager/common/util/Preconditions.java  |   113 +
 .../inlong/manager/common/util/SmallTools.java     |   127 +
 inlong-manager/manager-dao/pom.xml                 |   108 +
 .../config/InLongManagerDatasourceConfig.java      |    64 +
 .../apache/inlong/manager/dao/HiveServerDao.java   |   117 +
 .../dao/entity/AgentHeartBeatLogEntity.java        |    33 +
 .../manager/dao/entity/AgentSysConfigEntity.java   |    53 +
 .../inlong/manager/dao/entity/BusinessEntity.java  |    50 +
 .../manager/dao/entity/BusinessExtEntity.java      |    35 +
 .../inlong/manager/dao/entity/CityZoneEntity.java  |    31 +
 .../inlong/manager/dao/entity/CityZoneInfo.java    |    29 +
 .../manager/dao/entity/ClusterInfoEntity.java      |    44 +
 .../manager/dao/entity/CommonDbServerEntity.java   |    54 +
 .../manager/dao/entity/CommonFileServerEntity.java |    45 +
 .../manager/dao/entity/ConsumptionEntity.java      |    47 +
 .../manager/dao/entity/DataProxyClusterEntity.java |    45 +
 .../manager/dao/entity/DataSchemaEntity.java       |    34 +
 .../dao/entity/DataSourceCmdConfigEntity.java      |    37 +
 .../manager/dao/entity/DataStreamEntity.java       |    50 +
 .../manager/dao/entity/DataStreamExtEntity.java    |    36 +
 .../manager/dao/entity/DataStreamFieldEntity.java  |    39 +
 .../manager/dao/entity/OperationLogEntity.java     |    44 +
 .../inlong/manager/dao/entity/RoleEntity.java      |    37 +
 .../manager/dao/entity/SourceDbBasicEntity.java    |    39 +
 .../manager/dao/entity/SourceDbDetailEntity.java   |    48 +
 .../manager/dao/entity/SourceFileBasicEntity.java  |    45 +
 .../manager/dao/entity/SourceFileDetailEntity.java |    50 +
 .../manager/dao/entity/StorageExtEntity.java       |    36 +
 .../dao/entity/StorageHiveClusterEntity.java       |    41 +
 .../manager/dao/entity/StorageHiveEntity.java      |    56 +
 .../manager/dao/entity/StorageHiveFieldEntity.java |    38 +
 .../inlong/manager/dao/entity/TaskDefEntity.java   |    39 +
 .../inlong/manager/dao/entity/TaskEntity.java      |    40 +
 .../manager/dao/entity/TaskFlowDefEntity.java      |    36 +
 .../inlong/manager/dao/entity/TaskFlowEntity.java  |    37 +
 .../inlong/manager/dao/entity/UserEntity.java      |    37 +
 .../manager/dao/entity/UserEntityExample.java      |   801 +
 .../inlong/manager/dao/entity/UserRoleEntity.java  |    37 +
 .../manager/dao/entity/WorkflowApproverEntity.java |    41 +
 .../dao/mapper/AgentHeartBeatLogEntityMapper.java  |    39 +
 .../dao/mapper/AgentSysConfigEntityMapper.java     |    37 +
 .../manager/dao/mapper/BusinessEntityMapper.java   |    60 +
 .../dao/mapper/BusinessExtEntityMapper.java        |    65 +
 .../manager/dao/mapper/ClusterInfoMapper.java      |    45 +
 .../dao/mapper/CommonDbServerEntityMapper.java     |    45 +
 .../dao/mapper/CommonFileServerEntityMapper.java   |    47 +
 .../dao/mapper/ConsumptionEntityMapper.java        |    44 +
 .../dao/mapper/DataProxyClusterEntityMapper.java   |    46 +
 .../manager/dao/mapper/DataSchemaEntityMapper.java |    45 +
 .../mapper/DataSourceCmdConfigEntityMapper.java    |    41 +
 .../manager/dao/mapper/DataStreamEntityMapper.java |    83 +
 .../dao/mapper/DataStreamExtEntityMapper.java      |    66 +
 .../dao/mapper/DataStreamFieldEntityMapper.java    |    56 +
 .../manager/dao/mapper/EventLogEntityMapper.java   |    39 +
 .../dao/mapper/OperationLogEntityMapper.java       |    42 +
 .../dao/mapper/ProcessInstanceEntityMapper.java    |    29 +
 .../manager/dao/mapper/RoleEntityMapper.java       |    37 +
 .../dao/mapper/SourceDbBasicEntityMapper.java      |    58 +
 .../dao/mapper/SourceDbDetailEntityMapper.java     |    61 +
 .../dao/mapper/SourceFileBasicEntityMapper.java    |    54 +
 .../dao/mapper/SourceFileDetailEntityMapper.java   |    86 +
 .../manager/dao/mapper/StorageExtEntityMapper.java |    66 +
 .../dao/mapper/StorageHiveClusterEntityMapper.java |    44 +
 .../dao/mapper/StorageHiveEntityMapper.java        |    84 +
 .../dao/mapper/StorageHiveFieldEntityMapper.java   |    66 +
 .../manager/dao/mapper/TaskDefEntityMapper.java    |    37 +
 .../manager/dao/mapper/TaskEntityMapper.java       |    37 +
 .../dao/mapper/TaskFlowDefEntityMapper.java        |    37 +
 .../manager/dao/mapper/TaskFlowEntityMapper.java   |    37 +
 .../dao/mapper/TaskInstanceEntityMapper.java       |    26 +
 .../manager/dao/mapper/UserEntityMapper.java       |    43 +
 .../manager/dao/mapper/UserRoleEntityMapper.java   |    42 +
 .../dao/mapper/WorkflowApproverEntityMapper.java   |    44 +
 .../src/main/resources/generatorConfig.xml         |   221 +
 .../mappers/AgentHeartBeatLogEntityMapper.xml      |   108 +
 .../mappers/AgentSysConfigEntityMapper.xml         |   353 +
 .../resources/mappers/BusinessEntityMapper.xml     |   417 +
 .../resources/mappers/BusinessExtEntityMapper.xml  |   164 +
 .../main/resources/mappers/ClusterInfoMapper.xml   |   264 +
 .../mappers/CommonDbServerEntityMapper.xml         |   385 +
 .../mappers/CommonFileServerEntityMapper.xml       |   280 +
 .../resources/mappers/ConsumptionEntityMapper.xml  |   371 +
 .../mappers/DataProxyClusterEntityMapper.xml       |   272 +
 .../resources/mappers/DataSchemaEntityMapper.xml   |   132 +
 .../mappers/DataSourceCmdConfigEntityMapper.xml    |   158 +
 .../resources/mappers/DataStreamEntityMapper.xml   |   558 +
 .../mappers/DataStreamExtEntityMapper.xml          |   184 +
 .../mappers/DataStreamFieldEntityMapper.xml        |   249 +
 .../src/main/resources/mappers/EventLogMapper.xml  |   134 +
 .../resources/mappers/OperationLogEntityMapper.xml |   255 +
 .../mappers/ProcessInstanceEntityMapper.xml        |   153 +
 .../main/resources/mappers/RoleEntityMapper.xml    |   148 +
 .../mappers/SourceDbBasicEntityMapper.xml          |   197 +
 .../mappers/SourceDbDetailEntityMapper.xml         |   342 +
 .../mappers/SourceFileBasicEntityMapper.xml        |   270 +
 .../mappers/SourceFileDetailEntityMapper.xml       |   443 +
 .../resources/mappers/StorageExtEntityMapper.xml   |   154 +
 .../mappers/StorageHiveClusterEntityMapper.xml     |   204 +
 .../resources/mappers/StorageHiveEntityMapper.xml  |   460 +
 .../mappers/StorageHiveFieldEntityMapper.xml       |   204 +
 .../main/resources/mappers/TaskDefEntityMapper.xml |   174 +
 .../main/resources/mappers/TaskEntityMapper.xml    |   184 +
 .../resources/mappers/TaskFlowDefEntityMapper.xml  |   138 +
 .../resources/mappers/TaskFlowEntityMapper.xml     |   149 +
 .../resources/mappers/TaskInstanceEntityMapper.xml |   192 +
 .../main/resources/mappers/UserEntityMapper.xml    |   210 +
 .../resources/mappers/UserRoleEntityMapper.xml     |   156 +
 .../mappers/WorkflowApproverEntityMapper.xml       |   229 +
 inlong-manager/manager-openapi/assembly.xml        |    77 +
 inlong-manager/manager-openapi/bin/restart.sh      |    39 +
 inlong-manager/manager-openapi/bin/shutdown.sh     |    40 +
 inlong-manager/manager-openapi/bin/startup.sh      |   137 +
 inlong-manager/manager-openapi/pom.xml             |   194 +
 .../manager/openapi/InLongOpenApiApplication.java  |    36 +
 .../inlong/manager/openapi/aspect/LogAspect.java   |    43 +
 .../manager/openapi/auth/AuthenticationFilter.java |    93 +
 .../openapi/auth/BasicAuthenticationToken.java     |    33 +
 .../openapi/auth/MockAuthenticationToken.java      |    69 +
 .../inlong/manager/openapi/auth/ShiroConfig.java   |    94 +
 .../manager/openapi/auth/WebAuthorizingRealm.java  |    65 +
 .../openapi/config/ControllerExceptionHandler.java |    81 +
 .../manager/openapi/config/RestTemplateConfig.java |   146 +
 .../manager/openapi/config/Swagger2Config.java     |    55 +
 .../openapi/controller/AgentController.java        |   102 +
 .../openapi/controller/DataProxyController.java    |    51 +
 .../src/main/resources/application-dev.yml         |    65 +
 .../src/main/resources/application-prod.yml        |    60 +
 .../src/main/resources/application-test.yml        |    64 +
 .../src/main/resources/application.yml             |    50 +
 .../src/main/resources/logback-spring.xml          |   133 +
 .../manager/openapi/OpenapiApplicationTests.java   |    31 +
 inlong-manager/manager-service/pom.xml             |   336 +
 .../service/core/AgentHeartBeatService.java        |    26 +
 .../service/core/AgentSysConfigService.java        |    27 +
 .../manager/service/core/AgentTaskService.java     |    38 +
 .../manager/service/core/BusinessService.java      |   120 +
 .../manager/service/core/ClusterInfoService.java   |    47 +
 .../service/core/CommonDBServerService.java        |    47 +
 .../service/core/CommonFileServerService.java      |    51 +
 .../manager/service/core/ConsumptionService.java   |   109 +
 .../service/core/DataProxyClusterService.java      |    95 +
 .../manager/service/core/DataSchemaService.java    |    36 +
 .../manager/service/core/DataSourceService.java    |    52 +
 .../manager/service/core/DataStreamService.java    |   182 +
 .../inlong/manager/service/core/RoleService.java   |    35 +
 .../manager/service/core/SourceDbService.java      |   139 +
 .../manager/service/core/SourceFileService.java    |   142 +
 .../manager/service/core/StorageEsService.java     |    21 +
 .../manager/service/core/StorageService.java       |   174 +
 .../inlong/manager/service/core/UserService.java   |    90 +
 .../service/core/WorkflowApproverService.java      |    72 +
 .../manager/service/core/WorkflowEventService.java |    86 +
 .../core/builder/CommonDBServerInfoBuilder.java    |    55 +
 .../core/builder/CommonFileServerInfoBuilder.java  |    45 +
 .../core/impl/AgentHeartBeatServiceImpl.java       |    54 +
 .../core/impl/AgentSysConfigServiceImpl.java       |   147 +
 .../service/core/impl/AgentTaskServiceImpl.java    |   329 +
 .../core/impl/BusinessProcessOperation.java        |   107 +
 .../service/core/impl/BusinessServiceImpl.java     |   372 +
 .../service/core/impl/ClusterInfoServiceImpl.java  |    86 +
 .../core/impl/CommonDBServerServiceImpl.java       |   580 +
 .../core/impl/CommonFileServerServiceImpl.java     |   603 +
 .../service/core/impl/ConsumptionServiceImpl.java  |   253 +
 .../core/impl/DataProxyClusterServiceImpl.java     |   200 +
 .../service/core/impl/DataSchemaServiceImpl.java   |    49 +
 .../service/core/impl/DataStorageServiceImpl.java  |    80 +
 .../service/core/impl/DataStreamServiceImpl.java   |   765 +
 .../service/core/impl/HiveSourceServiceImpl.java   |   195 +
 .../manager/service/core/impl/RoleServiceImpl.java |    47 +
 .../service/core/impl/SourceDbServiceImpl.java     |   366 +
 .../service/core/impl/SourceFileServiceImpl.java   |   367 +
 .../service/core/impl/StorageBaseOperation.java    |   189 +
 .../service/core/impl/StorageHiveOperation.java    |   344 +
 .../service/core/impl/StorageServiceImpl.java      |   375 +
 .../manager/service/core/impl/UserServiceImpl.java |   173 +
 .../core/impl/WorkflowApproverServiceImpl.java     |   171 +
 .../core/impl/WorkflowEventServiceImpl.java        |    86 +
 .../service/core/operationlog/OperationLog.java    |    36 +
 .../core/operationlog/OperationLogPool.java        |    96 +
 .../core/operationlog/OperationLogRecorder.java    |   100 +
 .../hive/CreateHiveTableForAllStreamListener.java  |    72 +
 .../hive/CreateHiveTableForOneStreamListener.java  |    71 +
 .../service/thirdpart/hive/HiveTableOperator.java  |   112 +
 .../hive/builder/HiveAddColumnSqlBuilder.java      |    60 +
 .../hive/builder/HiveChangeColumnBuilder.java      |    52 +
 .../hive/builder/HiveCreateDbSqlBuilder.java       |    36 +
 .../hive/builder/HiveDropDbSqlBuilder.java         |    38 +
 .../hive/builder/HiveDropTableSqlBuilder.java      |    40 +
 .../hive/builder/HiveQueryTableSqlBuilder.java     |    38 +
 .../hive/builder/HiveReplaceColumnSqlBuilder.java  |    62 +
 .../hive/builder/HiveTableCreateSqlBuilder.java    |    73 +
 .../service/thirdpart/hive/builder/SqlBuilder.java |    31 +
 .../mq/CreateTubeTopicTaskEventListener.java       |    80 +
 .../service/thirdpart/mq/TubeMqOptService.java     |   114 +
 .../sort/PushHiveConfigToSortEventListener.java    |   185 +
 .../thirdpart/sort/SortFieldFormatUtils.java       |    73 +
 .../service/workflow/BaseWorkflowFormType.java     |    43 +
 .../service/workflow/BaseWorkflowTaskFormType.java |    39 +
 .../manager/service/workflow/ProcessName.java      |    54 +
 .../service/workflow/WorkflowDefinition.java       |    41 +
 .../service/workflow/WorkflowEngineConfig.java     |    88 +
 .../service/workflow/WorkflowOperation.java        |    53 +
 .../manager/service/workflow/WorkflowResult.java   |    57 +
 .../manager/service/workflow/WorkflowService.java  |   151 +
 .../service/workflow/WorkflowServiceImpl.java      |   251 +
 .../service/workflow/WorkflowTaskExecuteLog.java   |   181 +
 .../workflow/WorkflowTaskExecuteLogQuery.java      |    43 +
 .../service/workflow/WorkflowTaskOperation.java    |    45 +
 .../CreateResourceWorkflowDefinition.java          |   155 +
 .../newbusiness/CreateResourceWorkflowForm.java    |    81 +
 .../newbusiness/NewBusinessApproveForm.java        |    59 +
 .../newbusiness/NewBusinessWorkflowDefinition.java |   110 +
 .../newbusiness/NewBusinessWorkflowForm.java       |    68 +
 .../newbusiness/listener/ApproveTaskListener.java  |    75 +
 .../listener/CancelProcessListener.java            |    61 +
 .../listener/CompleteProcessListener.java          |    66 +
 .../CreateResourceCompleteProcessListener.java     |    65 +
 .../CreateResourceFailedProcessListener.java       |    65 +
 .../listener/InitBusinessInfoListener.java         |    63 +
 .../listener/RejectProcessListener.java            |    61 +
 .../StartCreateResourceProcessListener.java        |    71 +
 .../newconsumption/NewConsumptionApproveForm.java  |    49 +
 .../NewConsumptionProcessDetailHandler.java        |    51 +
 .../NewConsumptionWorkflowDefinition.java          |   145 +
 .../newconsumption/NewConsumptionWorkflowForm.java |    63 +
 .../listener/ApproveTaskEventListener.java         |    72 +
 .../listener/CancelProcessEventListener.java       |    74 +
 .../listener/CompleteProcessEventListener.java     |   143 +
 .../listener/RejectProcessEventListener.java       |    74 +
 .../InitBusinessInfoForStreamListener.java         |    63 +
 .../SingleStreamCompleteProcessListener.java       |    64 +
 .../SingleStreamFailedProcessListener.java         |    63 +
 .../newstream/SingleStreamWorkflowDefinition.java  |   118 +
 inlong-manager/manager-web/assembly.xml            |    77 +
 inlong-manager/manager-web/bin/restart.sh          |    39 +
 inlong-manager/manager-web/bin/shutdown.sh         |    41 +
 inlong-manager/manager-web/bin/startup.sh          |   137 +
 inlong-manager/manager-web/pom.xml                 |   253 +
 .../inlong/manager/web/InLongWebApplication.java   |    37 +
 .../inlong/manager/web/aspect/LogAspect.java       |    45 +
 .../manager/web/auth/AuthenticationFilter.java     |   107 +
 .../inlong/manager/web/auth/ShiroConfig.java       |   109 +
 .../manager/web/auth/WebAuthorizingRealm.java      |    64 +
 .../web/config/ControllerExceptionHanlder.java     |   130 +
 .../manager/web/config/RestTemplateConfig.java     |   147 +
 .../inlong/manager/web/config/Swagger2Config.java  |    55 +
 .../manager/web/controller/AnnoController.java     |    70 +
 .../web/controller/BasicInfoController.java        |    60 +
 .../manager/web/controller/BusinessController.java |   119 +
 .../manager/web/controller/ClusterController.java  |    99 +
 .../web/controller/CommonDBServerController.java   |   289 +
 .../web/controller/CommonFileServerController.java |   307 +
 .../web/controller/ConsumptionController.java      |   120 +
 .../web/controller/DataStreamController.java       |   138 +
 .../manager/web/controller/SourceDbController.java |   125 +
 .../web/controller/SourceFileController.java       |   127 +
 .../manager/web/controller/StorageController.java  |   136 +
 .../web/controller/ThirdPartController.java        |    62 +
 .../manager/web/controller/UserController.java     |    97 +
 .../web/controller/WorkflowApproverController.java |    82 +
 .../manager/web/controller/WorkflowController.java |   169 +
 .../web/controller/WorkflowEventController.java    |   113 +
 .../src/main/resources/application-dev.yml         |    64 +
 .../src/main/resources/application-prod.yml        |    60 +
 .../src/main/resources/application-test.yml        |    64 +
 .../manager-web/src/main/resources/application.yml |    64 +
 .../main/resources/common_db_server_template.csv   |     2 +
 .../main/resources/common_file_server_template.csv |     2 +
 .../src/main/resources/logback-spring.xml          |   133 +
 .../org/apache/inlong/manager/web/UtilsTest.java   |    97 +
 .../inlong/manager/web/WebApplicationTests.java    |    31 +
 inlong-manager/manager-workflow-engine/pom.xml     |    82 +
 .../workflow/core/EventListenerService.java        |    68 +
 .../workflow/core/ProcessDefinitionService.java    |    41 +
 .../workflow/core/ProcessDefinitionStorage.java    |    49 +
 .../manager/workflow/core/ProcessService.java      |    49 +
 .../inlong/manager/workflow/core/QueryService.java |   120 +
 .../inlong/manager/workflow/core/TaskService.java  |    70 +
 .../manager/workflow/core/TransactionHelper.java   |   100 +
 .../workflow/core/WorkflowContextBuilder.java      |    96 +
 .../workflow/core/WorkflowDataAccessor.java        |    57 +
 .../manager/workflow/core/WorkflowEngine.java      |    68 +
 .../workflow/core/WorkflowProcessorExecutor.java   |    46 +
 .../manager/workflow/core/event/EventListener.java |    70 +
 .../workflow/core/event/EventListenerManager.java  |    67 +
 .../workflow/core/event/EventListenerNotifier.java |    43 +
 .../workflow/core/event/EventListenerRegister.java |    30 +
 .../workflow/core/event/ListenerResult.java        |    75 +
 .../workflow/core/event/LogableEventListener.java  |   124 +
 .../manager/workflow/core/event/WorkflowEvent.java |    32 +
 .../event/process/LogableProcessEventListener.java |    33 +
 .../workflow/core/event/process/ProcessEvent.java  |    56 +
 .../core/event/process/ProcessEventListener.java   |    35 +
 .../event/process/ProcessEventListenerManager.java |    92 +
 .../process/ProcessEventListenerRegister.java      |    48 +
 .../core/event/process/ProcessEventNotifier.java   |   112 +
 .../core/event/task/LogableTaskEventListener.java  |    53 +
 .../workflow/core/event/task/TaskEvent.java        |    65 +
 .../core/event/task/TaskEventListener.java         |    33 +
 .../core/event/task/TaskEventListenerManager.java  |    92 +
 .../core/event/task/TaskEventListenerRegister.java |    47 +
 .../core/event/task/TaskEventNotifier.java         |   115 +
 .../core/impl/EventListenerServiceImpl.java        |   143 +
 .../core/impl/MemoryProcessDefinitionStorage.java  |    67 +
 .../core/impl/ProcessDefinitionServiceImpl.java    |    51 +
 .../workflow/core/impl/ProcessServiceImpl.java     |    86 +
 .../workflow/core/impl/QueryServiceImpl.java       |   277 +
 .../workflow/core/impl/TaskServiceImpl.java        |    79 +
 .../core/impl/WorkflowContextBuilderImpl.java      |   147 +
 .../core/impl/WorkflowDataAccessorImpl.java        |    66 +
 .../workflow/core/impl/WorkflowEngineImpl.java     |   133 +
 .../core/impl/WorkflowEventListenerManager.java    |    44 +
 .../workflow/core/impl/WorkflowEventNotifier.java  |    44 +
 .../WorkflowInternalEventListenerRegister.java     |    57 +
 .../core/impl/WorkflowProcessorExecutorImpl.java   |   162 +
 .../AbstractNextableElementProcessor.java          |    65 +
 .../core/processor/AbstractTaskProcessor.java      |    69 +
 .../workflow/core/processor/EndEventProcessor.java |   128 +
 .../core/processor/ServiceTaskProcessor.java       |   139 +
 .../core/processor/SkipAbleElementProcessor.java   |    35 +
 .../core/processor/StartEventProcessor.java        |   100 +
 .../workflow/core/processor/UserTaskProcessor.java |   241 +
 .../core/processor/WorkflowElementProcessor.java   |    67 +
 .../manager/workflow/dao/EventLogStorage.java      |    37 +
 .../workflow/dao/ProcessInstanceStorage.java       |    47 +
 .../manager/workflow/dao/TaskInstanceStorage.java  |    48 +
 .../workflow/exception/FormParseException.java     |    45 +
 .../workflow/exception/FormValidateException.java  |    25 +
 .../workflow/exception/WorkflowException.java      |    45 +
 .../exception/WorkflowListenerException.java       |    45 +
 .../exception/WorkflowNoRollbackException.java     |    45 +
 .../exception/WorkflowRollbackOnceException.java   |    45 +
 .../inlong/manager/workflow/model/Action.java      |   117 +
 .../inlong/manager/workflow/model/EventState.java  |    64 +
 .../manager/workflow/model/ProcessState.java       |    48 +
 .../inlong/manager/workflow/model/TaskState.java   |    82 +
 .../manager/workflow/model/WorkflowConfig.java     |    55 +
 .../manager/workflow/model/WorkflowContext.java    |   222 +
 .../workflow/model/definition/ApproverAssign.java  |    43 +
 .../model/definition/ConditionNextElement.java     |    60 +
 .../manager/workflow/model/definition/Element.java |    47 +
 .../workflow/model/definition/EndEvent.java        |    34 +
 .../model/definition/FixedApproverAssign.java      |    50 +
 .../manager/workflow/model/definition/Form.java    |    40 +
 .../workflow/model/definition/NextableElement.java |   112 +
 .../manager/workflow/model/definition/Process.java |   136 +
 .../model/definition/ProcessDetailHandler.java     |    36 +
 .../workflow/model/definition/ProcessForm.java     |    53 +
 .../workflow/model/definition/ServiceTask.java     |    62 +
 .../workflow/model/definition/SkipResolver.java    |    38 +
 .../model/definition/SkippableElement.java         |    34 +
 .../workflow/model/definition/StartEvent.java      |    59 +
 .../manager/workflow/model/definition/Task.java    |    88 +
 .../workflow/model/definition/TaskForm.java        |    26 +
 .../workflow/model/definition/UserTask.java        |    73 +
 .../manager/workflow/model/instance/EventLog.java  |   227 +
 .../workflow/model/instance/ProcessInstance.java   |   208 +
 .../workflow/model/instance/TaskInstance.java      |   253 +
 .../manager/workflow/model/view/CountByKey.java    |    30 +
 .../manager/workflow/model/view/ElementView.java   |    94 +
 .../manager/workflow/model/view/EventLogQuery.java |    96 +
 .../manager/workflow/model/view/EventLogView.java  |   118 +
 .../manager/workflow/model/view/PageQuery.java     |    34 +
 .../manager/workflow/model/view/ProcessDetail.java |    79 +
 .../workflow/model/view/ProcessListView.java       |   120 +
 .../manager/workflow/model/view/ProcessQuery.java  |    90 +
 .../workflow/model/view/ProcessSummaryQuery.java   |    66 +
 .../workflow/model/view/ProcessSummaryView.java    |    51 +
 .../manager/workflow/model/view/ProcessView.java   |   124 +
 .../manager/workflow/model/view/TaskListView.java  |   142 +
 .../manager/workflow/model/view/TaskQuery.java     |    87 +
 .../workflow/model/view/TaskSummaryQuery.java      |    75 +
 .../workflow/model/view/TaskSummaryView.java       |    48 +
 .../manager/workflow/model/view/TaskView.java      |   149 +
 .../manager/workflow/model/view/WorkflowView.java  |    76 +
 .../workflow/util/WorkflowFormParserUtils.java     |    84 +
 inlong-manager/pom.xml                             |   292 +
 inlong-sort/README.md                              |    35 +
 inlong-sort/api/pom.xml                            |    53 +
 .../main/java/org/apache/inlong/sort/ZkTools.java  |   143 +
 inlong-sort/common/pom.xml                         |    75 +
 .../inlong/sort/configuration/ConfigOption.java    |   270 +
 .../inlong/sort/configuration/ConfigOptions.java   |   120 +
 .../inlong/sort/configuration/Configuration.java   |   915 +
 .../inlong/sort/configuration/Constants.java       |   224 +
 .../inlong/sort/configuration/FallbackKey.java     |    82 +
 .../apache/inlong/sort/protocol/DataFlowInfo.java  |    65 +
 .../inlong/sort/protocol/DataFlowStorageInfo.java  |    71 +
 .../org/apache/inlong/sort/protocol/FieldInfo.java |    47 +
 .../deserialization/CsvDeserializationInfo.java    |    42 +
 .../deserialization/DeserializationInfo.java       |    38 +
 .../deserialization/KvDeserializationInfo.java     |    51 +
 .../TDMsgCsv2DeserializationInfo.java              |    44 +
 .../TDMsgCsvDeserializationInfo.java               |    62 +
 .../deserialization/TDMsgDeserializationInfo.java  |    55 +
 .../TDMsgKvDeserializationInfo.java                |    52 +
 .../TDMsgTlogCsvDeserializationInfo.java           |    44 +
 .../TDMsgTlogKvDeserializationInfo.java            |    61 +
 .../sort/protocol/sink/ClickHouseSinkInfo.java     |   160 +
 .../inlong/sort/protocol/sink/HiveSinkInfo.java    |   252 +
 .../apache/inlong/sort/protocol/sink/SinkInfo.java |    56 +
 .../sort/protocol/source/PulsarSourceInfo.java     |    74 +
 .../inlong/sort/protocol/source/SourceInfo.java    |    66 +
 .../sort/protocol/source/TubeSourceInfo.java       |    75 +
 .../apache/inlong/sort/util/InstantiationUtil.java |   268 +
 .../org/apache/inlong/sort/util/TestLogger.java    |    86 +
 .../apache/inlong/sort/util/ZooKeeperUtils.java    |   266 +
 .../sort/configuration/ConfigOptionTest.java       |   118 +
 .../sort/configuration/ConfigurationTest.java      |   462 +
 .../sort/protocol/DeserializationInfoTest.java     |    36 +
 .../apache/inlong/sort/protocol/FieldInfoTest.java |    35 +
 inlong-sort/core/pom.xml                           |   211 +
 .../org/apache/inlong/sort/flink/Entrance.java     |    95 +
 .../java/org/apache/inlong/sort/flink/Record.java  |    78 +
 .../apache/inlong/sort/flink/SerializedRecord.java |    57 +
 .../inlong/sort/flink/TDMsgSerializedRecord.java   |    50 +
 .../clickhouse/ClickHouseConnectionProvider.java   |   172 +
 .../clickhouse/ClickHouseMultiSinkFunction.java    |   165 +
 .../flink/clickhouse/ClickHouseRowConverter.java   |    90 +
 .../flink/clickhouse/ClickHouseSinkFunction.java   |    86 +
 .../clickhouse/ClickHouseStatementFactory.java     |    73 +
 .../executor/ClickHouseAppendExecutor.java         |   145 +
 .../clickhouse/executor/ClickHouseExecutor.java    |    38 +
 .../executor/ClickHouseExecutorFactory.java        |    43 +
 .../executor/ClickHouseUpsertExecutor.java         |   182 +
 .../output/AbstractClickHouseOutputFormat.java     |    36 +
 .../output/ClickHouseBatchOutputFormat.java        |   123 +
 .../output/ClickHouseOutputFormatFactory.java      |    86 +
 .../output/ClickHouseShardOutputFormat.java        |   174 +
 .../clickhouse/partitioner/BalancePartitioner.java |    34 +
 .../partitioner/ClickHousePartitioner.java         |    28 +
 .../clickhouse/partitioner/HashPartitioner.java    |    40 +
 .../clickhouse/partitioner/RandomPartitioner.java  |    33 +
 .../flink/deserialization/CallbackCollector.java   |    50 +
 .../deserialization/DeserializationSchema.java     |   132 +
 .../sort/flink/deserialization/Deserializer.java   |    24 +
 .../MultiTenancyTDMsgMixedDeserializer.java        |   151 +
 .../deserialization/TDMsgMixedDeserializer.java    |   113 +
 .../inlong/sort/flink/filesystem/Bucket.java       |   399 +
 .../sort/flink/filesystem/BucketAssigner.java      |    77 +
 .../sort/flink/filesystem/BucketFactory.java       |    47 +
 .../inlong/sort/flink/filesystem/BucketState.java  |   118 +
 .../flink/filesystem/BucketStateSerializer.java    |   168 +
 .../inlong/sort/flink/filesystem/Buckets.java      |   364 +
 .../sort/flink/filesystem/BulkPartWriter.java      |   103 +
 .../flink/filesystem/DefaultBucketFactoryImpl.java |    70 +
 .../flink/filesystem/DefaultRollingPolicy.java     |   140 +
 .../inlong/sort/flink/filesystem/PartFileInfo.java |    47 +
 .../sort/flink/filesystem/PartFileWriter.java      |   130 +
 .../sort/flink/filesystem/RollingPolicy.java       |    54 +
 .../sort/flink/filesystem/StreamingFileSink.java   |   220 +
 .../inlong/sort/flink/hive/HiveCommitter.java      |   114 +
 .../sort/flink/hive/HiveMultiTenantCommitter.java  |   161 +
 .../sort/flink/hive/HiveMultiTenantWriter.java     |   201 +
 .../flink/hive/HivePartitionBucketAssigner.java    |    49 +
 .../inlong/sort/flink/hive/HiveSinkHelper.java     |    74 +
 .../apache/inlong/sort/flink/hive/HiveWriter.java  |   207 +
 .../sort/flink/hive/formats/ParquetRowWriter.java  |   181 +
 .../hive/formats/ParquetRowWriterBuilder.java      |   113 +
 .../flink/hive/formats/ParquetSchemaConverter.java |   615 +
 .../sort/flink/hive/formats/TextRowWriter.java     |    77 +
 .../sort/flink/hive/partition/HivePartition.java   |    97 +
 .../partition/JdbcHivePartitionCommitPolicy.java   |   121 +
 .../hive/partition/JdbcHivePartitionTool.java      |    86 +
 .../flink/hive/partition/PartitionCommitInfo.java  |    63 +
 .../hive/partition/PartitionCommitPolicy.java      |    62 +
 .../flink/hive/partition/PartitionComputer.java    |    49 +
 .../flink/hive/partition/PartitionPathUtils.java   |    74 +
 .../flink/hive/partition/RowPartitionComputer.java |   133 +
 .../MultiTenantFunctionInitializationContext.java  |   133 +
 .../transformation/FieldMappingTransformer.java    |   107 +
 .../flink/transformation/RecordTransformer.java    |   147 +
 .../flink/tubemq/MultiTenancyTubeConsumer.java     |   425 +
 .../flink/tubemq/MultiTopicTubeSourceFunction.java |   343 +
 .../flink/tubemq/TubeSubscriptionDescription.java  |   203 +
 .../org/apache/inlong/sort/meta/MetaManager.java   |   280 +
 .../org/apache/inlong/sort/util/CommonUtils.java   |    86 +
 .../apache/inlong/sort/util/CountBasedSampler.java |    51 +
 .../org/apache/inlong/sort/util/ParameterTool.java |   581 +
 .../java/org/apache/inlong/sort/util/Sampler.java  |    33 +
 .../org/apache/inlong/sort/util/TestingUtils.java  |    86 +
 .../apache/inlong/sort/util/ZookeeperWatcher.java  |   340 +
 .../MultiTenancyTDMsgMixedDeserializerTest.java    |   102 +
 .../TDMsgMixedDeserializerTest.java                |   154 +
 .../inlong/sort/flink/hive/HiveSinkITCase.java     |   463 +
 .../FieldMappingTransformerTest.java               |    64 +
 .../transformation/RecordTransformerTest.java      |   191 +
 .../flink/tubemq/MultiTenancyTubeConsumerTest.java |   296 +
 .../tubemq/MultiTopicTubeSourceFunctionTest.java   |   186 +
 .../tubemq/TubeSubscriptionDescriptionTest.java    |   104 +
 .../apache/inlong/sort/meta/MetaManagerTest.java   |   181 +
 .../inlong/sort/util/ZooKeeperTestEnvironment.java |   158 +
 .../core/src/test/resources/log4j-test.properties  |    26 +
 inlong-sort/dist/pom.xml                           |    49 +
 inlong-sort/formats/format-base/pom.xml            |    67 +
 .../base/DefaultTableFormatDeserializer.java       |   119 +
 .../formats/base/DefaultTableFormatSerializer.java |   111 +
 .../ProjectedDeserializationSchemaFactory.java     |    45 +
 .../base/ProjectedSerializationSchemaFactory.java  |    45 +
 .../sort/formats/base/TableFormatConstants.java    |    41 +
 .../sort/formats/base/TableFormatDeserializer.java |    30 +
 .../base/TableFormatDeserializerFactory.java       |    41 +
 .../sort/formats/base/TableFormatSerializer.java   |    29 +
 .../formats/base/TableFormatSerializerFactory.java |    41 +
 .../inlong/sort/formats/base/TableFormatUtils.java |   591 +
 .../TableFormatUtilsTest.java                      |   233 +
 inlong-sort/formats/format-common/pom.xml          |    43 +
 .../sort/formats/common/ArrayFormatInfo.java       |    83 +
 .../inlong/sort/formats/common/ArrayTypeInfo.java  |    77 +
 .../sort/formats/common/BasicFormatInfo.java       |    43 +
 .../sort/formats/common/BooleanFormatInfo.java     |    63 +
 .../sort/formats/common/BooleanTypeInfo.java       |    48 +
 .../inlong/sort/formats/common/ByteFormatInfo.java |    63 +
 .../inlong/sort/formats/common/ByteTypeInfo.java   |    48 +
 .../inlong/sort/formats/common/DateFormatInfo.java |   157 +
 .../inlong/sort/formats/common/DateTypeInfo.java   |    48 +
 .../sort/formats/common/DecimalFormatInfo.java     |    65 +
 .../sort/formats/common/DecimalTypeInfo.java       |    48 +
 .../sort/formats/common/DoubleFormatInfo.java      |    63 +
 .../inlong/sort/formats/common/DoubleTypeInfo.java |    48 +
 .../sort/formats/common/FloatFormatInfo.java       |    63 +
 .../inlong/sort/formats/common/FloatTypeInfo.java  |    48 +
 .../inlong/sort/formats/common/FormatInfo.java     |    56 +
 .../inlong/sort/formats/common/FormatUtils.java    |    74 +
 .../inlong/sort/formats/common/IntFormatInfo.java  |    63 +
 .../inlong/sort/formats/common/IntTypeInfo.java    |    48 +
 .../inlong/sort/formats/common/LongFormatInfo.java |    63 +
 .../inlong/sort/formats/common/LongTypeInfo.java   |    48 +
 .../inlong/sort/formats/common/MapFormatInfo.java  |   101 +
 .../inlong/sort/formats/common/MapTypeInfo.java    |    93 +
 .../inlong/sort/formats/common/RowFormatInfo.java  |   124 +
 .../inlong/sort/formats/common/RowTypeInfo.java    |   114 +
 .../sort/formats/common/ShortFormatInfo.java       |    63 +
 .../inlong/sort/formats/common/ShortTypeInfo.java  |    48 +
 .../sort/formats/common/StringFormatInfo.java      |    63 +
 .../inlong/sort/formats/common/StringTypeInfo.java |    48 +
 .../inlong/sort/formats/common/TimeFormatInfo.java |   157 +
 .../inlong/sort/formats/common/TimeTypeInfo.java   |    48 +
 .../sort/formats/common/TimestampFormatInfo.java   |   158 +
 .../sort/formats/common/TimestampTypeInfo.java     |    48 +
 .../inlong/sort/formats/common/TypeInfo.java       |    48 +
 .../inlong/sort/formats/util/StringUtils.java      |   414 +
 .../sort/formats/common/ArrayFormatInfoTest.java   |    49 +
 .../sort/formats/common/BooleanFormatInfoTest.java |    46 +
 .../sort/formats/common/ByteFormatInfoTest.java    |    46 +
 .../sort/formats/common/DateFormatInfoTest.java    |    66 +
 .../sort/formats/common/DecimalFormatInfoTest.java |    57 +
 .../sort/formats/common/DoubleFormatInfoTest.java  |    52 +
 .../sort/formats/common/FloatFormatInfoTest.java   |    52 +
 .../sort/formats/common/FormatInfoTestBase.java    |    53 +
 .../sort/formats/common/IntFormatInfoTest.java     |    52 +
 .../sort/formats/common/LongFormatInfoTest.java    |    52 +
 .../sort/formats/common/MapFormatInfoTest.java     |    54 +
 .../sort/formats/common/RowFormatInfoTest.java     |    92 +
 .../sort/formats/common/ShortFormatInfoTest.java   |    52 +
 .../sort/formats/common/StringFormatInfoTest.java  |    46 +
 .../sort/formats/common/TimeFormatInfoTest.java    |    66 +
 .../formats/common/TimestampFormatInfoTest.java    |    66 +
 inlong-sort/formats/format-csv/pom.xml             |   116 +
 .../org/apache/inlong/sort/formats/csv/Csv.java    |   143 +
 .../sort/formats/csv/CsvDeserializationSchema.java |   240 +
 .../inlong/sort/formats/csv/CsvFormatFactory.java  |   250 +
 .../sort/formats/csv/CsvSerializationSchema.java   |   221 +
 .../inlong/sort/formats/csv/CsvValidator.java      |    41 +
 .../org.apache.flink.table.factories.TableFactory  |    33 +
 .../formats/csv/CsvDeserializationSchemaTest.java  |   240 +
 .../sort/formats/csv/CsvFormatFactoryTest.java     |   314 +
 .../formats/csv/CsvSerializationSchemaTest.java    |   212 +
 .../apache/inlong/sort/formats/csv/CsvTest.java    |   117 +
 .../inlong/sort/formats/csv/CsvUtilsTest.java      |   126 +
 .../src/test/resources/log4j-test.properties       |    22 +
 inlong-sort/formats/format-kv/pom.xml              |   116 +
 .../java/org/apache/inlong/sort/formats/kv/Kv.java |   149 +
 .../sort/formats/kv/KvDeserializationSchema.java   |   257 +
 .../inlong/sort/formats/kv/KvFormatFactory.java    |   257 +
 .../sort/formats/kv/KvSerializationSchema.java     |   249 +
 .../apache/inlong/sort/formats/kv/KvValidator.java |    42 +
 .../org.apache.flink.table.factories.TableFactory  |    33 +
 .../formats/kv/KvDeserializationSchemaTest.java    |   256 +
 .../sort/formats/kv/KvFormatFactoryTest.java       |   323 +
 .../sort/formats/kv/KvSerializationSchemaTest.java |   212 +
 .../org/apache/inlong/sort/formats/kv/KvTest.java  |   121 +
 .../apache/inlong/sort/formats/kv/KvUtilsTest.java |   234 +
 .../src/test/resources/log4j-test.properties       |    22 +
 inlong-sort/formats/format-tdmsg-base/pom.xml      |   127 +
 .../tdmsg/AbstractTDMsgFormatDeserializer.java     |   148 +
 .../AbstractTDMsgMixedFormatDeserializer.java      |    32 +
 .../inlong/sort/formats/tdmsg/TDMsgBody.java       |   106 +
 .../inlong/sort/formats/tdmsg/TDMsgHead.java       |   114 +
 .../formats/tdmsg/TDMsgMixedFormatConverter.java   |    31 +
 .../formats/tdmsg/TDMsgMixedFormatFactory.java     |    52 +
 .../sort/formats/tdmsg/TDMsgMixedValidator.java    |    41 +
 .../inlong/sort/formats/tdmsg/TDMsgUtils.java      |   289 +
 .../inlong/sort/formats/tdmsg/TDMsgValidator.java  |    44 +
 inlong-sort/formats/format-tdmsg-csv/pom.xml       |   130 +
 .../inlong/sort/formats/tdmsgcsv/TDMsgCsv.java     |   175 +
 .../tdmsgcsv/TDMsgCsvFormatDeserializer.java       |   204 +
 .../formats/tdmsgcsv/TDMsgCsvFormatFactory.java    |   230 +
 .../tdmsgcsv/TDMsgCsvMixedFormatConverter.java     |   140 +
 .../tdmsgcsv/TDMsgCsvMixedFormatDeserializer.java  |   151 +
 .../sort/formats/tdmsgcsv/TDMsgCsvUtils.java       |   193 +
 .../org.apache.flink.table.factories.TableFactory  |    33 +
 .../tdmsgcsv/TDMsgCsvFormatDeserializerTest.java   |   507 +
 .../tdmsgcsv/TDMsgCsvFormatFactoryTest.java        |   127 +
 .../inlong/sort/formats/tdmsgcsv/TDMsgCsvTest.java |   128 +
 .../src/test/resources/log4j-test.properties       |    22 +
 inlong-sort/formats/pom.xml                        |   243 +
 inlong-sort/pom.xml                                |   329 +
 inlong-sort/quick_start.md                         |    60 +
 CHANGES.md => inlong-tubemq/CHANGES.md             |     0
 inlong-tubemq/bin/broker.cmd                       |    28 +
 inlong-tubemq/bin/env.cmd                          |    31 +
 {bin => inlong-tubemq/bin}/env.sh                  |     0
 inlong-tubemq/bin/groupAdmin.sh                    |    43 +
 inlong-tubemq/bin/indexReBuilder.sh                |    56 +
 inlong-tubemq/bin/master.cmd                       |    28 +
 inlong-tubemq/bin/tubemq-broker-admin.sh           |    40 +
 inlong-tubemq/bin/tubemq-consumer-test.sh          |    40 +
 inlong-tubemq/bin/tubemq-producer-test.sh          |    40 +
 inlong-tubemq/bin/tubemq.sh                        |   178 +
 {conf => inlong-tubemq/conf}/broker.ini            |     0
 {conf => inlong-tubemq/conf}/log4j.properties      |     0
 {conf => inlong-tubemq/conf}/master.ini            |     0
 .../conf}/master.log4j.properties                  |     0
 .../conf}/tools.log4j.properties                   |     0
 inlong-tubemq/pom.xml                              |   370 +
 .../css/dataTables.bootstrap.css                   |     0
 .../css/dataTables.bootstrap.min.css               |     0
 .../css/dataTables.foundation.css                  |     0
 .../css/dataTables.foundation.min.css              |     0
 .../DataTables-1.10.11/css/dataTables.jqueryui.css |     0
 .../css/dataTables.jqueryui.min.css                |     0
 .../DataTables-1.10.11/css/jquery.dataTables.css   |     0
 .../css/jquery.dataTables.min.css                  |     0
 .../css/jquery.dataTables_themeroller.css          |     0
 .../DataTables-1.10.11/images/sort_asc.png         |   Bin
 .../images/sort_asc_disabled.png                   |   Bin
 .../DataTables-1.10.11/images/sort_both.png        |   Bin
 .../DataTables-1.10.11/images/sort_desc.png        |   Bin
 .../images/sort_desc_disabled.png                  |   Bin
 .../DataTables-1.10.11/js/dataTables.bootstrap.js  |     0
 .../js/dataTables.bootstrap.min.js                 |     0
 .../DataTables-1.10.11/js/dataTables.foundation.js |     0
 .../js/dataTables.foundation.min.js                |     0
 .../DataTables-1.10.11/js/dataTables.jqueryui.js   |     0
 .../js/dataTables.jqueryui.min.js                  |     0
 .../DataTables-1.10.11/js/jquery.dataTables.js     |     0
 .../DataTables-1.10.11/js/jquery.dataTables.min.js |     0
 .../assets/lib/DataTables/datatables.css           |     0
 .../resources}/assets/lib/DataTables/datatables.js |     0
 .../assets/lib/DataTables/datatables.min.css       |     0
 .../assets/lib/DataTables/datatables.min.js        |     0
 .../lib/DataTables/jQuery-1.12.0/jquery-1.12.0.js  |     0
 .../DataTables/jQuery-1.12.0/jquery-1.12.0.min.js  |     0
 .../resources}/assets/lib/jquery.min.js            |     0
 .../resources}/assets/public/css/fonts/icon.svg    |     0
 .../resources}/assets/public/css/ie.css            |     0
 .../resources}/assets/public/css/ie.css.map        |     0
 .../resources}/assets/public/css/style.css         |     0
 .../resources}/assets/public/css/style.css.map     |     0
 .../assets/public/img/base-s2db5071204.png         |   Bin
 .../resources}/assets/public/img/base.png          |   Bin
 .../resources}/assets/public/img/logo.png          |   Bin
 .../resources/assets/scripts/brokerDetail.js       |   355 +
 .../resources/assets/scripts/brokerList.js         |   356 +
 inlong-tubemq/resources/assets/scripts/clusters.js |    80 +
 .../resources/assets/scripts/common/helper.js      |   316 +
 .../resources/assets/scripts/common/module.js      |  1367 ++
 .../resources/assets/scripts/subscribe.js          |   117 +
 .../resources/assets/scripts/subscribeDetail.js    |   130 +
 .../resources/assets/scripts/topicDetail.js        |   471 +
 .../resources/assets/scripts/topicList.js          |   250 +
 .../resources}/templates/control/slidebar.vm       |     0
 .../resources}/templates/layout/default.vm         |     0
 .../resources}/templates/layout/master.vm          |     0
 .../resources}/templates/layout/tubeweb.vm         |     0
 .../resources}/templates/layout/webapi.vm          |     0
 .../resources}/templates/macro.vm                  |     0
 .../templates/screen/cluster/clusterManage.vm      |     0
 .../templates/screen/config/brokerDetail.vm        |     0
 .../templates/screen/config/brokerList.vm          |     0
 .../templates/screen/config/topicDetail.vm         |     0
 .../templates/screen/config/topicList.vm           |     0
 .../templates/screen/consume/consumeGroupList.vm   |     0
 .../resources}/templates/screen/consume/detail.vm  |     0
 .../resources}/templates/screen/index.vm           |     0
 .../resources}/templates/screen/master.vm          |     0
 .../resources}/templates/screen/tubeweb.vm         |     0
 .../resources}/templates/screen/webapi.vm          |     0
 .../resources}/velocity.properties                 |     0
 .../tubemq-client-cpp/.clang-format                |     0
 .../tubemq-client-cpp/CMakeLists.txt               |     0
 .../tubemq-client-cpp/README.md                    |     0
 .../tubemq-client-cpp/build_linux.sh               |     0
 .../tubemq-client-cpp/conf/client.conf             |     0
 .../tubemq-client-cpp/example/CMakeLists.txt       |     0
 .../tubemq-client-cpp/example}/README.md           |     0
 .../example/consumer/CMakeLists.txt                |     0
 .../example/consumer/test_consumer.cc              |     0
 .../example/consumer/test_multithread_pull.cc      |     0
 .../include/tubemq/tubemq_atomic.h                 |     0
 .../include/tubemq/tubemq_client.h                 |     0
 .../include/tubemq/tubemq_config.h                 |     0
 .../include/tubemq/tubemq_errcode.h                |     0
 .../include/tubemq/tubemq_message.h                |     0
 .../include/tubemq/tubemq_return.h                 |     0
 .../tubemq-client-cpp/proto/BrokerService.proto    |   136 +
 .../tubemq-client-cpp/proto/CMakeLists.txt         |     0
 .../tubemq-client-cpp/proto/MasterService.proto    |   192 +
 .../tubemq-client-cpp/proto/RPC.proto              |    62 +
 .../tubemq-client-cpp/proto/readme.md              |    20 +
 .../tubemq-client-cpp/release/release_linux.sh     |     0
 .../tubemq-client-cpp/src/CMakeLists.txt           |     0
 .../tubemq-client-cpp/src/any.h                    |     0
 .../tubemq-client-cpp/src/baseconsumer.cc          |     0
 .../tubemq-client-cpp/src/baseconsumer.h           |     0
 .../tubemq-client-cpp/src/buffer.h                 |     0
 .../tubemq-client-cpp/src/client_connection.cc     |     0
 .../tubemq-client-cpp/src/client_connection.h      |     0
 .../tubemq-client-cpp/src/client_service.cc        |     0
 .../tubemq-client-cpp/src/client_service.h         |     0
 .../tubemq-client-cpp/src/client_subinfo.cc        |     0
 .../tubemq-client-cpp/src/client_subinfo.h         |     0
 .../tubemq-client-cpp/src/codec_protocol.h         |     0
 .../tubemq-client-cpp/src/connection.cc            |     0
 .../tubemq-client-cpp/src/connection.h             |     0
 .../tubemq-client-cpp/src/connection_pool.h        |     0
 .../tubemq-client-cpp/src/const_config.h           |     0
 .../tubemq-client-cpp/src/const_rpc.h              |     0
 .../tubemq-client-cpp/src/executor_pool.cc         |     0
 .../tubemq-client-cpp/src/executor_pool.h          |     0
 .../tubemq-client-cpp/src/file_ini.cc              |     0
 .../tubemq-client-cpp/src/file_ini.h               |     0
 .../tubemq-client-cpp/src/flowctrl_def.cc          |     0
 .../tubemq-client-cpp/src/flowctrl_def.h           |     0
 .../tubemq-client-cpp/src/future.h                 |     0
 .../tubemq-client-cpp/src/logger.cc                |    80 +
 .../tubemq-client-cpp/src/logger.h                 |     0
 .../tubemq-client-cpp/src/meta_info.cc             |     0
 .../tubemq-client-cpp/src/meta_info.h              |     0
 .../tubemq-client-cpp/src/noncopyable.h            |     0
 .../tubemq-client-cpp/src/rmt_data_cache.cc        |     0
 .../tubemq-client-cpp/src/rmt_data_cache.h         |     0
 .../tubemq-client-cpp/src/singleton.h              |     0
 .../tubemq-client-cpp/src/thread_pool.h            |     0
 .../tubemq-client-cpp/src/transport.h              |     0
 .../tubemq-client-cpp/src/tubemq_client.cc         |     0
 .../tubemq-client-cpp/src/tubemq_codec.h           |     0
 .../tubemq-client-cpp/src/tubemq_config.cc         |     0
 .../tubemq-client-cpp/src/tubemq_message.cc        |     0
 .../tubemq-client-cpp/src/tubemq_return.cc         |     0
 .../tubemq-client-cpp/src/tubemq_transport.h       |     0
 .../tubemq-client-cpp/src/unique_seq_id.h          |     0
 .../tubemq-client-cpp/src/utils.cc                 |     0
 .../tubemq-client-cpp/src/utils.h                  |     0
 .../tubemq-client-cpp/src/version.h                |     0
 .../tubemq-client-cpp/tests/CMakeLists.txt         |     0
 .../tubemq-client-cpp/tests}/README.md             |     0
 .../tests/executor_pool/CMakeLists.txt             |     0
 .../tubemq-client-cpp/tests/executor_pool/main.cc  |     0
 .../tests/thread_pool/CMakeLists.txt               |     0
 .../tubemq-client-cpp/tests/thread_pool/main.cc    |     0
 .../tubemq-client-cpp/third_party/CMakeLists.txt   |     0
 .../tubemq-client-cpp/third_party/README.md        |     0
 .../tubemq-client-python/.appveyor.yml             |     0
 .../tubemq-client-python/README.md                 |     0
 .../tubemq-client-python/__init__.py               |    18 +
 .../tubemq-client-python/conda.recipe/meta.yaml    |     0
 .../tubemq-client-python/requirements.txt          |     0
 .../tubemq-client-python/setup.py                  |     0
 .../tubemq-client-python/src/cpp/tubemq_client.cc  |     0
 .../tubemq-client-python/src/cpp/tubemq_config.cc  |     0
 .../tubemq-client-python/src/cpp/tubemq_errcode.cc |     0
 .../tubemq-client-python/src/cpp/tubemq_message.cc |     0
 .../tubemq-client-python/src/cpp/tubemq_return.cc  |     0
 .../src/python/example/test_consumer.py            |     0
 .../src/python/tubemq/__init__.py                  |     0
 .../src/python/tubemq/client.conf                  |     0
 .../src/python/tubemq/client.py                    |    92 +
 inlong-tubemq/tubemq-client/pom.xml                |   158 +
 .../tubemq-client}/src/main/assembly/assembly.xml  |     0
 .../inlong/tubemq/client/common/PeerInfo.java      |    69 +
 .../tubemq/client/common/TClientConstants.java     |    40 +
 .../tubemq/client/config/ConsumerConfig.java       |   276 +
 .../tubemq/client/config/TubeClientConfig.java     |   593 +
 .../client/config/TubeClientConfigUtils.java       |    59 +
 .../client/consumer/BaseMessageConsumer.java       |  1769 ++
 .../tubemq/client/consumer/ClientSubInfo.java      |   171 +
 .../tubemq/client/consumer/ConsumeOffsetInfo.java  |    84 +
 .../tubemq/client/consumer/ConsumePosition.java    |    51 +
 .../tubemq/client/consumer/ConsumerResult.java     |   106 +
 .../client/consumer/ConsumerSamplePrint.java       |    74 +
 .../tubemq/client/consumer/FetchContext.java       |   108 +
 .../tubemq/client/consumer/MessageConsumer.java    |    84 +
 .../client/consumer/MessageFetchManager.java       |   227 +
 .../tubemq/client/consumer/MessageListener.java    |    35 +
 .../tubemq/client/consumer/PartitionExt.java       |   308 +
 .../client/consumer/PartitionSelectResult.java     |    82 +
 .../client/consumer/PullMessageConsumer.java       |    42 +
 .../client/consumer/PushMessageConsumer.java       |    35 +
 .../tubemq/client/consumer/RmtDataCache.java       |   926 +
 .../client/consumer/SimplePullMessageConsumer.java |   244 +
 .../client/consumer/SimplePushMessageConsumer.java |   298 +
 .../tubemq/client/consumer/TopicProcessor.java     |    55 +
 .../client/exception/TubeClientException.java      |    45 +
 .../tubemq/client/factory/InnerSessionFactory.java |    32 +
 .../client/factory/MessageSessionFactory.java      |    43 +
 .../client/factory/TubeBaseSessionFactory.java     |   199 +
 .../client/factory/TubeMultiSessionFactory.java    |    88 +
 .../client/factory/TubeSingleSessionFactory.java   |   109 +
 .../tubemq/client/producer/AllowedSetting.java     |    61 +
 .../tubemq/client/producer/MessageProducer.java    |    44 +
 .../client/producer/MessageSentCallback.java       |    27 +
 .../tubemq/client/producer/MessageSentResult.java  |    89 +
 .../tubemq/client/producer/PartitionRouter.java    |    29 +
 .../tubemq/client/producer/ProducerManager.java    |   739 +
 .../client/producer/RoundRobinPartitionRouter.java |    62 +
 .../client/producer/SimpleMessageProducer.java     |   417 +
 .../producer/qltystats/BrokerRcvQltyStats.java     |    40 +
 .../producer/qltystats/BrokerStatsDltTuple.java    |    56 +
 .../producer/qltystats/BrokerStatsItemSet.java     |   109 +
 .../qltystats/DefaultBrokerRcvQltyStats.java       |   466 +
 .../tubemq-client/src/saveClientVersion.cmd        |    34 +
 .../tubemq-client/src/saveClientVersion.sh         |    38 +
 .../client/consumer/MessageFetchManagerTest.java   |    57 +
 .../tubemq/client/consumer/PartitionExtTest.java   |    80 +
 .../tubemq/client/consumer/RmtDataCacheTest.java   |    76 +
 .../client/factory/TubeBaseSessionFactoryTest.java |    79 +
 .../factory/TubeMultiSessionFactoryTest.java       |    48 +
 .../factory/TubeSingleSessionFactoryTest.java      |    46 +
 .../producer/RoundRobinPartitionRouterTest.java    |    53 +
 .../qltystats/DefaultBrokerRcvQltyStatsTest.java   |    71 +
 .../src/test/resources/log4j.properties            |     0
 inlong-tubemq/tubemq-connectors/pom.xml            |    77 +
 .../tubemq-connector-flink/pom.xml                 |   105 +
 .../org/apache/flink/connectors/tubemq/Tubemq.java |     0
 .../flink/connectors/tubemq/TubemqOptions.java     |    62 +
 .../connectors/tubemq/TubemqSinkFunction.java      |   182 +
 .../connectors/tubemq/TubemqSourceFunction.java    |   362 +
 .../flink/connectors/tubemq/TubemqTableSink.java   |   140 +
 .../flink/connectors/tubemq/TubemqTableSource.java |   226 +
 .../tubemq/TubemqTableSourceSinkFactory.java       |     0
 .../flink/connectors/tubemq/TubemqValidator.java   |     0
 .../org.apache.flink.table.factories.TableFactory  |     0
 .../apache/flink/connectors/tubemq/TubemqTest.java |     0
 .../src/test/resources/log4j.properties            |     0
 .../tubemq-connector-flume/README.md               |     0
 .../tubemq-connector-flume/pom.xml                 |    63 +
 .../apache/flume/sink/tubemq/ConfigOptions.java    |     0
 .../org/apache/flume/sink/tubemq/EventStat.java    |    64 +
 .../apache/flume/sink/tubemq/TubeSinkCounter.java  |     0
 .../org/apache/flume/sink/tubemq/TubemqSink.java   |   424 +
 .../apache/flume/sink/tubemq/TestTubemqSink.java   |   110 +
 .../src/test/resources/log4j.properties            |     0
 .../tubemq-connector-spark/pom.xml                 |    72 +
 .../tubemq/connector/spark/ConsumerConf.scala      |   159 +
 .../connector/spark/JavaTubeMQProvider.scala       |    53 +
 .../tubemq/connector/spark/ProducerConf.scala      |    76 +
 .../tubemq/connector/spark/TubeMQConsumer.scala    |   112 +
 .../tubemq/connector/spark/TubeMQFunctions.scala   |   115 +
 .../tubemq/connector/spark/TubeMQProducer.scala    |   119 +
 .../tubemq/connector/spark/TubeMQProvider.scala    |    79 +
 inlong-tubemq/tubemq-core/pom.xml                  |   133 +
 .../org/apache/inlong/tubemq/corebase/Message.java |   364 +
 .../apache/inlong/tubemq/corebase/MessageExt.java  |    26 +
 .../inlong/tubemq/corebase/Shutdownable.java       |    23 +
 .../inlong/tubemq/corebase/TBaseConstants.java     |    82 +
 .../inlong/tubemq/corebase/TErrCodeConstants.java  |    53 +
 .../inlong/tubemq/corebase/TokenConstants.java     |    42 +
 .../aaaclient/ClientAuthenticateHandler.java       |    28 +
 .../aaaclient/SimpleClientAuthenticateHandler.java |    62 +
 .../tubemq/corebase/balance/ConsumerEvent.java     |    85 +
 .../tubemq/corebase/balance/EventStatus.java       |    70 +
 .../inlong/tubemq/corebase/balance/EventType.java  |    79 +
 .../inlong/tubemq/corebase/cluster/BrokerInfo.java |   238 +
 .../tubemq/corebase/cluster/ConsumerInfo.java      |   166 +
 .../inlong/tubemq/corebase/cluster/MasterInfo.java |   158 +
 .../tubemq/corebase/cluster/NodeAddrInfo.java      |   102 +
 .../inlong/tubemq/corebase/cluster/Partition.java  |   236 +
 .../tubemq/corebase/cluster/ProducerInfo.java      |    97 +
 .../tubemq/corebase/cluster/SubscribeInfo.java     |   122 +
 .../inlong/tubemq/corebase/cluster/TopicInfo.java  |   161 +
 .../inlong/tubemq/corebase/config/TLSConfig.java   |   145 +
 .../corebase/daemon/AbstractDaemonService.java     |    82 +
 .../inlong/tubemq/corebase/daemon/Service.java     |    27 +
 .../corebase/exception/AddressException.java       |    38 +
 .../tubemq/corebase/policies/FlowCtrlItem.java     |   183 +
 .../tubemq/corebase/policies/FlowCtrlResult.java   |    38 +
 .../corebase/policies/FlowCtrlRuleHandler.java     |   651 +
 .../tubemq/corebase/policies/SSDCtrlResult.java    |    35 +
 .../tubemq/corebase/utils/AbstractSamplePrint.java |    54 +
 .../inlong/tubemq/corebase/utils/AddressUtils.java |   277 +
 .../inlong/tubemq/corebase/utils/CheckSum.java     |    33 +
 .../tubemq/corebase/utils/ConcurrentHashSet.java   |    79 +
 .../tubemq/corebase/utils/DataConverterUtil.java   |   241 +
 .../tubemq/corebase/utils/MessageFlagUtils.java    |    36 +
 .../inlong/tubemq/corebase/utils/MixedUtils.java   |   105 +
 .../inlong/tubemq/corebase/utils/RegexDef.java     |    60 +
 .../tubemq/corebase/utils/ServiceStatusHolder.java |   170 +
 .../tubemq/corebase/utils/SettingValidUtils.java   |    38 +
 .../inlong/tubemq/corebase/utils/TStringUtils.java |   199 +
 .../inlong/tubemq/corebase/utils/ThreadUtils.java  |   128 +
 .../inlong/tubemq/corebase/utils/Tuple2.java       |    72 +
 .../inlong/tubemq/corebase/utils/Tuple3.java       |    60 +
 .../tubemq/corerpc/AbstractServiceInvoker.java     |    96 +
 .../inlong/tubemq/corerpc/RemoteConErrStats.java   |    63 +
 .../inlong/tubemq/corerpc/RequestWrapper.java      |   116 +
 .../inlong/tubemq/corerpc/ResponseWrapper.java     |   172 +
 .../apache/inlong/tubemq/corerpc/RpcConfig.java    |    86 +
 .../apache/inlong/tubemq/corerpc/RpcConstants.java |   134 +
 .../apache/inlong/tubemq/corerpc/RpcDataPack.java  |    53 +
 .../inlong/tubemq/corerpc/RpcServiceFactory.java   |   595 +
 .../tubemq/corerpc/RpcServiceFailoverInvoker.java  |   152 +
 .../inlong/tubemq/corerpc/RpcServiceInvoker.java   |    83 +
 .../corerpc/benchemark/DefaultSimpleService.java   |    27 +
 .../benchemark/RcpService4BenchmarkClient.java     |    81 +
 .../benchemark/RpcService4BenchmarkServer.java     |    41 +
 .../tubemq/corerpc/benchemark/SimpleService.java   |    24 +
 .../inlong/tubemq/corerpc/client/CallFuture.java   |   166 +
 .../inlong/tubemq/corerpc/client/Callback.java     |    40 +
 .../inlong/tubemq/corerpc/client/Client.java       |    44 +
 .../tubemq/corerpc/client/ClientFactory.java       |    34 +
 .../inlong/tubemq/corerpc/codec/PbEnDecoder.java   |   303 +
 .../inlong/tubemq/corerpc/codec/Protocol.txt       |    19 +
 .../corerpc/exception/ClientClosedException.java   |    36 +
 .../corerpc/exception/LocalConnException.java      |    40 +
 .../tubemq/corerpc/exception/NetworkException.java |    41 +
 .../corerpc/exception/OverflowException.java       |    41 +
 .../tubemq/corerpc/exception/RemoteException.java  |    39 +
 .../corerpc/exception/ServerNotReadyException.java |    29 +
 .../exception/ServiceStoppingException.java        |    32 +
 .../tubemq/corerpc/exception/StandbyException.java |    40 +
 .../exception/UnknownProtocolException.java        |    41 +
 .../corerpc/netty/ByteBufferInputStream.java       |   105 +
 .../corerpc/netty/ByteBufferOutputStream.java      |   118 +
 .../inlong/tubemq/corerpc/netty/NettyClient.java   |   429 +
 .../tubemq/corerpc/netty/NettyClientFactory.java   |   322 +
 .../tubemq/corerpc/netty/NettyProtocolDecoder.java |   158 +
 .../tubemq/corerpc/netty/NettyProtocolEncoder.java |    62 +
 .../tubemq/corerpc/netty/NettyRequestContext.java  |   162 +
 .../tubemq/corerpc/netty/NettyRpcServer.java       |   398 +
 .../tubemq/corerpc/netty/ReadTimeoutHandler.java   |   245 +
 .../inlong/tubemq/corerpc/protocol/Protocol.java   |    34 +
 .../tubemq/corerpc/protocol/ProtocolFactory.java   |    46 +
 .../tubemq/corerpc/protocol/RpcProtocol.java       |   180 +
 .../tubemq/corerpc/server/RequestContext.java      |    34 +
 .../inlong/tubemq/corerpc/server/RpcServer.java    |    27 +
 .../tubemq/corerpc/server/ServiceRpcServer.java    |    33 +
 .../tubemq/corerpc/service/BrokerReadService.java  |    37 +
 .../tubemq/corerpc/service/BrokerWriteService.java |    36 +
 .../tubemq/corerpc/service/MasterService.java      |    52 +
 .../inlong/tubemq/corerpc/utils/MixUtils.java      |    89 +
 .../tubemq/corerpc/utils/TSSLEngineUtil.java       |    89 +
 .../tubemq-core/src/main/proto/BrokerService.proto |   142 +
 .../tubemq-core/src/main/proto/MasterService.proto |   432 +
 inlong-tubemq/tubemq-core/src/main/proto/RPC.proto |    62 +
 .../corebase/policies/TestFlowCtrlRuleHandler.java |    86 +
 .../tubemq/corebase/utils/AddressUtilsTest.java    |    30 +
 .../corebase/utils/ConcurrentHashSetTest.java      |    49 +
 .../corerpc/codec/DataConverterUtilTest.java       |    74 +
 .../tubemq/corerpc/codec/PbEnDecoderTest.java      |    48 +
 .../corerpc/netty/NettyProtocolEncoderTest.java    |    57 +
 .../tubemq/corerpc/utils/TSSLEngineUtilTest.java   |    54 +
 .../src/test/resources/log4j.properties            |     0
 .../src/test/resources/tubeServer.keystore         |   Bin
 .../test/resources/tubeServerTrustStore.keystore   |   Bin
 inlong-tubemq/tubemq-docker/README.md              |     8 +
 inlong-tubemq/tubemq-docker/pom.xml                |    73 +
 .../tubemq-docker}/tubemq-all/Dockerfile           |     0
 .../tubemq-docker}/tubemq-all/README.md            |     0
 inlong-tubemq/tubemq-docker/tubemq-all/pom.xml     |   103 +
 .../tubemq-docker}/tubemq-all/tubemq.sh            |     0
 .../tubemq-docker/tubemq-build/Dockerfile          |    37 +
 .../tubemq-docker}/tubemq-build/README.md          |     0
 inlong-tubemq/tubemq-docker/tubemq-build/pom.xml   |    72 +
 .../tubemq-docker}/tubemq-cpp/Dockerfile           |     0
 .../tubemq-docker}/tubemq-cpp/README.md            |     0
 inlong-tubemq/tubemq-docker/tubemq-cpp/pom.xml     |    72 +
 inlong-tubemq/tubemq-docker/tubemq-k8s/.helmignore |    40 +
 inlong-tubemq/tubemq-docker/tubemq-k8s/Chart.yaml  |    31 +
 .../tubemq-docker}/tubemq-k8s/README.md            |     0
 .../tubemq-k8s/templates/_broker.tpl               |     0
 .../tubemq-k8s/templates/_helpers.yaml             |     0
 .../tubemq-k8s/templates/_master.tpl               |     0
 .../tubemq-k8s/templates/_zookeeper.tpl            |     0
 .../tubemq-k8s/templates/broker-configmap.yaml     |     0
 .../tubemq-k8s/templates/broker-ini-configmap.yaml |     0
 .../tubemq-k8s/templates/broker-pdb.yaml           |     0
 .../tubemq-k8s/templates/broker-service.yaml       |     0
 .../tubemq-k8s/templates/broker-statefulset.yaml   |     0
 .../tubemq-k8s/templates/master-configmap.yaml     |     0
 .../tubemq-k8s/templates/master-ini-configmap.yaml |     0
 .../tubemq-k8s/templates/master-pdb.yaml           |     0
 .../tubemq-k8s/templates/master-service.yaml       |     0
 .../tubemq-k8s/templates/master-statefulset.yaml   |     0
 .../tubemq-k8s/templates/zookeeper-configmap.yaml  |     0
 .../tubemq-k8s/templates/zookeeper-pdb.yaml        |     0
 .../tubemq-k8s/templates/zookeeper-service.yaml    |     0
 .../templates/zookeeper-statefulset.yaml           |     0
 .../tubemq-docker}/tubemq-k8s/values.yaml          |     0
 inlong-tubemq/tubemq-example/pom.xml               |    70 +
 .../tubemq-example}/src/main/assembly/assembly.xml |     0
 .../tubemq/example/MAMessageProducerExample.java   |   250 +
 .../tubemq/example/MessageConsumerExample.java     |   149 +
 .../tubemq/example/MessageProducerExample.java     |   204 +
 .../tubemq/example/MessagePullConsumerExample.java |   153 +
 .../example/MessagePullSetConsumerExample.java     |   190 +
 .../apache/inlong/tubemq/example/MsgRecvStats.java |    84 +
 inlong-tubemq/tubemq-manager/Dockerfile            |    26 +
 inlong-tubemq/tubemq-manager/READMe.md             |    49 +
 .../tubemq-manager/bin/start-admin-docker.sh       |    21 +
 inlong-tubemq/tubemq-manager/bin/start-admin.sh    |    65 +
 inlong-tubemq/tubemq-manager/bin/stop-admin.sh     |    35 +
 inlong-tubemq/tubemq-manager/conf/logback.xml      |    69 +
 inlong-tubemq/tubemq-manager/pom.xml               |   194 +
 .../tubemq-manager/src/main/assembly/assembly.xml  |    65 +
 .../inlong/tubemq/manager/TubeMQManager.java       |    65 +
 .../tubemq/manager/config/AsyncConfiguration.java  |    47 +
 .../tubemq/manager/config/SwaggerConfig.java       |    51 +
 .../controller/ManagerControllerAdvice.java        |    43 +
 .../tubemq/manager/controller/TubeMQResult.java    |    64 +
 .../controller/cluster/ClusterController.java      |   178 +
 .../manager/controller/cluster/dto/ClusterDto.java |    31 +
 .../controller/cluster/request/AddClusterReq.java  |    35 +
 .../cluster/request/DeleteClusterReq.java          |    27 +
 .../cluster/request/UpdateClusterReq.java          |    26 +
 .../manager/controller/cluster/vo/ClusterVo.java   |    30 +
 .../manager/controller/group/GroupController.java  |   156 +
 .../controller/group/request/AddBlackGroupReq.java |    33 +
 .../group/request/DeleteBlackGroupReq.java         |    32 +
 .../controller/group/request/DeleteOffsetReq.java  |    33 +
 .../controller/group/request/QueryOffsetReq.java   |    31 +
 .../group/result/AllBrokersOffsetRes.java          |    36 +
 .../controller/group/result/OffsetQueryRes.java    |    58 +
 .../manager/controller/node/NodeController.java    |   132 +
 .../manager/controller/node/dto/MasterDto.java     |    30 +
 .../controller/node/request/AddBrokersReq.java     |    50 +
 .../controller/node/request/AddTopicReq.java       |    40 +
 .../manager/controller/node/request/BaseReq.java   |    27 +
 .../controller/node/request/BatchAddTopicReq.java  |    32 +
 .../node/request/BrokerSetReadOrWriteReq.java      |    33 +
 .../controller/node/request/CloneBrokersReq.java   |    33 +
 .../controller/node/request/CloneOffsetReq.java    |    33 +
 .../controller/node/request/CloneTopicReq.java     |    35 +
 .../controller/node/request/DeleteBrokerReq.java   |    32 +
 .../controller/node/request/ModifyMasterReq.java   |    26 +
 .../node/request/OnlineOfflineBrokerReq.java       |    32 +
 .../controller/node/request/QueryBrokerCfgReq.java |    46 +
 .../controller/node/request/ReloadBrokerReq.java   |    31 +
 .../controller/region/RegionController.java        |   131 +
 .../controller/region/request/CreateRegionReq.java |    31 +
 .../controller/region/request/DeleteRegionReq.java |    28 +
 .../controller/region/request/ModifyRegionReq.java |    31 +
 .../controller/region/request/QueryRegionReq.java  |    26 +
 .../manager/controller/task/TaskController.java    |    83 +
 .../controller/topic/TopicWebController.java       |   134 +
 .../controller/topic/request/AddTopicTask.java     |    44 +
 .../topic/request/BatchAddGroupAuthReq.java        |    35 +
 .../topic/request/BatchAddTopicAuthReq.java        |    34 +
 .../topic/request/BatchAddTopicTaskReq.java        |    36 +
 .../controller/topic/request/DeleteGroupReq.java   |    32 +
 .../controller/topic/request/DeleteTopicReq.java   |    33 +
 .../controller/topic/request/GroupAuthItem.java    |    32 +
 .../controller/topic/request/ModifyTopicReq.java   |    44 +
 .../controller/topic/request/QueryCanWriteReq.java |    31 +
 .../topic/request/RebalanceConsumerReq.java        |    34 +
 .../topic/request/RebalanceGroupReq.java           |    33 +
 .../topic/request/SetAuthControlReq.java           |    32 +
 .../controller/topic/request/TopicAuthItem.java    |    26 +
 .../inlong/tubemq/manager/entry/BrokerEntry.java   |    61 +
 .../inlong/tubemq/manager/entry/ClusterEntry.java  |    50 +
 .../inlong/tubemq/manager/entry/MasterEntry.java   |    50 +
 .../inlong/tubemq/manager/entry/RegionEntry.java   |    68 +
 .../inlong/tubemq/manager/entry/TopicEntry.java    |   136 +
 .../inlong/tubemq/manager/entry/TopicStatus.java   |    33 +
 .../tubemq/manager/entry/TopicTaskEntry.java       |    74 +
 .../inlong/tubemq/manager/enums/ErrorCode.java     |    44 +
 .../tubemq/manager/enums/TaskStatusEnum.java       |    46 +
 .../inlong/tubemq/manager/enums/TaskTypeEnum.java  |    41 +
 .../manager/exceptions/TubeMQManagerException.java |    28 +
 .../tubemq/manager/executors/AddTopicExecutor.java |   178 +
 .../manager/repository/BrokerRepository.java       |    31 +
 .../manager/repository/ClusterRepository.java      |    40 +
 .../manager/repository/MasterRepository.java       |    52 +
 .../manager/repository/RegionRepository.java       |    39 +
 .../tubemq/manager/repository/TopicRepository.java |    35 +
 .../manager/repository/TopicTaskRepository.java    |    33 +
 .../tubemq/manager/service/BrokerServiceImpl.java  |   116 +
 .../tubemq/manager/service/ClusterServiceImpl.java |   110 +
 .../tubemq/manager/service/MasterServiceImpl.java  |   162 +
 .../tubemq/manager/service/NodeServiceImpl.java    |   394 +
 .../tubemq/manager/service/RegionServiceImpl.java  |   176 +
 .../tubemq/manager/service/TaskServiceImpl.java    |   204 +
 .../tubemq/manager/service/TopicServiceImpl.java   |   285 +
 .../inlong/tubemq/manager/service/TubeConst.java   |    97 +
 .../tubemq/manager/service/TubeMQErrorConst.java   |    27 +
 .../manager/service/interfaces/BrokerService.java  |    86 +
 .../manager/service/interfaces/ClusterService.java |    69 +
 .../manager/service/interfaces/MasterService.java  |    88 +
 .../manager/service/interfaces/NodeService.java    |   123 +
 .../manager/service/interfaces/RegionService.java  |    66 +
 .../manager/service/interfaces/TaskService.java    |    29 +
 .../manager/service/interfaces/TopicService.java   |    86 +
 .../manager/service/tube/AddBrokerResult.java      |    30 +
 .../manager/service/tube/AddTopicsResult.java      |    33 +
 .../tubemq/manager/service/tube/BrokerConf.java    |    67 +
 .../manager/service/tube/BrokerStatusInfo.java     |    32 +
 .../manager/service/tube/CleanOffsetResult.java    |    32 +
 .../tubemq/manager/service/tube/IpIdRelation.java  |    27 +
 .../manager/service/tube/RebalanceGroupResult.java |    32 +
 .../tubemq/manager/service/tube/TopicView.java     |    43 +
 .../service/tube/TubeHttpBrokerInfoList.java       |   155 +
 .../service/tube/TubeHttpGroupDetailInfo.java      |    68 +
 .../manager/service/tube/TubeHttpResponse.java     |    30 +
 .../service/tube/TubeHttpTopicInfoList.java        |   152 +
 .../inlong/tubemq/manager/utils/ConvertUtils.java  |   127 +
 .../inlong/tubemq/manager/utils/ValidateUtils.java |    33 +
 .../src/main/resources/application.properties      |    20 +
 .../manager/controller/TestClusterController.java  |   179 +
 .../manager/repository/TestBusinessRepository.java |    69 +
 .../manager/service/broker/TestBrokerService.java  |    68 +
 .../manager/service/region/TestRegionService.java  |   100 +
 .../service/tube/TestTubeHttpBrokerResponse.java   |    48 +
 .../service/tube/TestTubeHttpTopicInfoList.java    |    52 +
 inlong-tubemq/tubemq-server/pom.xml                |   240 +
 .../tubemq-server}/src/main/assembly/assembly.xml  |     0
 .../org/apache/inlong/tubemq/server/Server.java    |    27 +
 .../org/apache/inlong/tubemq/server/Stoppable.java |    25 +
 .../inlong/tubemq/server/broker/BrokerConfig.java  |   457 +
 .../tubemq/server/broker/BrokerServiceServer.java  |  1268 ++
 .../inlong/tubemq/server/broker/TubeBroker.java    |   637 +
 .../broker/exception/OffsetStoreException.java     |    47 +
 .../server/broker/exception/StartupException.java  |    46 +
 .../server/broker/metadata/BrokerDefMetadata.java  |   189 +
 .../broker/metadata/BrokerMetadataManager.java     |   349 +
 .../broker/metadata/ClusterConfigHolder.java       |    81 +
 .../server/broker/metadata/MetadataManager.java    |    85 +
 .../server/broker/metadata/TopicMetadata.java      |   482 +
 .../server/broker/msgstore/MessageStore.java       |   751 +
 .../broker/msgstore/MessageStoreManager.java       |   786 +
 .../server/broker/msgstore/StoreService.java       |    44 +
 .../server/broker/msgstore/disk/FileSegment.java   |   492 +
 .../broker/msgstore/disk/FileSegmentList.java      |   302 +
 .../broker/msgstore/disk/GetMessageResult.java     |   184 +
 .../broker/msgstore/disk/MsgFileStatisInfo.java    |   180 +
 .../server/broker/msgstore/disk/MsgFileStore.java  |   592 +
 .../server/broker/msgstore/disk/Segment.java       |    67 +
 .../server/broker/msgstore/disk/SegmentList.java   |    55 +
 .../server/broker/msgstore/disk/SegmentType.java   |    25 +
 .../broker/msgstore/mem/GetCacheMsgResult.java     |    58 +
 .../broker/msgstore/mem/MsgMemStatisInfo.java      |   263 +
 .../server/broker/msgstore/mem/MsgMemStore.java    |   333 +
 .../server/broker/nodeinfo/ConsumerNodeInfo.java   |   262 +
 .../server/broker/offset/DefaultOffsetManager.java |   714 +
 .../tubemq/server/broker/offset/OffsetService.java |    79 +
 .../tubemq/server/broker/stats/CountItem.java      |    55 +
 .../tubemq/server/broker/stats/CountService.java   |    30 +
 .../server/broker/stats/GroupCountService.java     |   147 +
 .../server/broker/utils/BrokerSamplePrint.java     |    83 +
 .../tubemq/server/broker/utils/DataStoreUtils.java |   201 +
 .../server/broker/utils/DiskSamplePrint.java       |   120 +
 .../server/broker/utils/GroupOffsetInfo.java       |    85 +
 .../server/broker/utils/TopicPubStoreInfo.java     |    55 +
 .../server/broker/web/AbstractWebHandler.java      |    92 +
 .../server/broker/web/BrokerAdminServlet.java      |  1211 +
 .../inlong/tubemq/server/broker/web/WebServer.java |    57 +
 .../tubemq/server/common/TServerConstants.java     |    50 +
 .../tubemq/server/common/TStatusConstants.java     |    48 +
 .../common/aaaserver/CertificateBrokerHandler.java |    51 +
 .../common/aaaserver/CertificateMasterHandler.java |    39 +
 .../server/common/aaaserver/CertifiedResult.java   |    58 +
 .../aaaserver/SimpleCertificateBrokerHandler.java  |   205 +
 .../aaaserver/SimpleCertificateMasterHandler.java  |   176 +
 .../common/exception/HeartbeatException.java       |    39 +
 .../common/exception/IllegalConfigException.java   |    39 +
 .../tubemq/server/common/fielddef/CliArgDef.java   |   131 +
 .../tubemq/server/common/fielddef/WebFieldDef.java |   276 +
 .../server/common/fielddef/WebFieldType.java       |    64 +
 .../common/fileconfig/AbstractFileConfig.java      |   334 +
 .../common/fileconfig/MasterReplicationConfig.java |   141 +
 .../tubemq/server/common/fileconfig/ZKConfig.java  |   104 +
 .../server/common/heartbeat/HeartbeatManager.java  |   300 +
 .../server/common/heartbeat/TimeoutInfo.java       |    55 +
 .../server/common/heartbeat/TimeoutListener.java   |    23 +
 .../server/common/offsetstorage/OffsetStorage.java |    44 +
 .../common/offsetstorage/OffsetStorageInfo.java    |   157 +
 .../common/offsetstorage/ZkOffsetStorage.java      |   374 +
 .../common/offsetstorage/zookeeper/Abortable.java  |    40 +
 .../zookeeper/RecoverableZooKeeper.java            |   575 +
 .../offsetstorage/zookeeper/RetryCounter.java      |    69 +
 .../zookeeper/RetryCounterFactory.java             |    39 +
 .../common/offsetstorage/zookeeper/ZKUtil.java     |   515 +
 .../zookeeper/ZooKeeperConnectionException.java    |    53 +
 .../offsetstorage/zookeeper/ZooKeeperListener.java |    82 +
 .../offsetstorage/zookeeper/ZooKeeperWatcher.java  |   441 +
 .../server/common/paramcheck/PBParameterUtils.java |   616 +
 .../server/common/paramcheck/ParamCheckResult.java |    59 +
 .../tubemq/server/common/utils/AppendResult.java   |    64 +
 .../inlong/tubemq/server/common/utils/Bytes.java   |   275 +
 .../tubemq/server/common/utils/FileUtil.java       |    72 +
 .../tubemq/server/common/utils/HasThread.java      |    94 +
 .../tubemq/server/common/utils/HashedBytes.java    |    62 +
 .../tubemq/server/common/utils/HttpUtils.java      |   112 +
 .../tubemq/server/common/utils/IdWorker.java       |    65 +
 .../tubemq/server/common/utils/ProcessResult.java  |    63 +
 .../inlong/tubemq/server/common/utils/RowLock.java |   126 +
 .../inlong/tubemq/server/common/utils/Sleeper.java |   113 +
 .../server/common/utils/WebParameterUtils.java     |  1534 ++
 .../server/common/utils/WritableComparator.java    |    82 +
 .../server/common/webbase/WebMethodMapper.java     |    83 +
 .../inlong/tubemq/server/master/MasterConfig.java  |   625 +
 .../inlong/tubemq/server/master/TMaster.java       |  2553 +++
 .../server/master/balance/DefaultLoadBalancer.java |   738 +
 .../tubemq/server/master/balance/LoadBalancer.java |    71 +
 .../server/master/bdbstore/BdbStoreService.java    |   113 +
 .../master/bdbstore/DefaultBdbStoreService.java    |  1560 ++
 .../server/master/bdbstore/MasterGroupStatus.java  |    72 +
 .../server/master/bdbstore/MasterNodeInfo.java     |    79 +
 .../bdbstore/bdbentitys/BdbBlackGroupEntity.java   |   122 +
 .../bdbstore/bdbentitys/BdbBrokerConfEntity.java   |   491 +
 .../bdbentitys/BdbClusterSettingEntity.java        |   340 +
 .../bdbentitys/BdbConsumeGroupSettingEntity.java   |   151 +
 .../bdbentitys/BdbConsumerGroupEntity.java         |   121 +
 .../bdbentitys/BdbGroupFilterCondEntity.java       |   139 +
 .../bdbentitys/BdbGroupFlowCtrlEntity.java         |   245 +
 .../bdbentitys/BdbTopicAuthControlEntity.java      |   123 +
 .../bdbstore/bdbentitys/BdbTopicConfEntity.java    |   433 +
 .../nodemanage/nodebroker/BrokerConfManager.java   |  2081 ++
 .../nodemanage/nodebroker/BrokerInfoHolder.java    |   400 +
 .../nodebroker/BrokerSyncStatusInfo.java           |   825 +
 .../nodemanage/nodebroker/TargetValidResult.java   |    32 +
 .../nodemanage/nodebroker/TopicPSInfoManager.java  |   352 +
 .../nodemanage/nodeconsumer/ConsumerBandInfo.java  |   496 +
 .../nodeconsumer/ConsumerEventManager.java         |   269 +
 .../nodeconsumer/ConsumerInfoHolder.java           |   480 +
 .../nodemanage/nodeconsumer/NodeRebInfo.java       |    99 +
 .../nodemanage/nodeconsumer/RebProcessInfo.java    |    45 +
 .../nodeproducer/ProducerInfoHolder.java           |    61 +
 .../server/master/utils/BdbStoreSamplePrint.java   |    99 +
 .../inlong/tubemq/server/master/utils/Chore.java   |   127 +
 .../master/utils/SimpleVisitTokenManager.java      |    86 +
 .../server/master/web/MasterStatusCheckFilter.java |    78 +
 .../tubemq/server/master/web/UserAuthFilter.java   |    49 +
 .../inlong/tubemq/server/master/web/WebServer.java |   115 +
 .../server/master/web/action/layout/Default.java   |    29 +
 .../server/master/web/action/screen/Master.java    |   329 +
 .../server/master/web/action/screen/Tubeweb.java   |    48 +
 .../server/master/web/action/screen/Webapi.java    |   133 +
 .../web/action/screen/cluster/ClusterManager.java  |    63 +
 .../web/action/screen/config/BrokerDetail.java     |    36 +
 .../web/action/screen/config/BrokerList.java       |   124 +
 .../web/action/screen/config/TopicDetail.java      |    36 +
 .../master/web/action/screen/config/TopicList.java |    36 +
 .../master/web/action/screen/consume/Detail.java   |    36 +
 .../server/master/web/common/BaseResult.java       |   603 +
 .../master/web/common/BrokerQueryResult.java       |    24 +
 .../master/web/common/ClusterQueryResult.java      |    24 +
 .../server/master/web/common/QueryResult.java      |   105 +
 .../master/web/handler/AbstractWebHandler.java     |    56 +
 .../web/handler/WebAdminFlowRuleHandler.java       |   520 +
 .../web/handler/WebAdminGroupCtrlHandler.java      |  1553 ++
 .../web/handler/WebAdminTopicAuthHandler.java      |   410 +
 .../web/handler/WebBrokerDefConfHandler.java       |  1660 ++
 .../web/handler/WebBrokerTopicConfHandler.java     |  1548 ++
 .../master/web/handler/WebMasterInfoHandler.java   |   329 +
 .../master/web/handler/WebOtherInfoHandler.java    |   335 +
 .../tubemq/server/master/web/model/BrokerVO.java   |   106 +
 .../server/master/web/model/ClusterGroupVO.java    |    73 +
 .../server/master/web/model/ClusterNodeVO.java     |    80 +
 .../tubemq/server/master/web/simplemvc/Action.java |    24 +
 .../server/master/web/simplemvc/Context.java       |    38 +
 .../server/master/web/simplemvc/ControlTool.java   |    49 +
 .../server/master/web/simplemvc/MappedContext.java |    72 +
 .../web/simplemvc/MultipartHttpServletRequest.java |    80 +
 .../master/web/simplemvc/RequestContext.java       |   138 +
 .../master/web/simplemvc/RequestDispatcher.java    |   293 +
 .../master/web/simplemvc/TemplateEngine.java       |    32 +
 .../web/simplemvc/VelocityTemplateEngine.java      |    70 +
 .../server/master/web/simplemvc/WebApiServlet.java |   174 +
 .../server/master/web/simplemvc/WebFilter.java     |    54 +
 .../web/simplemvc/conf/ConfigFileParser.java       |   158 +
 .../master/web/simplemvc/conf/WebConfig.java       |   153 +
 .../exception/InvalidConfigException.java          |    38 +
 .../exception/TemplateNotFoundException.java       |    38 +
 .../inlong/tubemq/server/tools/BdbGroupAdmin.java  |   108 +
 .../inlong/tubemq/server/tools/BrokerStartup.java  |    48 +
 .../inlong/tubemq/server/tools/CliUtils.java       |    72 +
 .../inlong/tubemq/server/tools/MasterStartup.java  |    49 +
 .../tubemq/server/tools/StoreRepairAdmin.java      |   417 +
 .../tubemq/server/tools/cli/CliAbstractBase.java   |    76 +
 .../tubemq/server/tools/cli/CliBrokerAdmin.java    |   113 +
 .../tubemq/server/tools/cli/CliConsumer.java       |   390 +
 .../tubemq/server/tools/cli/CliProducer.java       |   374 +
 .../tubemq-server/src/saveServerVersion.cmd        |    33 +
 .../tubemq-server/src/saveServerVersion.sh         |    36 +
 .../broker/metadata/BrokerMetadataManagerTest.java |    75 +
 .../broker/msgstore/disk/FileSegmentListTest.java  |    86 +
 .../broker/msgstore/disk/FileSegmentTest.java      |    84 +
 .../broker/msgstore/mem/MsgMemStoreTest.java       |    58 +
 .../server/broker/stats/GroupCountServiceTest.java |    39 +
 .../server/broker/utils/DataStoreUtilsTest.java    |    39 +
 .../tubemq/server/common/HeartbeatManagerTest.java |    88 +
 .../tubemq/server/common/PBParameterTest.java      |    70 +
 .../tubemq/server/common/WebParameterTest.java     |    50 +
 .../tubemq/server/master/MasterConfigTest.java     |   107 +
 .../nodebroker/BrokerInfoHolderTest.java           |    46 +
 .../nodebroker/TopicPSInfoManagerTest.java         |    78 +
 .../nodeconsumer/ConsumerEventManagerTest.java     |    56 +
 .../src/test/resources/log4j.properties            |     0
 .../src/test/resources/master-normal.ini           |     0
 .../resources/master-replication-compatibility.ini |     0
 .../test/resources/master-replication-optional.ini |     0
 .../tubemq-server}/src/test/resources/master.ini   |     0
 inlong-website/.env                                |     2 +
 inlong-website/.eslintignore                       |     6 +
 inlong-website/.eslintrc                           |    26 +
 inlong-website/.gitignore                          |    25 +
 inlong-website/.headerignore                       |    63 +
 inlong-website/.prettierrc                         |    13 +
 inlong-website/.stylelintrc                        |     3 +
 inlong-website/README.md                           |    39 +
 inlong-website/config-overrides.js                 |    53 +
 inlong-website/mock/_constant.js                   |    23 +
 inlong-website/mock/app.js                         |    41 +
 inlong-website/package-lock.json                   | 22690 +++++++++++++++++++
 inlong-website/package.json                        |   113 +
 inlong-website/public/favicon.svg                  |    69 +
 inlong-website/public/index.html                   |    63 +
 inlong-website/public/logo.svg                     |   554 +
 inlong-website/public/manifest.json                |    19 +
 inlong-website/shell/addHeader.js                  |   177 +
 inlong-website/shell/preamble.js                   |   251 +
 .../AccessHelper/DataSourcesEditor/CreateModal.tsx |    83 +
 .../AccessHelper/DataSourcesEditor/DbConfig.tsx    |    26 +
 .../AccessHelper/DataSourcesEditor/FileConfig.tsx  |    79 +
 .../AccessHelper/DataSourcesEditor/index.tsx       |   219 +
 .../AccessHelper/DataStorageEditor/DetailModal.tsx |   189 +
 .../AccessHelper/DataStorageEditor/Editor.tsx      |   232 +
 .../AccessHelper/DataStorageEditor/hiveConfig.tsx  |   237 +
 .../AccessHelper/FieldsConfig/bussinessFields.tsx  |   148 +
 .../AccessHelper/FieldsConfig/dataFields.tsx       |   297 +
 .../AccessHelper/FieldsConfig/sourceFields.ts      |    27 +
 .../src/components/AccessHelper/index.ts           |    46 +
 .../BussinessSelect/MyBussinessModal.tsx           |   141 +
 .../ConsumeHelper/BussinessSelect/index.tsx        |    86 +
 .../ConsumeHelper/FieldsConfig/basicFields.tsx     |   126 +
 .../src/components/ConsumeHelper/index.ts          |    20 +
 .../src/components/DashboardCard/Card.tsx          |    55 +
 .../src/components/DashboardCard/CardList.tsx      |    42 +
 .../src/components/DashboardCard/index.module.less |    27 +
 .../src/components/DashboardCard/index.ts          |    21 +
 .../src/components/EditableTable/index.module.less |    32 +
 .../src/components/EditableTable/index.tsx         |   270 +
 .../src/components/FormGenerator/FormGenerator.tsx |   214 +
 .../components/FormGenerator/FormItemContent.tsx   |   181 +
 .../src/components/FormGenerator/index.tsx         |    27 +
 .../src/components/FormGenerator/plugins.tsx       |   129 +
 inlong-website/src/components/HighSelect/index.tsx |    98 +
 inlong-website/src/components/HighTable/index.tsx  |   131 +
 .../src/components/HighTable/style.module.less     |    45 +
 .../src/components/Icons/DashCancelled.svg         |    36 +
 .../src/components/Icons/DashPending.svg           |    35 +
 .../src/components/Icons/DashRejected.svg          |    31 +
 .../src/components/Icons/DashToBeAssigned.svg      |    35 +
 inlong-website/src/components/Icons/DashTotal.svg  |    34 +
 .../src/components/Icons/DashTotalRevert.svg       |    39 +
 inlong-website/src/components/Icons/index.ts       |    34 +
 .../components/Layout/NavWidget/LocaleSelect.tsx   |    59 +
 .../components/Layout/NavWidget/index.module.less  |    36 +
 .../src/components/Layout/NavWidget/index.tsx      |    70 +
 inlong-website/src/components/Layout/index.css     |    23 +
 inlong-website/src/components/Layout/index.tsx     |   112 +
 .../src/components/PageContainer/Container.tsx     |    40 +
 .../src/components/PageContainer/PageContainer.tsx |   107 +
 .../src/components/PageContainer/index.module.less |    25 +
 .../src/components/PageContainer/index.ts          |    23 +
 .../src/components/StaffSelect/index.tsx           |   158 +
 inlong-website/src/components/StatusTag/index.tsx  |    79 +
 inlong-website/src/configs/default/index.ts        |    23 +
 inlong-website/src/configs/locales/index.ts        |    46 +
 inlong-website/src/configs/menus/index.ts          |    45 +
 inlong-website/src/configs/pagination/index.ts     |    31 +
 inlong-website/src/configs/routes/index.tsx        |   142 +
 inlong-website/src/defaultSettings.js              |    27 +
 inlong-website/src/hooks/index.ts                  |    25 +
 inlong-website/src/i18n.ts                         |    38 +
 inlong-website/src/index.tsx                       |    30 +
 inlong-website/src/locales/cn.json                 |     2 +
 inlong-website/src/locales/en.json                 |     2 +
 inlong-website/src/models/index.ts                 |    91 +
 .../src/pages/AccessCreate/Bussiness/config.tsx    |    48 +
 .../src/pages/AccessCreate/Bussiness/index.tsx     |   104 +
 .../src/pages/AccessCreate/DataStream/config.tsx   |    55 +
 .../src/pages/AccessCreate/DataStream/helper.ts    |   146 +
 .../src/pages/AccessCreate/DataStream/index.tsx    |   175 +
 inlong-website/src/pages/AccessCreate/index.tsx    |   149 +
 .../pages/AccessDashboard/ExecutionLogModal.tsx    |   174 +
 .../src/pages/AccessDashboard/config.tsx           |   127 +
 inlong-website/src/pages/AccessDashboard/index.tsx |   143 +
 .../src/pages/AccessDashboard/status.tsx           |    93 +
 .../src/pages/AccessDetail/DataSources/index.tsx   |   248 +
 .../src/pages/AccessDetail/DataSources/status.tsx  |    92 +
 .../src/pages/AccessDetail/DataStorage/index.tsx   |   259 +
 .../src/pages/AccessDetail/DataStorage/status.tsx  |    67 +
 .../AccessDetail/DataStream/StreamItemModal.tsx    |   119 +
 .../src/pages/AccessDetail/DataStream/config.tsx   |   130 +
 .../AccessDetail/DataStream/index.module.less      |    34 +
 .../src/pages/AccessDetail/DataStream/index.tsx    |   316 +
 .../src/pages/AccessDetail/DataStream/status.tsx   |    69 +
 .../src/pages/AccessDetail/Info/config.tsx         |    68 +
 .../src/pages/AccessDetail/Info/index.tsx          |   106 +
 inlong-website/src/pages/AccessDetail/common.d.ts  |    26 +
 inlong-website/src/pages/AccessDetail/index.tsx    |    93 +
 inlong-website/src/pages/ApprovalDetail/Access.tsx |    69 +
 .../src/pages/ApprovalDetail/AccessConfig.tsx      |    94 +
 .../src/pages/ApprovalDetail/Consume.tsx           |    63 +
 .../src/pages/ApprovalDetail/ConsumeConfig.tsx     |   100 +
 inlong-website/src/pages/ApprovalDetail/Steps.tsx  |    58 +
 .../src/pages/ApprovalDetail/common.d.ts           |    34 +
 inlong-website/src/pages/ApprovalDetail/index.tsx  |   238 +
 .../src/pages/Approvals/Applies/config.tsx         |    93 +
 .../src/pages/Approvals/Applies/index.tsx          |    91 +
 .../src/pages/Approvals/Applies/status.tsx         |    72 +
 .../src/pages/Approvals/Approvals/config.tsx       |    98 +
 .../src/pages/Approvals/Approvals/index.tsx        |    90 +
 .../src/pages/Approvals/Approvals/status.tsx       |    72 +
 inlong-website/src/pages/Approvals/index.tsx       |   113 +
 .../src/pages/ConsumeCreate/Info/config.tsx        |    43 +
 .../src/pages/ConsumeCreate/Info/index.tsx         |   111 +
 inlong-website/src/pages/ConsumeCreate/index.tsx   |   127 +
 .../src/pages/ConsumeDashboard/config.tsx          |   164 +
 .../src/pages/ConsumeDashboard/index.tsx           |   127 +
 .../src/pages/ConsumeDashboard/status.tsx          |   110 +
 .../src/pages/ConsumeDetail/Info/config.tsx        |    66 +
 .../src/pages/ConsumeDetail/Info/index.tsx         |   123 +
 inlong-website/src/pages/ConsumeDetail/common.d.ts |    28 +
 inlong-website/src/pages/ConsumeDetail/index.tsx   |    73 +
 inlong-website/src/pages/Error/404.tsx             |    24 +
 inlong-website/src/pages/Login/index.module.less   |    70 +
 inlong-website/src/pages/Login/index.tsx           |    98 +
 .../src/pages/UserManagement/DetailModal.tsx       |   122 +
 inlong-website/src/pages/UserManagement/config.tsx |    75 +
 inlong-website/src/pages/UserManagement/index.tsx  |   136 +
 inlong-website/src/pages/UserManagement/status.tsx |    55 +
 inlong-website/src/react-app-env.d.ts              |    29 +
 inlong-website/src/router.tsx                      |   171 +
 inlong-website/src/serviceWorker.ts                |   161 +
 inlong-website/src/setupProxy.js                   |    33 +
 inlong-website/src/themes/antd.var.less            |    71 +
 inlong-website/src/themes/cover.less               |   106 +
 inlong-website/src/themes/index.less               |    26 +
 inlong-website/src/themes/style.less               |    64 +
 inlong-website/src/utils/index.ts                  |   173 +
 inlong-website/src/utils/pattern.ts                |    28 +
 inlong-website/src/utils/request.ts                |   109 +
 .../src/utils/requestConcurrentMiddleware.ts       |    60 +
 inlong-website/tsconfig.json                       |    34 +
 inlong-website/tsconfig.paths.json                 |     8 +
 pom.xml                                            |   658 +-
 resources/assets/scripts/brokerDetail.js           |   355 -
 resources/assets/scripts/brokerList.js             |   356 -
 resources/assets/scripts/clusters.js               |    80 -
 resources/assets/scripts/common/helper.js          |   316 -
 resources/assets/scripts/common/module.js          |  1367 --
 resources/assets/scripts/subscribe.js              |   117 -
 resources/assets/scripts/subscribeDetail.js        |   130 -
 resources/assets/scripts/topicDetail.js            |   471 -
 resources/assets/scripts/topicList.js              |   250 -
 .../tubemq-client-cpp/proto/BrokerService.proto    |   136 -
 .../tubemq-client-cpp/proto/MasterService.proto    |   192 -
 .../tubemq-client-cpp/proto/RPC.proto              |    62 -
 .../tubemq-client-cpp/proto/readme.md              |    20 -
 .../tubemq-client-cpp/src/logger.cc                |    80 -
 .../tubemq-client-cpp/tests/log/CMakeLists.txt     |    21 -
 .../tubemq-client-cpp/tests/log/main.cc            |    62 -
 .../tubemq-client-python/__init__.py               |    18 -
 .../src/python/tubemq/client.py                    |    91 -
 tubemq-client/pom.xml                              |   158 -
 .../org/apache/tubemq/client/common/PeerInfo.java  |    69 -
 .../tubemq/client/common/TClientConstants.java     |    40 -
 .../tubemq/client/config/ConsumerConfig.java       |   276 -
 .../tubemq/client/config/TubeClientConfig.java     |   593 -
 .../client/config/TubeClientConfigUtils.java       |    59 -
 .../client/consumer/BaseMessageConsumer.java       |  1769 --
 .../tubemq/client/consumer/ClientSubInfo.java      |   171 -
 .../tubemq/client/consumer/ConsumeOffsetInfo.java  |    84 -
 .../tubemq/client/consumer/ConsumePosition.java    |    49 -
 .../tubemq/client/consumer/ConsumerResult.java     |   106 -
 .../client/consumer/ConsumerSamplePrint.java       |    74 -
 .../tubemq/client/consumer/FetchContext.java       |   108 -
 .../tubemq/client/consumer/MessageConsumer.java    |    84 -
 .../client/consumer/MessageFetchManager.java       |   227 -
 .../tubemq/client/consumer/MessageListener.java    |    34 -
 .../tubemq/client/consumer/MessageV2Listener.java  |    34 -
 .../tubemq/client/consumer/PartitionExt.java       |   308 -
 .../client/consumer/PartitionSelectResult.java     |    82 -
 .../client/consumer/PullMessageConsumer.java       |    42 -
 .../client/consumer/PushMessageConsumer.java       |    35 -
 .../tubemq/client/consumer/RmtDataCache.java       |   926 -
 .../client/consumer/SimplePullMessageConsumer.java |   244 -
 .../client/consumer/SimplePushMessageConsumer.java |   303 -
 .../tubemq/client/consumer/TopicProcessor.java     |    55 -
 .../client/exception/TubeClientException.java      |    45 -
 .../tubemq/client/factory/InnerSessionFactory.java |    32 -
 .../client/factory/MessageSessionFactory.java      |    43 -
 .../client/factory/TubeBaseSessionFactory.java     |   199 -
 .../client/factory/TubeMultiSessionFactory.java    |    88 -
 .../client/factory/TubeSingleSessionFactory.java   |   109 -
 .../tubemq/client/producer/AllowedSetting.java     |    61 -
 .../tubemq/client/producer/MessageProducer.java    |    44 -
 .../client/producer/MessageSentCallback.java       |    27 -
 .../tubemq/client/producer/MessageSentResult.java  |    88 -
 .../tubemq/client/producer/PartitionRouter.java    |    29 -
 .../tubemq/client/producer/ProducerManager.java    |   738 -
 .../client/producer/RoundRobinPartitionRouter.java |    62 -
 .../client/producer/SimpleMessageProducer.java     |   417 -
 .../producer/qltystats/BrokerRcvQltyStats.java     |    40 -
 .../producer/qltystats/BrokerStatsDltTuple.java    |    56 -
 .../producer/qltystats/BrokerStatsItemSet.java     |   109 -
 .../qltystats/DefaultBrokerRcvQltyStats.java       |   466 -
 tubemq-client/src/saveClientVersion.cmd            |    34 -
 tubemq-client/src/saveClientVersion.sh             |    38 -
 .../client/consumer/MessageFetchManagerTest.java   |    57 -
 .../tubemq/client/consumer/PartitionExtTest.java   |    80 -
 .../tubemq/client/consumer/RmtDataCacheTest.java   |    76 -
 .../client/factory/TubeBaseSessionFactoryTest.java |    79 -
 .../factory/TubeMultiSessionFactoryTest.java       |    48 -
 .../factory/TubeSingleSessionFactoryTest.java      |    46 -
 .../producer/RoundRobinPartitionRouterTest.java    |    53 -
 .../qltystats/DefaultBrokerRcvQltyStatsTest.java   |    71 -
 tubemq-connectors/pom.xml                          |    77 -
 tubemq-connectors/tubemq-connector-flink/pom.xml   |   105 -
 .../flink/connectors/tubemq/TubemqOptions.java     |    62 -
 .../connectors/tubemq/TubemqSinkFunction.java      |   181 -
 .../connectors/tubemq/TubemqSourceFunction.java    |   356 -
 .../flink/connectors/tubemq/TubemqTableSink.java   |   139 -
 .../flink/connectors/tubemq/TubemqTableSource.java |   226 -
 tubemq-connectors/tubemq-connector-flume/pom.xml   |    63 -
 .../org/apache/flume/sink/tubemq/EventStat.java    |    63 -
 .../org/apache/flume/sink/tubemq/TubemqSink.java   |   424 -
 .../apache/flume/sink/tubemq/TestTubemqSink.java   |   110 -
 tubemq-connectors/tubemq-connector-spark/pom.xml   |    72 -
 .../tubemq/connector/spark/ConsumerConf.scala      |   159 -
 .../connector/spark/JavaTubeMQProvider.scala       |    53 -
 .../tubemq/connector/spark/ProducerConf.scala      |    76 -
 .../tubemq/connector/spark/TubeMQConsumer.scala    |   112 -
 .../tubemq/connector/spark/TubeMQFunctions.scala   |   115 -
 .../tubemq/connector/spark/TubeMQProducer.scala    |   119 -
 .../tubemq/connector/spark/TubeMQProvider.scala    |    79 -
 tubemq-core/pom.xml                                |   133 -
 .../java/org/apache/tubemq/corebase/Message.java   |   364 -
 .../org/apache/tubemq/corebase/MessageExt.java     |    26 -
 .../org/apache/tubemq/corebase/Shutdownable.java   |    23 -
 .../org/apache/tubemq/corebase/TBaseConstants.java |    82 -
 .../apache/tubemq/corebase/TErrCodeConstants.java  |    53 -
 .../org/apache/tubemq/corebase/TokenConstants.java |    42 -
 .../aaaclient/ClientAuthenticateHandler.java       |    28 -
 .../aaaclient/SimpleClientAuthenticateHandler.java |    62 -
 .../tubemq/corebase/balance/ConsumerEvent.java     |    85 -
 .../tubemq/corebase/balance/EventStatus.java       |    69 -
 .../apache/tubemq/corebase/balance/EventType.java  |    76 -
 .../apache/tubemq/corebase/cluster/BrokerInfo.java |   238 -
 .../tubemq/corebase/cluster/ConsumerInfo.java      |   166 -
 .../apache/tubemq/corebase/cluster/MasterInfo.java |   158 -
 .../tubemq/corebase/cluster/NodeAddrInfo.java      |   102 -
 .../apache/tubemq/corebase/cluster/Partition.java  |   236 -
 .../tubemq/corebase/cluster/ProducerInfo.java      |    97 -
 .../tubemq/corebase/cluster/SubscribeInfo.java     |   122 -
 .../apache/tubemq/corebase/cluster/TopicInfo.java  |   161 -
 .../apache/tubemq/corebase/config/TLSConfig.java   |   145 -
 .../corebase/daemon/AbstractDaemonService.java     |    82 -
 .../org/apache/tubemq/corebase/daemon/Service.java |    27 -
 .../corebase/exception/AddressException.java       |    38 -
 .../tubemq/corebase/policies/FlowCtrlItem.java     |   183 -
 .../tubemq/corebase/policies/FlowCtrlResult.java   |    38 -
 .../corebase/policies/FlowCtrlRuleHandler.java     |   651 -
 .../tubemq/corebase/policies/SSDCtrlResult.java    |    35 -
 .../tubemq/corebase/utils/AbstractSamplePrint.java |    54 -
 .../apache/tubemq/corebase/utils/AddressUtils.java |   276 -
 .../org/apache/tubemq/corebase/utils/CheckSum.java |    33 -
 .../tubemq/corebase/utils/ConcurrentHashSet.java   |    79 -
 .../tubemq/corebase/utils/DataConverterUtil.java   |   241 -
 .../tubemq/corebase/utils/MessageFlagUtils.java    |    36 -
 .../apache/tubemq/corebase/utils/MixedUtils.java   |   105 -
 .../org/apache/tubemq/corebase/utils/RegexDef.java |    60 -
 .../tubemq/corebase/utils/ServiceStatusHolder.java |   170 -
 .../tubemq/corebase/utils/SettingValidUtils.java   |    38 -
 .../apache/tubemq/corebase/utils/TStringUtils.java |   199 -
 .../apache/tubemq/corebase/utils/ThreadUtils.java  |   128 -
 .../org/apache/tubemq/corebase/utils/Tuple2.java   |    72 -
 .../org/apache/tubemq/corebase/utils/Tuple3.java   |    60 -
 .../tubemq/corerpc/AbstractServiceInvoker.java     |    96 -
 .../apache/tubemq/corerpc/RemoteConErrStats.java   |    63 -
 .../org/apache/tubemq/corerpc/RequestWrapper.java  |   116 -
 .../org/apache/tubemq/corerpc/ResponseWrapper.java |   175 -
 .../java/org/apache/tubemq/corerpc/RpcConfig.java  |    86 -
 .../org/apache/tubemq/corerpc/RpcConstants.java    |   134 -
 .../org/apache/tubemq/corerpc/RpcDataPack.java     |    53 -
 .../apache/tubemq/corerpc/RpcServiceFactory.java   |   595 -
 .../tubemq/corerpc/RpcServiceFailoverInvoker.java  |   152 -
 .../apache/tubemq/corerpc/RpcServiceInvoker.java   |    83 -
 .../corerpc/benchemark/DefaultSimpleService.java   |    27 -
 .../benchemark/RcpService4BenchmarkClient.java     |    81 -
 .../benchemark/RpcService4BenchmarkServer.java     |    41 -
 .../tubemq/corerpc/benchemark/SimpleService.java   |    24 -
 .../apache/tubemq/corerpc/client/CallFuture.java   |   166 -
 .../org/apache/tubemq/corerpc/client/Callback.java |    40 -
 .../org/apache/tubemq/corerpc/client/Client.java   |    44 -
 .../tubemq/corerpc/client/ClientFactory.java       |    34 -
 .../apache/tubemq/corerpc/codec/PbEnDecoder.java   |   303 -
 .../org/apache/tubemq/corerpc/codec/Protocol.txt   |    19 -
 .../corerpc/exception/ClientClosedException.java   |    36 -
 .../corerpc/exception/LocalConnException.java      |    40 -
 .../tubemq/corerpc/exception/NetworkException.java |    41 -
 .../corerpc/exception/OverflowException.java       |    41 -
 .../tubemq/corerpc/exception/RemoteException.java  |    39 -
 .../corerpc/exception/ServerNotReadyException.java |    29 -
 .../exception/ServiceStoppingException.java        |    32 -
 .../tubemq/corerpc/exception/StandbyException.java |    40 -
 .../exception/UnknownProtocolException.java        |    41 -
 .../corerpc/netty/ByteBufferInputStream.java       |   105 -
 .../corerpc/netty/ByteBufferOutputStream.java      |   118 -
 .../apache/tubemq/corerpc/netty/NettyClient.java   |   428 -
 .../tubemq/corerpc/netty/NettyClientFactory.java   |   319 -
 .../tubemq/corerpc/netty/NettyProtocolDecoder.java |   158 -
 .../tubemq/corerpc/netty/NettyProtocolEncoder.java |    62 -
 .../tubemq/corerpc/netty/NettyRequestContext.java  |   162 -
 .../tubemq/corerpc/netty/NettyRpcServer.java       |   400 -
 .../tubemq/corerpc/netty/ReadTimeoutHandler.java   |   245 -
 .../apache/tubemq/corerpc/protocol/Protocol.java   |    34 -
 .../tubemq/corerpc/protocol/ProtocolFactory.java   |    46 -
 .../tubemq/corerpc/protocol/RpcProtocol.java       |   180 -
 .../tubemq/corerpc/server/RequestContext.java      |    34 -
 .../apache/tubemq/corerpc/server/RpcServer.java    |    27 -
 .../tubemq/corerpc/server/ServiceRpcServer.java    |    33 -
 .../tubemq/corerpc/service/BrokerReadService.java  |    37 -
 .../tubemq/corerpc/service/BrokerWriteService.java |    36 -
 .../tubemq/corerpc/service/MasterService.java      |    52 -
 .../org/apache/tubemq/corerpc/utils/MixUtils.java  |    74 -
 .../tubemq/corerpc/utils/TSSLEngineUtil.java       |    89 -
 tubemq-core/src/main/proto/BrokerService.proto     |   142 -
 tubemq-core/src/main/proto/MasterService.proto     |   432 -
 tubemq-core/src/main/proto/RPC.proto               |    62 -
 .../corebase/policies/TestFlowCtrlRuleHandler.java |    86 -
 .../tubemq/corebase/utils/AddressUtilsTest.java    |    30 -
 .../corebase/utils/ConcurrentHashSetTest.java      |    49 -
 .../corerpc/codec/DataConverterUtilTest.java       |    74 -
 .../tubemq/corerpc/codec/PbEnDecoderTest.java      |    47 -
 .../corerpc/netty/NettyProtocolEncoderTest.java    |    57 -
 .../tubemq/corerpc/utils/TSSLEngineUtilTest.java   |    54 -
 tubemq-docker/README.md                            |     8 -
 tubemq-docker/pom.xml                              |    73 -
 tubemq-docker/tubemq-all/pom.xml                   |   103 -
 tubemq-docker/tubemq-build/Dockerfile              |    37 -
 tubemq-docker/tubemq-build/pom.xml                 |    72 -
 tubemq-docker/tubemq-build/settings.xml            |   113 -
 tubemq-docker/tubemq-cpp/pom.xml                   |    72 -
 tubemq-docker/tubemq-k8s/.helmignore               |    21 -
 tubemq-docker/tubemq-k8s/Chart.yaml                |    31 -
 tubemq-example/pom.xml                             |    70 -
 .../tubemq/example/MAMessageProducerExample.java   |   250 -
 .../tubemq/example/MessageConsumerExample.java     |   154 -
 .../tubemq/example/MessageProducerExample.java     |   204 -
 .../tubemq/example/MessagePullConsumerExample.java |   153 -
 .../example/MessagePullSetConsumerExample.java     |   190 -
 .../org/apache/tubemq/example/MsgRecvStats.java    |    84 -
 tubemq-server/pom.xml                              |   240 -
 .../main/java/org/apache/tubemq/server/Server.java |    27 -
 .../java/org/apache/tubemq/server/Stoppable.java   |    25 -
 .../apache/tubemq/server/broker/BrokerConfig.java  |   457 -
 .../tubemq/server/broker/BrokerServiceServer.java  |  1267 --
 .../apache/tubemq/server/broker/TubeBroker.java    |   637 -
 .../broker/exception/OffsetStoreException.java     |    47 -
 .../server/broker/exception/StartupException.java  |    46 -
 .../server/broker/metadata/BrokerDefMetadata.java  |   189 -
 .../broker/metadata/BrokerMetadataManager.java     |   349 -
 .../broker/metadata/ClusterConfigHolder.java       |    81 -
 .../server/broker/metadata/MetadataManager.java    |    85 -
 .../server/broker/metadata/TopicMetadata.java      |   482 -
 .../server/broker/msgstore/MessageStore.java       |   751 -
 .../broker/msgstore/MessageStoreManager.java       |   786 -
 .../server/broker/msgstore/StoreService.java       |    44 -
 .../server/broker/msgstore/disk/FileSegment.java   |   492 -
 .../broker/msgstore/disk/FileSegmentList.java      |   302 -
 .../broker/msgstore/disk/GetMessageResult.java     |   184 -
 .../broker/msgstore/disk/MsgFileStatisInfo.java    |   180 -
 .../server/broker/msgstore/disk/MsgFileStore.java  |   592 -
 .../server/broker/msgstore/disk/Segment.java       |    67 -
 .../server/broker/msgstore/disk/SegmentList.java   |    55 -
 .../server/broker/msgstore/disk/SegmentType.java   |    25 -
 .../broker/msgstore/mem/GetCacheMsgResult.java     |    58 -
 .../broker/msgstore/mem/MsgMemStatisInfo.java      |   263 -
 .../server/broker/msgstore/mem/MsgMemStore.java    |   333 -
 .../server/broker/nodeinfo/ConsumerNodeInfo.java   |   262 -
 .../server/broker/offset/DefaultOffsetManager.java |   714 -
 .../tubemq/server/broker/offset/OffsetService.java |    79 -
 .../tubemq/server/broker/stats/CountItem.java      |    55 -
 .../tubemq/server/broker/stats/CountService.java   |    30 -
 .../server/broker/stats/GroupCountService.java     |   147 -
 .../server/broker/utils/BrokerSamplePrint.java     |    83 -
 .../tubemq/server/broker/utils/DataStoreUtils.java |   201 -
 .../server/broker/utils/DiskSamplePrint.java       |   120 -
 .../server/broker/utils/GroupOffsetInfo.java       |    85 -
 .../server/broker/utils/TopicPubStoreInfo.java     |    55 -
 .../server/broker/web/AbstractWebHandler.java      |    92 -
 .../server/broker/web/BrokerAdminServlet.java      |  1210 -
 .../apache/tubemq/server/broker/web/WebServer.java |    57 -
 .../tubemq/server/common/TServerConstants.java     |    50 -
 .../tubemq/server/common/TStatusConstants.java     |    48 -
 .../common/aaaserver/CertificateBrokerHandler.java |    51 -
 .../common/aaaserver/CertificateMasterHandler.java |    39 -
 .../server/common/aaaserver/CertifiedResult.java   |    58 -
 .../aaaserver/SimpleCertificateBrokerHandler.java  |   205 -
 .../aaaserver/SimpleCertificateMasterHandler.java  |   176 -
 .../common/exception/HeartbeatException.java       |    39 -
 .../common/exception/IllegalConfigException.java   |    39 -
 .../tubemq/server/common/fielddef/CliArgDef.java   |   131 -
 .../tubemq/server/common/fielddef/WebFieldDef.java |   276 -
 .../server/common/fielddef/WebFieldType.java       |    64 -
 .../common/fileconfig/AbstractFileConfig.java      |   337 -
 .../common/fileconfig/MasterReplicationConfig.java |   141 -
 .../tubemq/server/common/fileconfig/ZKConfig.java  |   103 -
 .../server/common/heartbeat/HeartbeatManager.java  |   300 -
 .../server/common/heartbeat/TimeoutInfo.java       |    55 -
 .../server/common/heartbeat/TimeoutListener.java   |    23 -
 .../server/common/offsetstorage/OffsetStorage.java |    45 -
 .../common/offsetstorage/OffsetStorageInfo.java    |   157 -
 .../common/offsetstorage/ZkOffsetStorage.java      |   374 -
 .../common/offsetstorage/zookeeper/Abortable.java  |    40 -
 .../zookeeper/RecoverableZooKeeper.java            |   575 -
 .../offsetstorage/zookeeper/RetryCounter.java      |    69 -
 .../zookeeper/RetryCounterFactory.java             |    39 -
 .../common/offsetstorage/zookeeper/ZKUtil.java     |   515 -
 .../zookeeper/ZooKeeperConnectionException.java    |    53 -
 .../offsetstorage/zookeeper/ZooKeeperListener.java |    82 -
 .../offsetstorage/zookeeper/ZooKeeperWatcher.java  |   441 -
 .../server/common/paramcheck/PBParameterUtils.java |   614 -
 .../server/common/paramcheck/ParamCheckResult.java |    59 -
 .../tubemq/server/common/utils/AppendResult.java   |    64 -
 .../apache/tubemq/server/common/utils/Bytes.java   |   275 -
 .../tubemq/server/common/utils/FileUtil.java       |    72 -
 .../tubemq/server/common/utils/HasThread.java      |    94 -
 .../tubemq/server/common/utils/HashedBytes.java    |    62 -
 .../tubemq/server/common/utils/HttpUtils.java      |   112 -
 .../tubemq/server/common/utils/IdWorker.java       |    65 -
 .../tubemq/server/common/utils/ProcessResult.java  |    63 -
 .../apache/tubemq/server/common/utils/RowLock.java |   126 -
 .../apache/tubemq/server/common/utils/Sleeper.java |   113 -
 .../server/common/utils/WebParameterUtils.java     |  1472 --
 .../server/common/utils/WritableComparator.java    |    82 -
 .../server/common/webbase/WebMethodMapper.java     |    84 -
 .../apache/tubemq/server/master/MasterConfig.java  |   625 -
 .../org/apache/tubemq/server/master/TMaster.java   |  2554 ---
 .../server/master/balance/DefaultLoadBalancer.java |   738 -
 .../tubemq/server/master/balance/LoadBalancer.java |    71 -
 .../server/master/bdbstore/BdbStoreService.java    |   113 -
 .../master/bdbstore/DefaultBdbStoreService.java    |  1560 --
 .../server/master/bdbstore/MasterGroupStatus.java  |    72 -
 .../server/master/bdbstore/MasterNodeInfo.java     |    79 -
 .../bdbstore/bdbentitys/BdbBlackGroupEntity.java   |   122 -
 .../bdbstore/bdbentitys/BdbBrokerConfEntity.java   |   491 -
 .../bdbentitys/BdbClusterSettingEntity.java        |   340 -
 .../bdbentitys/BdbConsumeGroupSettingEntity.java   |   151 -
 .../bdbentitys/BdbConsumerGroupEntity.java         |   121 -
 .../bdbentitys/BdbGroupFilterCondEntity.java       |   139 -
 .../bdbentitys/BdbGroupFlowCtrlEntity.java         |   245 -
 .../bdbentitys/BdbTopicAuthControlEntity.java      |   123 -
 .../bdbstore/bdbentitys/BdbTopicConfEntity.java    |   433 -
 .../nodemanage/nodebroker/BrokerConfManager.java   |  2082 --
 .../nodemanage/nodebroker/BrokerInfoHolder.java    |   400 -
 .../nodebroker/BrokerSyncStatusInfo.java           |   825 -
 .../nodemanage/nodebroker/TargetValidResult.java   |    32 -
 .../nodemanage/nodebroker/TopicPSInfoManager.java  |   352 -
 .../nodemanage/nodeconsumer/ConsumerBandInfo.java  |   496 -
 .../nodeconsumer/ConsumerEventManager.java         |   269 -
 .../nodeconsumer/ConsumerInfoHolder.java           |   480 -
 .../nodemanage/nodeconsumer/NodeRebInfo.java       |    99 -
 .../nodemanage/nodeconsumer/RebProcessInfo.java    |    45 -
 .../nodeproducer/ProducerInfoHolder.java           |    61 -
 .../server/master/utils/BdbStoreSamplePrint.java   |    99 -
 .../apache/tubemq/server/master/utils/Chore.java   |   127 -
 .../master/utils/SimpleVisitTokenManager.java      |    86 -
 .../server/master/web/MasterStatusCheckFilter.java |    78 -
 .../tubemq/server/master/web/UserAuthFilter.java   |    49 -
 .../apache/tubemq/server/master/web/WebServer.java |   115 -
 .../server/master/web/action/layout/Default.java   |    29 -
 .../server/master/web/action/screen/Master.java    |   329 -
 .../server/master/web/action/screen/Tubeweb.java   |    48 -
 .../server/master/web/action/screen/Webapi.java    |   133 -
 .../web/action/screen/cluster/ClusterManager.java  |    63 -
 .../web/action/screen/config/BrokerDetail.java     |    36 -
 .../web/action/screen/config/BrokerList.java       |   124 -
 .../web/action/screen/config/TopicDetail.java      |    36 -
 .../master/web/action/screen/config/TopicList.java |    36 -
 .../master/web/action/screen/consume/Detail.java   |    36 -
 .../server/master/web/common/BaseResult.java       |   603 -
 .../master/web/common/BrokerQueryResult.java       |    24 -
 .../master/web/common/ClusterQueryResult.java      |    24 -
 .../server/master/web/common/QueryResult.java      |   105 -
 .../master/web/handler/AbstractWebHandler.java     |    56 -
 .../web/handler/WebAdminFlowRuleHandler.java       |   520 -
 .../web/handler/WebAdminGroupCtrlHandler.java      |  1553 --
 .../web/handler/WebAdminTopicAuthHandler.java      |   410 -
 .../web/handler/WebBrokerDefConfHandler.java       |  1665 --
 .../web/handler/WebBrokerTopicConfHandler.java     |  1548 --
 .../master/web/handler/WebMasterInfoHandler.java   |   329 -
 .../master/web/handler/WebOtherInfoHandler.java    |   335 -
 .../tubemq/server/master/web/model/BrokerVO.java   |   106 -
 .../server/master/web/model/ClusterGroupVO.java    |    73 -
 .../server/master/web/model/ClusterNodeVO.java     |    80 -
 .../tubemq/server/master/web/simplemvc/Action.java |    24 -
 .../server/master/web/simplemvc/Context.java       |    38 -
 .../server/master/web/simplemvc/ControlTool.java   |    49 -
 .../server/master/web/simplemvc/MappedContext.java |    72 -
 .../web/simplemvc/MultipartHttpServletRequest.java |    80 -
 .../master/web/simplemvc/RequestContext.java       |   138 -
 .../master/web/simplemvc/RequestDispatcher.java    |   293 -
 .../master/web/simplemvc/TemplateEngine.java       |    32 -
 .../web/simplemvc/VelocityTemplateEngine.java      |    70 -
 .../server/master/web/simplemvc/WebApiServlet.java |   174 -
 .../server/master/web/simplemvc/WebFilter.java     |    54 -
 .../web/simplemvc/conf/ConfigFileParser.java       |   158 -
 .../master/web/simplemvc/conf/WebConfig.java       |   153 -
 .../exception/InvalidConfigException.java          |    38 -
 .../exception/TemplateNotFoundException.java       |    38 -
 .../apache/tubemq/server/tools/BdbGroupAdmin.java  |   108 -
 .../apache/tubemq/server/tools/BrokerStartup.java  |    48 -
 .../org/apache/tubemq/server/tools/CliUtils.java   |    72 -
 .../apache/tubemq/server/tools/MasterStartup.java  |    49 -
 .../tubemq/server/tools/StoreRepairAdmin.java      |   417 -
 .../tubemq/server/tools/cli/CliAbstractBase.java   |    76 -
 .../tubemq/server/tools/cli/CliBrokerAdmin.java    |   113 -
 .../tubemq/server/tools/cli/CliConsumer.java       |   395 -
 .../tubemq/server/tools/cli/CliProducer.java       |   373 -
 tubemq-server/src/saveServerVersion.cmd            |    33 -
 tubemq-server/src/saveServerVersion.sh             |    36 -
 .../broker/metadata/BrokerMetadataManagerTest.java |    74 -
 .../broker/msgstore/disk/FileSegmentListTest.java  |    86 -
 .../broker/msgstore/disk/FileSegmentTest.java      |    84 -
 .../broker/msgstore/mem/MsgMemStoreTest.java       |    58 -
 .../server/broker/stats/GroupCountServiceTest.java |    39 -
 .../server/broker/utils/DataStoreUtilsTest.java    |    39 -
 .../tubemq/server/common/HeartbeatManagerTest.java |    88 -
 .../tubemq/server/common/PBParameterTest.java      |    69 -
 .../tubemq/server/common/WebParameterTest.java     |    66 -
 .../tubemq/server/master/MasterConfigTest.java     |   107 -
 .../nodebroker/BrokerInfoHolderTest.java           |    46 -
 .../nodebroker/TopicPSInfoManagerTest.java         |    78 -
 .../nodeconsumer/ConsumerEventManagerTest.java     |    56 -
 2241 files changed, 227561 insertions(+), 75807 deletions(-)

diff --git a/.asf.yaml b/.asf.yaml
index c75147b..de710ce 100644
--- a/.asf.yaml
+++ b/.asf.yaml
@@ -4,16 +4,16 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# <p>
+#
 # http://www.apache.org/licenses/LICENSE-2.0
-# <p>
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-# This file controls the integration of TubeMQ project with ASF infrastructure. Refer to
+# This file controls the integration of InLong project with ASF infrastructure. Refer to
 # https://cwiki.apache.org/confluence/display/INFRA/.asf.yaml+features+for+git+repositories for
 # details. Be careful when changing the contents of this file since it may affect many developers
 # of the project and make sure to discuss the changes with dev@ before committing.
diff --git a/.gitignore b/.gitignore
index eb1eb2b..3eab744 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,13 +1,49 @@
-.idea/
-target/
-*.iml
-/.metadata/
+# Common
 *.class
 !.github/
 !.gitignore
 !.gitkeep
 !.travis.yml
+
+# Eclipse
+.classpath
+.project
+.settings/
+.recommenders/
+.factorypath
+/.metadata/
+
+# Intellij
+.idea/
+*.iml
+*.iws
+
+# NetBeans
+nb-configuration.xml
+
+# Mac
+**/.DS_Store
+.java-version
+
+# VisualStudioCode artifacts
+.vscode/
+
+# Maven
+log/
+target/
+target/dist/
+
+# Python
 venv/
 eggs/
 wheels/
-tubemq-client-twins/tubemq-client-cpp/build/
\ No newline at end of file
+*.pyc
+
+# C/C++
+inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/build/
+
+# Gradle
+.gradle
+
+# Log
+*.log
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index 417049c..9793f02 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,4 @@
-[submodule "tubemq-client-twins/tubemq-client-cpp/third_party/rapidjson"]
-	path = tubemq-client-twins/tubemq-client-cpp/third_party/rapidjson
+[submodule "inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/third_party/rapidjson"]
+	path = inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/third_party/rapidjson
 	url = https://github.com/Tencent/rapidjson.git
 	tag = v1.1.0
diff --git a/.travis.yml b/.travis.yml
index 9e4e758..9af1111 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -23,7 +23,7 @@ jdk:
   - openjdk8
 
 before_cache:
-  - rm -rf $HOME/.m2/repository/org/apache/tubemq/
+  - rm -rf $HOME/.m2/repository/org/apache/inlong/
 
 cache:
   directories:
diff --git a/CHANGES.md b/CHANGES.md
index 12d3903..f145f46 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,4 +1,4 @@
-# TubeMQ Changelog
+# InLong Changelog
 
 <!---
 # Licensed to the Apache Software Foundation (ASF) under one
@@ -26,87 +26,87 @@
 ### IMPROVEMENTS:
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-430](https://issues.apache.org/jira/browse/TUBEMQ-430) | Optimizing the implementation of HTTP API for broke  | Major |
-| [TUBEMQ-445](https://issues.apache.org/jira/browse/TUBEMQ-445) | Adjust the status check default sleep interval of pullConsumeReadyChkSliceMs  | Major |
-| [TUBEMQ-448](https://issues.apache.org/jira/browse/TUBEMQ-448) | Add Committer and PPMC operation process  | Major |
-| [TUBEMQ-449](https://issues.apache.org/jira/browse/TUBEMQ-449) | Adjust Example implementation  | Major |
-| [TUBEMQ-452](https://issues.apache.org/jira/browse/TUBEMQ-452) | Optimize rebalance performance | Major |
-| [TUBEMQ-467](https://issues.apache.org/jira/browse/TUBEMQ-467) | Add WEB APIs of Master and Broker | Major |
-| [TUBEMQ-489](https://issues.apache.org/jira/browse/TUBEMQ-489) | Add the maximum message length parameter setting | Major |
-| [TUBEMQ-495](https://issues.apache.org/jira/browse/TUBEMQ-495) | Code implementation adjustment based on SpotBugs check | Major |
-| [TUBEMQ-511](https://issues.apache.org/jira/browse/TUBEMQ-511) | Replace the conditional operator (?:) with mid()  | Major |
-| [TUBEMQ-512](https://issues.apache.org/jira/browse/TUBEMQ-512) | Add package length control based on Topic  | Major |
-| [TUBEMQ-515](https://issues.apache.org/jira/browse/TUBEMQ-515) | Add cluster Topic view web api  | Major |
+| [INLONG-430](https://issues.apache.org/jira/browse/INLONG-430) | Optimizing the implementation of HTTP API for broke  | Major |
+| [INLONG-445](https://issues.apache.org/jira/browse/INLONG-445) | Adjust the status check default sleep interval of pullConsumeReadyChkSliceMs  | Major |
+| [INLONG-448](https://issues.apache.org/jira/browse/INLONG-448) | Add Committer and PPMC operation process  | Major |
+| [INLONG-449](https://issues.apache.org/jira/browse/INLONG-449) | Adjust Example implementation  | Major |
+| [INLONG-452](https://issues.apache.org/jira/browse/INLONG-452) | Optimize rebalance performance | Major |
+| [INLONG-467](https://issues.apache.org/jira/browse/INLONG-467) | Add WEB APIs of Master and Broker | Major |
+| [INLONG-489](https://issues.apache.org/jira/browse/INLONG-489) | Add the maximum message length parameter setting | Major |
+| [INLONG-495](https://issues.apache.org/jira/browse/INLONG-495) | Code implementation adjustment based on SpotBugs check | Major |
+| [INLONG-511](https://issues.apache.org/jira/browse/INLONG-511) | Replace the conditional operator (?:) with mid()  | Major |
+| [INLONG-512](https://issues.apache.org/jira/browse/INLONG-512) | Add package length control based on Topic  | Major |
+| [INLONG-515](https://issues.apache.org/jira/browse/INLONG-515) | Add cluster Topic view web api  | Major |
 
 ### BUG FIXES:
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-437](https://issues.apache.org/jira/browse/TUBEMQ-437) | Fix tubemq table source sink factory instance creating problem | Major |
-| [TUBEMQ-441](https://issues.apache.org/jira/browse/TUBEMQ-441) | An error occurred when using the Tubemq class to create a sink table | Major |
-| [TUBEMQ-442](https://issues.apache.org/jira/browse/TUBEMQ-442) | Modifying the jvm parameters when the broker starts does not take effect  | Major    |
-| [TUBEMQ-443](https://issues.apache.org/jira/browse/TUBEMQ-443) | TubemqSourceFunction class prints too many logs problem | Major |
-| [TUBEMQ-446](https://issues.apache.org/jira/browse/TUBEMQ-446) | Small bugs fix that do not affect the main logics | Major |
-| [TUBEMQ-450](https://issues.apache.org/jira/browse/TUBEMQ-450) | TubeClientException: Generate producer id failed  | Major |
-| [TUBEMQ-453](https://issues.apache.org/jira/browse/TUBEMQ-453) | TubemqSourceFunction class prints too many logs problem | Major |
-| [TUBEMQ-506](https://issues.apache.org/jira/browse/TUBEMQ-506) | cmakelist error | Major |
-| [TUBEMQ-510](https://issues.apache.org/jira/browse/TUBEMQ-510) | Found a bug in MessageProducerExample class | Major |
-| [TUBEMQ-518](https://issues.apache.org/jira/browse/TUBEMQ-518) | fix parameter pass error | Major |
-| [TUBEMQ-526](https://issues.apache.org/jira/browse/TUBEMQ-526) | Adjust the packaging script and version check list, remove the "-WIP" tag | Major |
-| [TUBEMQ-555](https://issues.apache.org/jira/browse/TUBEMQ-555) | short session data can only be written to a specific partition | Major |
-| [TUBEMQ-556](https://issues.apache.org/jira/browse/TUBEMQ-556) | Index value is bigger than the actual number of records | Low |
+| [INLONG-437](https://issues.apache.org/jira/browse/INLONG-437) | Fix tubemq table source sink factory instance creating problem | Major |
+| [INLONG-441](https://issues.apache.org/jira/browse/INLONG-441) | An error occurred when using the Tubemq class to create a sink table | Major |
+| [INLONG-442](https://issues.apache.org/jira/browse/INLONG-442) | Modifying the jvm parameters when the broker starts does not take effect  | Major    |
+| [INLONG-443](https://issues.apache.org/jira/browse/INLONG-443) | TubemqSourceFunction class prints too many logs problem | Major |
+| [INLONG-446](https://issues.apache.org/jira/browse/INLONG-446) | Small bugs fix that do not affect the main logics | Major |
+| [INLONG-450](https://issues.apache.org/jira/browse/INLONG-450) | TubeClientException: Generate producer id failed  | Major |
+| [INLONG-453](https://issues.apache.org/jira/browse/INLONG-453) | TubemqSourceFunction class prints too many logs problem | Major |
+| [INLONG-506](https://issues.apache.org/jira/browse/INLONG-506) | cmakelist error | Major |
+| [INLONG-510](https://issues.apache.org/jira/browse/INLONG-510) | Found a bug in MessageProducerExample class | Major |
+| [INLONG-518](https://issues.apache.org/jira/browse/INLONG-518) | fix parameter pass error | Major |
+| [INLONG-526](https://issues.apache.org/jira/browse/INLONG-526) | Adjust the packaging script and version check list, remove the "-WIP" tag | Major |
+| [INLONG-555](https://issues.apache.org/jira/browse/INLONG-555) | short session data can only be written to a specific partition | Major |
+| [INLONG-556](https://issues.apache.org/jira/browse/INLONG-556) | Index value is bigger than the actual number of records | Low |
 
 
 ### TASK:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-| [TUBEMQ-505](https://issues.apache.org/jira/browse/TUBEMQ-505) | Remove the "WIP" label of the DISCLAIMER file  | Major |
-| [TUBEMQ-543](https://issues.apache.org/jira/browse/TUBEMQ-543) | Modify the LICENSE statement of multiple files and others  | Major |
-| [TUBEMQ-557](https://issues.apache.org/jira/browse/TUBEMQ-557) | Handle the issues mentioned in the 0.8.0-RC2 review  | Major |
-| [TUBEMQ-562](https://issues.apache.org/jira/browse/TUBEMQ-562) | Update project contents according to the 0.8.0-RC3 review  | Major |
+| [INLONG-505](https://issues.apache.org/jira/browse/INLONG-505) | Remove the "WIP" label of the DISCLAIMER file  | Major |
+| [INLONG-543](https://issues.apache.org/jira/browse/INLONG-543) | Modify the LICENSE statement of multiple files and others  | Major |
+| [INLONG-557](https://issues.apache.org/jira/browse/INLONG-557) | Handle the issues mentioned in the 0.8.0-RC2 review  | Major |
+| [INLONG-562](https://issues.apache.org/jira/browse/INLONG-562) | Update project contents according to the 0.8.0-RC3 review  | Major |
 
 ### SUB-TASK:
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-428](https://issues.apache.org/jira/browse/TUBEMQ-433) | Bumped version to 0.8.0-SNAPSHOT | Major |
-| [TUBEMQ-433](https://issues.apache.org/jira/browse/TUBEMQ-433) | add tubemq perf-consumer/producer scripts | Major |
-| [TUBEMQ-434](https://issues.apache.org/jira/browse/TUBEMQ-434) | Adjust Broker API mapping | Major |
-| [TUBEMQ-435](https://issues.apache.org/jira/browse/TUBEMQ-435) | Create Web field Mapping | Major |
-| [TUBEMQ-436](https://issues.apache.org/jira/browse/TUBEMQ-436) | Adjust Broker's HTTP API implementation | Major |
-| [TUBEMQ-439](https://issues.apache.org/jira/browse/TUBEMQ-439) | Add Cli field Scheme definition | Major |
-| [TUBEMQ-440](https://issues.apache.org/jira/browse/TUBEMQ-440) | Add feature package tube-manager to zip  | Major |
-| [TUBEMQ-444](https://issues.apache.org/jira/browse/TUBEMQ-444) | Add consume and produce Cli commands | Major |
-| [TUBEMQ-447](https://issues.apache.org/jira/browse/TUBEMQ-447) | Add Broker-Admin Cli | Major |
-| [TUBEMQ-451](https://issues.apache.org/jira/browse/TUBEMQ-451) | Replace ConsumeTupleInfo with Tuple2  | Major    |
-| [TUBEMQ-457](https://issues.apache.org/jira/browse/TUBEMQ-457) | There is no need to return StringBuilder in Master.java | Major |
-| [TUBEMQ-463](https://issues.apache.org/jira/browse/TUBEMQ-463) | Adjust Master rebalance process implementation  | Major |
-| [TUBEMQ-464](https://issues.apache.org/jira/browse/TUBEMQ-464) | Add parameter rebalanceParallel in master.ini | Major |
-| [TUBEMQ-470](https://issues.apache.org/jira/browse/TUBEMQ-470) | Add query API of TopicName and BrokerId collection  | Major |
-| [TUBEMQ-471](https://issues.apache.org/jira/browse/TUBEMQ-471) | Add query API Introduction of TopicName and BrokerId collection | Major |
-| [TUBEMQ-472](https://issues.apache.org/jira/browse/TUBEMQ-472) | Adjust Broker's AbstractWebHandler class implementation  | Major |
-| [TUBEMQ-475](https://issues.apache.org/jira/browse/TUBEMQ-475) | add the offset clone api of the consume group  | Major |
-| [TUBEMQ-482](https://issues.apache.org/jira/browse/TUBEMQ-482) | Add offset query api  | Major |
-| [TUBEMQ-484](https://issues.apache.org/jira/browse/TUBEMQ-484) | Add query API for topic publication information  | Major |
-| [TUBEMQ-485](https://issues.apache.org/jira/browse/TUBEMQ-485) | Add the batch setting API of consume group offset  | Major |
-| [TUBEMQ-486](https://issues.apache.org/jira/browse/TUBEMQ-486) | Add the delete API of consumer group offset  | Major |
-| [TUBEMQ-494](https://issues.apache.org/jira/browse/TUBEMQ-494) | Update API interface instruction document | Major |
-| [TUBEMQ-499](https://issues.apache.org/jira/browse/TUBEMQ-499) | Add configure store  | Major |
-| [TUBEMQ-500](https://issues.apache.org/jira/browse/TUBEMQ-500) | Add setting operate API  | Major |
-| [TUBEMQ-501](https://issues.apache.org/jira/browse/TUBEMQ-501) | Adjust max message size check logic  | Major |
-| [TUBEMQ-502](https://issues.apache.org/jira/browse/TUBEMQ-502) | Add setting API interface document  | Major |
-| [TUBEMQ-504](https://issues.apache.org/jira/browse/TUBEMQ-504) | Adjust the WebMethodMapper class interfaces  | Major |
-| [TUBEMQ-508](https://issues.apache.org/jira/browse/TUBEMQ-508) | Optimize Broker's PB parameter check processing logic  | Major |
-| [TUBEMQ-509](https://issues.apache.org/jira/browse/TUBEMQ-509) | Adjust the packet length check when data is loaded  | Major |
-| [TUBEMQ-522](https://issues.apache.org/jira/browse/TUBEMQ-522) | Add admin_query_cluster_topic_view API document  | Major |
-| [TUBEMQ-544](https://issues.apache.org/jira/browse/TUBEMQ-544) | Adjust the LICENSE statement in the client.conf files of Python and C/C++ SDK | Major |
-| [TUBEMQ-546](https://issues.apache.org/jira/browse/TUBEMQ-546) | Restore the original license header of the referenced external source files | Major |
-| [TUBEMQ-547](https://issues.apache.org/jira/browse/TUBEMQ-547) | Recode the implementation of the *Startup.java classes in the Tool package | Major |
-| [TUBEMQ-548](https://issues.apache.org/jira/browse/TUBEMQ-548) | Handle the LICENSE authorization of font files in the resources | Major |
-| [TUBEMQ-549](https://issues.apache.org/jira/browse/TUBEMQ-549) | Handling the problem of compilation failure | Major |
-| [TUBEMQ-550](https://issues.apache.org/jira/browse/TUBEMQ-550) | Adjust LICENSE file content | Major |
-| [TUBEMQ-551](https://issues.apache.org/jira/browse/TUBEMQ-551) | Adjust NOTICE file content | Major |
-| [TUBEMQ-558](https://issues.apache.org/jira/browse/TUBEMQ-558) | Adjust the LICENSE of the file header | Major |
-| [TUBEMQ-559](https://issues.apache.org/jira/browse/TUBEMQ-559) | Update the LICENSE file according to the 0.8.0-RC2 review | Major |
-| [TUBEMQ-560](https://issues.apache.org/jira/browse/TUBEMQ-560) | Remove unprepared modules | Major |
+| [INLONG-428](https://issues.apache.org/jira/browse/INLONG-433) | Bumped version to 0.8.0-SNAPSHOT | Major |
+| [INLONG-433](https://issues.apache.org/jira/browse/INLONG-433) | add tubemq perf-consumer/producer scripts | Major |
+| [INLONG-434](https://issues.apache.org/jira/browse/INLONG-434) | Adjust Broker API mapping | Major |
+| [INLONG-435](https://issues.apache.org/jira/browse/INLONG-435) | Create Web field Mapping | Major |
+| [INLONG-436](https://issues.apache.org/jira/browse/INLONG-436) | Adjust Broker's HTTP API implementation | Major |
+| [INLONG-439](https://issues.apache.org/jira/browse/INLONG-439) | Add Cli field Scheme definition | Major |
+| [INLONG-440](https://issues.apache.org/jira/browse/INLONG-440) | Add feature package tube-manager to zip  | Major |
+| [INLONG-444](https://issues.apache.org/jira/browse/INLONG-444) | Add consume and produce Cli commands | Major |
+| [INLONG-447](https://issues.apache.org/jira/browse/INLONG-447) | Add Broker-Admin Cli | Major |
+| [INLONG-451](https://issues.apache.org/jira/browse/INLONG-451) | Replace ConsumeTupleInfo with Tuple2  | Major    |
+| [INLONG-457](https://issues.apache.org/jira/browse/INLONG-457) | There is no need to return StringBuilder in Master.java | Major |
+| [INLONG-463](https://issues.apache.org/jira/browse/INLONG-463) | Adjust Master rebalance process implementation  | Major |
+| [INLONG-464](https://issues.apache.org/jira/browse/INLONG-464) | Add parameter rebalanceParallel in master.ini | Major |
+| [INLONG-470](https://issues.apache.org/jira/browse/INLONG-470) | Add query API of TopicName and BrokerId collection  | Major |
+| [INLONG-471](https://issues.apache.org/jira/browse/INLONG-471) | Add query API Introduction of TopicName and BrokerId collection | Major |
+| [INLONG-472](https://issues.apache.org/jira/browse/INLONG-472) | Adjust Broker's AbstractWebHandler class implementation  | Major |
+| [INLONG-475](https://issues.apache.org/jira/browse/INLONG-475) | add the offset clone api of the consume group  | Major |
+| [INLONG-482](https://issues.apache.org/jira/browse/INLONG-482) | Add offset query api  | Major |
+| [INLONG-484](https://issues.apache.org/jira/browse/INLONG-484) | Add query API for topic publication information  | Major |
+| [INLONG-485](https://issues.apache.org/jira/browse/INLONG-485) | Add the batch setting API of consume group offset  | Major |
+| [INLONG-486](https://issues.apache.org/jira/browse/INLONG-486) | Add the delete API of consumer group offset  | Major |
+| [INLONG-494](https://issues.apache.org/jira/browse/INLONG-494) | Update API interface instruction document | Major |
+| [INLONG-499](https://issues.apache.org/jira/browse/INLONG-499) | Add configure store  | Major |
+| [INLONG-500](https://issues.apache.org/jira/browse/INLONG-500) | Add setting operate API  | Major |
+| [INLONG-501](https://issues.apache.org/jira/browse/INLONG-501) | Adjust max message size check logic  | Major |
+| [INLONG-502](https://issues.apache.org/jira/browse/INLONG-502) | Add setting API interface document  | Major |
+| [INLONG-504](https://issues.apache.org/jira/browse/INLONG-504) | Adjust the WebMethodMapper class interfaces  | Major |
+| [INLONG-508](https://issues.apache.org/jira/browse/INLONG-508) | Optimize Broker's PB parameter check processing logic  | Major |
+| [INLONG-509](https://issues.apache.org/jira/browse/INLONG-509) | Adjust the packet length check when data is loaded  | Major |
+| [INLONG-522](https://issues.apache.org/jira/browse/INLONG-522) | Add admin_query_cluster_topic_view API document  | Major |
+| [INLONG-544](https://issues.apache.org/jira/browse/INLONG-544) | Adjust the LICENSE statement in the client.conf files of Python and C/C++ SDK | Major |
+| [INLONG-546](https://issues.apache.org/jira/browse/INLONG-546) | Restore the original license header of the referenced external source files | Major |
+| [INLONG-547](https://issues.apache.org/jira/browse/INLONG-547) | Recode the implementation of the *Startup.java classes in the Tool package | Major |
+| [INLONG-548](https://issues.apache.org/jira/browse/INLONG-548) | Handle the LICENSE authorization of font files in the resources | Major |
+| [INLONG-549](https://issues.apache.org/jira/browse/INLONG-549) | Handling the problem of compilation failure | Major |
+| [INLONG-550](https://issues.apache.org/jira/browse/INLONG-550) | Adjust LICENSE file content | Major |
+| [INLONG-551](https://issues.apache.org/jira/browse/INLONG-551) | Adjust NOTICE file content | Major |
+| [INLONG-558](https://issues.apache.org/jira/browse/INLONG-558) | Adjust the LICENSE of the file header | Major |
+| [INLONG-559](https://issues.apache.org/jira/browse/INLONG-559) | Update the LICENSE file according to the 0.8.0-RC2 review | Major |
+| [INLONG-560](https://issues.apache.org/jira/browse/INLONG-560) | Remove unprepared modules | Major |
 
 
 ## Release 0.7.0-incubating - Released (as of 2020-11-25)
@@ -115,66 +115,66 @@
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-162](https://issues.apache.org/jira/browse/TUBEMQ-162) | Python SDK support in TubeMQ | High |
-| [TUBEMQ-336](https://issues.apache.org/jira/browse/TUBEMQ-336) | Propose web portal to manage tube cluster Phase-I | Major |
-| [TUBEMQ-390](https://issues.apache.org/jira/browse/TUBEMQ-390)   | support build C++ SDK with docker image | Normal |
+| [INLONG-162](https://issues.apache.org/jira/browse/INLONG-162) | Python SDK support in TubeMQ | High |
+| [INLONG-336](https://issues.apache.org/jira/browse/INLONG-336) | Propose web portal to manage tube cluster Phase-I | Major |
+| [INLONG-390](https://issues.apache.org/jira/browse/INLONG-390)   | support build C++ SDK with docker image | Normal |
 
 ### IMPROVEMENTS:
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-369](https://issues.apache.org/jira/browse/TUBEMQ-369) | hope to add an option in the compilation script (like `make lib` etc...)                 | Major    |
-| [TUBEMQ-373](https://issues.apache.org/jira/browse/TUBEMQ-373) | Reduce the redundant code of Utils::Split functions             | Major    |
-| [TUBEMQ-374](https://issues.apache.org/jira/browse/TUBEMQ-374) | Adjust some coding style issues     | Major    |
-| [TUBEMQ-375](https://issues.apache.org/jira/browse/TUBEMQ-375) | Add a section to the README file about how to compile the project| Major    |
-| [TUBEMQ-385](https://issues.apache.org/jira/browse/TUBEMQ-385) | update docker images     | Major    |
-| [TUBEMQ-393](https://issues.apache.org/jira/browse/TUBEMQ-393) | Optimize the mapping code of WEB API     | Major    |
-| [TUBEMQ-406](https://issues.apache.org/jira/browse/TUBEMQ-406) | test_consumer.py works for both Python 2 and 3   | Minor |
-| [TUBEMQ-410](https://issues.apache.org/jira/browse/TUBEMQ-410) | install python package and simplify test_consumer.py    | Major    |
-| [TUBEMQ-416](https://issues.apache.org/jira/browse/TUBEMQ-416) | support consume from specified position   | Major    |
-| [TUBEMQ-417](https://issues.apache.org/jira/browse/TUBEMQ-417) | C++ Client support parse message from binary data for Python SDK    | Major    |
-| [TUBEMQ-419](https://issues.apache.org/jira/browse/TUBEMQ-419) | SetMaxPartCheckPeriodMs() negative number, getMessage() still  | Major    |
+| [INLONG-369](https://issues.apache.org/jira/browse/INLONG-369) | hope to add an option in the compilation script (like `make lib` etc...)                 | Major    |
+| [INLONG-373](https://issues.apache.org/jira/browse/INLONG-373) | Reduce the redundant code of Utils::Split functions             | Major    |
+| [INLONG-374](https://issues.apache.org/jira/browse/INLONG-374) | Adjust some coding style issues     | Major    |
+| [INLONG-375](https://issues.apache.org/jira/browse/INLONG-375) | Add a section to the README file about how to compile the project| Major    |
+| [INLONG-385](https://issues.apache.org/jira/browse/INLONG-385) | update docker images     | Major    |
+| [INLONG-393](https://issues.apache.org/jira/browse/INLONG-393) | Optimize the mapping code of WEB API     | Major    |
+| [INLONG-406](https://issues.apache.org/jira/browse/INLONG-406) | test_consumer.py works for both Python 2 and 3   | Minor |
+| [INLONG-410](https://issues.apache.org/jira/browse/INLONG-410) | install python package and simplify test_consumer.py    | Major    |
+| [INLONG-416](https://issues.apache.org/jira/browse/INLONG-416) | support consume from specified position   | Major    |
+| [INLONG-417](https://issues.apache.org/jira/browse/INLONG-417) | C++ Client support parse message from binary data for Python SDK    | Major    |
+| [INLONG-419](https://issues.apache.org/jira/browse/INLONG-419) | SetMaxPartCheckPeriodMs() negative number, getMessage() still  | Major    |
 
 ### BUG FIXES:
 
 | JIRA                                                         | Summary                                                      | Priority |
 | :----------------------------------------------------------- | :----------------------------------------------------------- | :------- |
-| [TUBEMQ-365](https://issues.apache.org/jira/browse/TUBEMQ-365) | Whether the consumption setting is wrong after the processRequest exception | Major    |
-| [TUBEMQ-370](https://issues.apache.org/jira/browse/TUBEMQ-370) | Calling GetCurConsumedInfo API always returns failure      | Major    |
-| [TUBEMQ-376](https://issues.apache.org/jira/browse/TUBEMQ-376) | Move pullrequests_status notifications commits mail list | Major    |
-| [TUBEMQ-366](https://issues.apache.org/jira/browse/TUBEMQ-366) | Found a nullpointerexception bug in broker | Normal |
-| [TUBEMQ-379](https://issues.apache.org/jira/browse/TUBEMQ-379) | Modify the memory cache size default to 3M | Normal |
-| [TUBEMQ-380](https://issues.apache.org/jira/browse/TUBEMQ-380) | Cpp client link error when gcc optimization is disabled   | Major    |
-| [TUBEMQ-405](https://issues.apache.org/jira/browse/TUBEMQ-405) | python sdk install files lack of the whole cpp configuration | Major |
-| [TUBEMQ-401](https://issues.apache.org/jira/browse/TUBEMQ-401) | python sdk readme bug | Minor |
-| [TUBEMQ-407](https://issues.apache.org/jira/browse/TUBEMQ-407) | Fix some content in README.md | Trivial |
-| [TUBEMQ-418](https://issues.apache.org/jira/browse/TUBEMQ-418) | C++ SDK function SetMaxPartCheckPeriodMs() can't work | Major |
+| [INLONG-365](https://issues.apache.org/jira/browse/INLONG-365) | Whether the consumption setting is wrong after the processRequest exception | Major    |
+| [INLONG-370](https://issues.apache.org/jira/browse/INLONG-370) | Calling GetCurConsumedInfo API always returns failure      | Major    |
+| [INLONG-376](https://issues.apache.org/jira/browse/INLONG-376) | Move pullrequests_status notifications commits mail list | Major    |
+| [INLONG-366](https://issues.apache.org/jira/browse/INLONG-366) | Found a nullpointerexception bug in broker | Normal |
+| [INLONG-379](https://issues.apache.org/jira/browse/INLONG-379) | Modify the memory cache size default to 3M | Normal |
+| [INLONG-380](https://issues.apache.org/jira/browse/INLONG-380) | Cpp client link error when gcc optimization is disabled   | Major    |
+| [INLONG-405](https://issues.apache.org/jira/browse/INLONG-405) | python sdk install files lack of the whole cpp configuration | Major |
+| [INLONG-401](https://issues.apache.org/jira/browse/INLONG-401) | python sdk readme bug | Minor |
+| [INLONG-407](https://issues.apache.org/jira/browse/INLONG-407) | Fix some content in README.md | Trivial |
+| [INLONG-418](https://issues.apache.org/jira/browse/INLONG-418) | C++ SDK function SetMaxPartCheckPeriodMs() can't work | Major |
 
 ### SUB-TASK:
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-276](https://issues.apache.org/jira/browse/TUBEMQ-276) | add python client encode/decode protobuf message for TubeMQ RPC Protocol                                 | Major    |
-| [TUBEMQ-338](https://issues.apache.org/jira/browse/TUBEMQ-338) | web pages for tubemq manager                                     | Major    |
-| [TUBEMQ-341](https://issues.apache.org/jira/browse/TUBEMQ-341) | open independent sub-project for tubemq                                | Major    |
-| [TUBEMQ-342](https://issues.apache.org/jira/browse/TUBEMQ-342) | abstract backend threads for routine management                              | Major    |
-| [TUBEMQ-346](https://issues.apache.org/jira/browse/TUBEMQ-346) | remove chinese comments                                          | Minor |
-| [TUBEMQ-355](https://issues.apache.org/jira/browse/TUBEMQ-355) | Add business entity for topic manager                            | Major    |
-| [TUBEMQ-361](https://issues.apache.org/jira/browse/TUBEMQ-361) | create topic when getting request             | Major    |
-| [TUBEMQ-364](https://issues.apache.org/jira/browse/TUBEMQ-364) | uniform response format for exception state                              | Major    |
-| [TUBEMQ-383](https://issues.apache.org/jira/browse/TUBEMQ-383) | document about Installation/API Reference/Example                                   | Major    |
-| [TUBEMQ-387](https://issues.apache.org/jira/browse/TUBEMQ-387) | add manager web pages                                       | Major    |
-| [TUBEMQ-392](https://issues.apache.org/jira/browse/TUBEMQ-392) | add query rest api for clusters| Major    |
-| [TUBEMQ-394](https://issues.apache.org/jira/browse/TUBEMQ-394) | Creating Mapper class from web api to inner handler | Major    |
-| [TUBEMQ-395](https://issues.apache.org/jira/browse/TUBEMQ-395) | Create Abstract WebHandler class                            | Major    |
-| [TUBEMQ-396](https://issues.apache.org/jira/browse/TUBEMQ-396) | Adjust the WebXXXHandler classes implementation  | Major    |
-| [TUBEMQ-397](https://issues.apache.org/jira/browse/TUBEMQ-397) | Add master info and other info web handler   | Major    |
-| [TUBEMQ-398](https://issues.apache.org/jira/browse/TUBEMQ-398) | reinit project for using pybind11                            | Major    |
-| [TUBEMQ-399](https://issues.apache.org/jira/browse/TUBEMQ-399) | expose C++ SDK method by Pybind11                                         | Major    |
-| [TUBEMQ-400](https://issues.apache.org/jira/browse/TUBEMQ-400) | add example for consume message by bypind11                                 | Major    |
-| [TUBEMQ-402](https://issues.apache.org/jira/browse/TUBEMQ-402) | add modify rest api for clusters                           | Major    |
-| [TUBEMQ-412](https://issues.apache.org/jira/browse/TUBEMQ-402) | tube manager start stop scrrpts                           | Major    |
-| [TUBEMQ-415](https://issues.apache.org/jira/browse/TUBEMQ-415) | exclude apache license for front end code  | Major    |
+| [INLONG-276](https://issues.apache.org/jira/browse/INLONG-276) | add python client encode/decode protobuf message for TubeMQ RPC Protocol                                 | Major    |
+| [INLONG-338](https://issues.apache.org/jira/browse/INLONG-338) | web pages for tubemq manager                                     | Major    |
+| [INLONG-341](https://issues.apache.org/jira/browse/INLONG-341) | open independent sub-project for tubemq                                | Major    |
+| [INLONG-342](https://issues.apache.org/jira/browse/INLONG-342) | abstract backend threads for routine management                              | Major    |
+| [INLONG-346](https://issues.apache.org/jira/browse/INLONG-346) | remove chinese comments                                          | Minor |
+| [INLONG-355](https://issues.apache.org/jira/browse/INLONG-355) | Add business entity for topic manager                            | Major    |
+| [INLONG-361](https://issues.apache.org/jira/browse/INLONG-361) | create topic when getting request             | Major    |
+| [INLONG-364](https://issues.apache.org/jira/browse/INLONG-364) | uniform response format for exception state                              | Major    |
+| [INLONG-383](https://issues.apache.org/jira/browse/INLONG-383) | document about Installation/API Reference/Example                                   | Major    |
+| [INLONG-387](https://issues.apache.org/jira/browse/INLONG-387) | add manager web pages                                       | Major    |
+| [INLONG-392](https://issues.apache.org/jira/browse/INLONG-392) | add query rest api for clusters| Major    |
+| [INLONG-394](https://issues.apache.org/jira/browse/INLONG-394) | Creating Mapper class from web api to inner handler | Major    |
+| [INLONG-395](https://issues.apache.org/jira/browse/INLONG-395) | Create Abstract WebHandler class                            | Major    |
+| [INLONG-396](https://issues.apache.org/jira/browse/INLONG-396) | Adjust the WebXXXHandler classes implementation  | Major    |
+| [INLONG-397](https://issues.apache.org/jira/browse/INLONG-397) | Add master info and other info web handler   | Major    |
+| [INLONG-398](https://issues.apache.org/jira/browse/INLONG-398) | reinit project for using pybind11                            | Major    |
+| [INLONG-399](https://issues.apache.org/jira/browse/INLONG-399) | expose C++ SDK method by Pybind11                                         | Major    |
+| [INLONG-400](https://issues.apache.org/jira/browse/INLONG-400) | add example for consume message by bypind11                                 | Major    |
+| [INLONG-402](https://issues.apache.org/jira/browse/INLONG-402) | add modify rest api for clusters                           | Major    |
+| [INLONG-412](https://issues.apache.org/jira/browse/INLONG-402) | tube manager start stop scrrpts                           | Major    |
+| [INLONG-415](https://issues.apache.org/jira/browse/INLONG-415) | exclude apache license for front end code  | Major    |
 
 ## Release 0.6.0-incubating - Released (as of 2020-09-25)
 
@@ -182,204 +182,204 @@
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-319](https://issues.apache.org/jira/browse/TUBEMQ-319) | In the pull mode, consumers support the  suspension of consumption for a certain partition | Major    |
-| [TUBEMQ-3](https://issues.apache.org/jira/browse/TUBEMQ-3)   | C++ SDK support in TubeMQ                                    | Normal   |
+| [INLONG-319](https://issues.apache.org/jira/browse/INLONG-319) | In the pull mode, consumers support the  suspension of consumption for a certain partition | Major    |
+| [INLONG-3](https://issues.apache.org/jira/browse/INLONG-3)   | C++ SDK support in TubeMQ                                    | Normal   |
 
 ### IMPROVEMENTS:
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-311](https://issues.apache.org/jira/browse/TUBEMQ-311) | Feedback more production information                 | Major    |
-| [TUBEMQ-312](https://issues.apache.org/jira/browse/TUBEMQ-312) | Feedback more consumption information                | Major    |
-| [TUBEMQ-325](https://issues.apache.org/jira/browse/TUBEMQ-325) | Add 406 ~ 408 error code to pullSelect call          | Major    |
-| [TUBEMQ-345](https://issues.apache.org/jira/browse/TUBEMQ-345) | Optimize the call logic of getMessage() in Pull mode | Major    |
-| [TUBEMQ-352](https://issues.apache.org/jira/browse/TUBEMQ-352) | Set the parameters of the example at startup         | Major    |
-| [TUBEMQ-353](https://issues.apache.org/jira/browse/TUBEMQ-353) | Update LICENSE about C/C++ SDK's code reference      | Major    |
-| [TUBEMQ-356](https://issues.apache.org/jira/browse/TUBEMQ-356) | C++ SDK Codec decode add requestid                   | Major    |
-| [TUBEMQ-327](https://issues.apache.org/jira/browse/TUBEMQ-327) | Fix the concurrency problem in the example           | Normal   |
+| [INLONG-311](https://issues.apache.org/jira/browse/INLONG-311) | Feedback more production information                 | Major    |
+| [INLONG-312](https://issues.apache.org/jira/browse/INLONG-312) | Feedback more consumption information                | Major    |
+| [INLONG-325](https://issues.apache.org/jira/browse/INLONG-325) | Add 406 ~ 408 error code to pullSelect call          | Major    |
+| [INLONG-345](https://issues.apache.org/jira/browse/INLONG-345) | Optimize the call logic of getMessage() in Pull mode | Major    |
+| [INLONG-352](https://issues.apache.org/jira/browse/INLONG-352) | Set the parameters of the example at startup         | Major    |
+| [INLONG-353](https://issues.apache.org/jira/browse/INLONG-353) | Update LICENSE about C/C++ SDK's code reference      | Major    |
+| [INLONG-356](https://issues.apache.org/jira/browse/INLONG-356) | C++ SDK Codec decode add requestid                   | Major    |
+| [INLONG-327](https://issues.apache.org/jira/browse/INLONG-327) | Fix the concurrency problem in the example           | Normal   |
 
 ### BUG FIXES:
 
 | JIRA                                                         | Summary                                                      | Priority |
 | :----------------------------------------------------------- | :----------------------------------------------------------- | :------- |
-| [TUBEMQ-316](https://issues.apache.org/jira/browse/TUBEMQ-316) | Where the port the port is aleady used, the  process throw the exception, but not exit | Major    |
-| [TUBEMQ-317](https://issues.apache.org/jira/browse/TUBEMQ-317) | The Store Manager throws java.lang.NullPointerException      | Major    |
-| [TUBEMQ-320](https://issues.apache.org/jira/browse/TUBEMQ-320) | Request for static web contents would get responses with no content | Major    |
-| [TUBEMQ-354](https://issues.apache.org/jira/browse/TUBEMQ-354) | Found a dns translate bug in C/C++ sdk                       | Major    |
-| [TUBEMQ-306](https://issues.apache.org/jira/browse/TUBEMQ-306) | Raise Nullpointer Exception when create tubemq instance      | Low      |
-| [TUBEMQ-359](https://issues.apache.org/jira/browse/TUBEMQ-359) | TubeMQ consume speed dropped to 0 in some partitions, it is a very serious bug | Blocker  |
+| [INLONG-316](https://issues.apache.org/jira/browse/INLONG-316) | Where the port the port is aleady used, the  process throw the exception, but not exit | Major    |
+| [INLONG-317](https://issues.apache.org/jira/browse/INLONG-317) | The Store Manager throws java.lang.NullPointerException      | Major    |
+| [INLONG-320](https://issues.apache.org/jira/browse/INLONG-320) | Request for static web contents would get responses with no content | Major    |
+| [INLONG-354](https://issues.apache.org/jira/browse/INLONG-354) | Found a dns translate bug in C/C++ sdk                       | Major    |
+| [INLONG-306](https://issues.apache.org/jira/browse/INLONG-306) | Raise Nullpointer Exception when create tubemq instance      | Low      |
+| [INLONG-359](https://issues.apache.org/jira/browse/INLONG-359) | TubeMQ consume speed dropped to 0 in some partitions, it is a very serious bug | Blocker  |
 
 ### SUB-TASK:
 
 | JIRA  | Summary  | Priority |
 | :---- | :------- | :------- |
-| [TUBEMQ-250](https://issues.apache.org/jira/browse/TUBEMQ-250) | Create C/C++ configure files                                 | Major    |
-| [TUBEMQ-251](https://issues.apache.org/jira/browse/TUBEMQ-251) | Create C/C++ Codec utils                                     | Major    |
-| [TUBEMQ-252](https://issues.apache.org/jira/browse/TUBEMQ-252) | Create C/C++ Metadata classes                                | Major    |
-| [TUBEMQ-262](https://issues.apache.org/jira/browse/TUBEMQ-262) | Create C++ flow control handler                              | Major    |
-| [TUBEMQ-263](https://issues.apache.org/jira/browse/TUBEMQ-263) | Create C/C++ ini file read utils                             | Major    |
-| [TUBEMQ-266](https://issues.apache.org/jira/browse/TUBEMQ-266) | [TUBEMQ-266] Add Tencent/rapidjson as submodule              | Major    |
-| [TUBEMQ-267](https://issues.apache.org/jira/browse/TUBEMQ-267) | Create C/C++ Message class                                   | Major    |
-| [TUBEMQ-269](https://issues.apache.org/jira/browse/TUBEMQ-269) | Create C/C++ RmtDataCache class                              | Major    |
-| [TUBEMQ-272](https://issues.apache.org/jira/browse/TUBEMQ-272) | Unified C/C++ files's code style                             | Major    |
-| [TUBEMQ-274](https://issues.apache.org/jira/browse/TUBEMQ-274) | Support CMake compilation                                    | Major    |
-| [TUBEMQ-275](https://issues.apache.org/jira/browse/TUBEMQ-275) | Thread Pool & Timer                                          | Major    |
-| [TUBEMQ-280](https://issues.apache.org/jira/browse/TUBEMQ-280) | Create C/C++ subscribe info class                            | Major    |
-| [TUBEMQ-281](https://issues.apache.org/jira/browse/TUBEMQ-281) | atomic_def.h use C++11 stdlib class                          | Major    |
-| [TUBEMQ-282](https://issues.apache.org/jira/browse/TUBEMQ-282) | Create C/C++ return result class                             | Major    |
-| [TUBEMQ-283](https://issues.apache.org/jira/browse/TUBEMQ-283) | Adjust C/C++ some file names: add "tubemq_" prefix           | Major    |
-| [TUBEMQ-285](https://issues.apache.org/jira/browse/TUBEMQ-285) | Replace C/C++ pthread's mutex to std::mutex                  | Major    |
-| [TUBEMQ-286](https://issues.apache.org/jira/browse/TUBEMQ-286) | Create C/C++ SDK's manager class                             | Major    |
-| [TUBEMQ-287](https://issues.apache.org/jira/browse/TUBEMQ-287) | C++ SDK io buffer                                            | Major    |
-| [TUBEMQ-288](https://issues.apache.org/jira/browse/TUBEMQ-288) | C++ SDK Codec interface                                      | Major    |
-| [TUBEMQ-289](https://issues.apache.org/jira/browse/TUBEMQ-289) | C++ SDK Codec TubeMQ proto support                           | Major    |
-| [TUBEMQ-290](https://issues.apache.org/jira/browse/TUBEMQ-290) | C++ SDK TCP Connect                                          | Major    |
-| [TUBEMQ-291](https://issues.apache.org/jira/browse/TUBEMQ-291) | C++ SDK Connect Pool                                         | Major    |
-| [TUBEMQ-293](https://issues.apache.org/jira/browse/TUBEMQ-293) | C++ SDK Create Future class                                  | Major    |
-| [TUBEMQ-296](https://issues.apache.org/jira/browse/TUBEMQ-296) | Adjust the version information of all pom.xml                | Major    |
-| [TUBEMQ-300](https://issues.apache.org/jira/browse/TUBEMQ-300) | Update LICENSE                                               | Major    |
-| [TUBEMQ-308](https://issues.apache.org/jira/browse/TUBEMQ-308) | Upgrade Jetty 6 (mortbay) => Jetty 9 (eclipse)               | Major    |
-| [TUBEMQ-309](https://issues.apache.org/jira/browse/TUBEMQ-309) | Add POST support to WebAPI                                   | Major    |
-| [TUBEMQ-326](https://issues.apache.org/jira/browse/TUBEMQ-326) | [website] Added 405 ~ 408 error code definition              | Major    |
-| [TUBEMQ-347](https://issues.apache.org/jira/browse/TUBEMQ-347) | C++ SDK Create client API                                    | Major    |
-| [TUBEMQ-348](https://issues.apache.org/jira/browse/TUBEMQ-348) | C++SDK Client handler detail                                 | Major    |
-| [TUBEMQ-349](https://issues.apache.org/jira/browse/TUBEMQ-349) | C++ SDK Create Thread Pool                                   | Major    |
-| [TUBEMQ-350](https://issues.apache.org/jira/browse/TUBEMQ-350) | C++ SDK client code adj                                      | Major    |
-| [TUBEMQ-351](https://issues.apache.org/jira/browse/TUBEMQ-351) | C++ SDK example&tests                                        | Major    |
-| [TUBEMQ-358](https://issues.apache.org/jira/browse/TUBEMQ-358) | Adjust tubemq-manager, remove it from master, and develop with TUBEMQ-336  branch | Major    |
-| [TUBEMQ-268](https://issues.apache.org/jira/browse/TUBEMQ-268) | C++ SDK log module                                           | Normal   |
-| [TUBEMQ-292](https://issues.apache.org/jira/browse/TUBEMQ-292) | C++ SDK singleton & executor_pool optimization               | Normal   |
-| [TUBEMQ-270](https://issues.apache.org/jira/browse/TUBEMQ-270) | this point c++ SDK class                                     | Minor    |
-| [TUBEMQ-271](https://issues.apache.org/jira/browse/TUBEMQ-271) | C++ SDK copy constructor and  assignment constructor         | Minor    |
-| [TUBEMQ-273](https://issues.apache.org/jira/browse/TUBEMQ-273) | C++ SDK dir name change inc -> include/tubemq/               | Minor    |
+| [INLONG-250](https://issues.apache.org/jira/browse/INLONG-250) | Create C/C++ configure files                                 | Major    |
+| [INLONG-251](https://issues.apache.org/jira/browse/INLONG-251) | Create C/C++ Codec utils                                     | Major    |
+| [INLONG-252](https://issues.apache.org/jira/browse/INLONG-252) | Create C/C++ Metadata classes                                | Major    |
+| [INLONG-262](https://issues.apache.org/jira/browse/INLONG-262) | Create C++ flow control handler                              | Major    |
+| [INLONG-263](https://issues.apache.org/jira/browse/INLONG-263) | Create C/C++ ini file read utils                             | Major    |
+| [INLONG-266](https://issues.apache.org/jira/browse/INLONG-266) | [INLONG-266] Add Tencent/rapidjson as submodule              | Major    |
+| [INLONG-267](https://issues.apache.org/jira/browse/INLONG-267) | Create C/C++ Message class                                   | Major    |
+| [INLONG-269](https://issues.apache.org/jira/browse/INLONG-269) | Create C/C++ RmtDataCache class                              | Major    |
+| [INLONG-272](https://issues.apache.org/jira/browse/INLONG-272) | Unified C/C++ files's code style                             | Major    |
+| [INLONG-274](https://issues.apache.org/jira/browse/INLONG-274) | Support CMake compilation                                    | Major    |
+| [INLONG-275](https://issues.apache.org/jira/browse/INLONG-275) | Thread Pool & Timer                                          | Major    |
+| [INLONG-280](https://issues.apache.org/jira/browse/INLONG-280) | Create C/C++ subscribe info class                            | Major    |
+| [INLONG-281](https://issues.apache.org/jira/browse/INLONG-281) | atomic_def.h use C++11 stdlib class                          | Major    |
+| [INLONG-282](https://issues.apache.org/jira/browse/INLONG-282) | Create C/C++ return result class                             | Major    |
+| [INLONG-283](https://issues.apache.org/jira/browse/INLONG-283) | Adjust C/C++ some file names: add "tubemq_" prefix           | Major    |
+| [INLONG-285](https://issues.apache.org/jira/browse/INLONG-285) | Replace C/C++ pthread's mutex to std::mutex                  | Major    |
+| [INLONG-286](https://issues.apache.org/jira/browse/INLONG-286) | Create C/C++ SDK's manager class                             | Major    |
+| [INLONG-287](https://issues.apache.org/jira/browse/INLONG-287) | C++ SDK io buffer                                            | Major    |
+| [INLONG-288](https://issues.apache.org/jira/browse/INLONG-288) | C++ SDK Codec interface                                      | Major    |
+| [INLONG-289](https://issues.apache.org/jira/browse/INLONG-289) | C++ SDK Codec TubeMQ proto support                           | Major    |
+| [INLONG-290](https://issues.apache.org/jira/browse/INLONG-290) | C++ SDK TCP Connect                                          | Major    |
+| [INLONG-291](https://issues.apache.org/jira/browse/INLONG-291) | C++ SDK Connect Pool                                         | Major    |
+| [INLONG-293](https://issues.apache.org/jira/browse/INLONG-293) | C++ SDK Create Future class                                  | Major    |
+| [INLONG-296](https://issues.apache.org/jira/browse/INLONG-296) | Adjust the version information of all pom.xml                | Major    |
+| [INLONG-300](https://issues.apache.org/jira/browse/INLONG-300) | Update LICENSE                                               | Major    |
+| [INLONG-308](https://issues.apache.org/jira/browse/INLONG-308) | Upgrade Jetty 6 (mortbay) => Jetty 9 (eclipse)               | Major    |
+| [INLONG-309](https://issues.apache.org/jira/browse/INLONG-309) | Add POST support to WebAPI                                   | Major    |
+| [INLONG-326](https://issues.apache.org/jira/browse/INLONG-326) | [website] Added 405 ~ 408 error code definition              | Major    |
+| [INLONG-347](https://issues.apache.org/jira/browse/INLONG-347) | C++ SDK Create client API                                    | Major    |
+| [INLONG-348](https://issues.apache.org/jira/browse/INLONG-348) | C++SDK Client handler detail                                 | Major    |
+| [INLONG-349](https://issues.apache.org/jira/browse/INLONG-349) | C++ SDK Create Thread Pool                                   | Major    |
+| [INLONG-350](https://issues.apache.org/jira/browse/INLONG-350) | C++ SDK client code adj                                      | Major    |
+| [INLONG-351](https://issues.apache.org/jira/browse/INLONG-351) | C++ SDK example&tests                                        | Major    |
+| [INLONG-358](https://issues.apache.org/jira/browse/INLONG-358) | Adjust tubemq-manager, remove it from master, and develop with INLONG-336  branch | Major    |
+| [INLONG-268](https://issues.apache.org/jira/browse/INLONG-268) | C++ SDK log module                                           | Normal   |
+| [INLONG-292](https://issues.apache.org/jira/browse/INLONG-292) | C++ SDK singleton & executor_pool optimization               | Normal   |
+| [INLONG-270](https://issues.apache.org/jira/browse/INLONG-270) | this point c++ SDK class                                     | Minor    |
+| [INLONG-271](https://issues.apache.org/jira/browse/INLONG-271) | C++ SDK copy constructor and  assignment constructor         | Minor    |
+| [INLONG-273](https://issues.apache.org/jira/browse/INLONG-273) | C++ SDK dir name change inc -> include/tubemq/               | Minor    |
 
 ## Release 0.5.0-incubating - released (as of 2020-07-22)
 
 ### NEW FEATURES:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-122](https://issues.apache.org/jira/browse/TUBEMQ-122) | Increase JAVA version collection of SDK environment |  Major|
-|[TUBEMQ-163](https://issues.apache.org/jira/browse/TUBEMQ-163) | Flume sink for TubeMQ |  Major|
-|[TUBEMQ-197](https://issues.apache.org/jira/browse/TUBEMQ-197) | Support TubeMQ connector for Apache Flink |  Major|
-|[TUBEMQ-238](https://issues.apache.org/jira/browse/TUBEMQ-238) | Support TubeMQ connector for Apache Spark Streaming |  Major|
-|[TUBEMQ-239](https://issues.apache.org/jira/browse/TUBEMQ-239) | support deployment on kubernetes |  Major|
+|[INLONG-122](https://issues.apache.org/jira/browse/INLONG-122) | Increase JAVA version collection of SDK environment |  Major|
+|[INLONG-163](https://issues.apache.org/jira/browse/INLONG-163) | Flume sink for TubeMQ |  Major|
+|[INLONG-197](https://issues.apache.org/jira/browse/INLONG-197) | Support TubeMQ connector for Apache Flink |  Major|
+|[INLONG-238](https://issues.apache.org/jira/browse/INLONG-238) | Support TubeMQ connector for Apache Spark Streaming |  Major|
+|[INLONG-239](https://issues.apache.org/jira/browse/INLONG-239) | support deployment on kubernetes |  Major|
 
 ### IMPROVEMENTS:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-| [TUBEMQ-46](https://issues.apache.org/jira/browse/TUBEMQ-46) | Correct some spelling issues |	Low|
-| [TUBEMQ-53](https://issues.apache.org/jira/browse/TUBEMQ-53) | fix some typos |	Low|
-| [TUBEMQ-55](https://issues.apache.org/jira/browse/TUBEMQ-55) | fix some typos |	Low|
-| [TUBEMQ-57](https://issues.apache.org/jira/browse/TUBEMQ-57) | fix some typos & todo |	Low|
-| [TUBEMQ-58](https://issues.apache.org/jira/browse/TUBEMQ-58) | fix some typos |	Low|
-| [TUBEMQ-60](https://issues.apache.org/jira/browse/TUBEMQ-60) | Remove unnecessary synchronized & using IllegalArgumentException instead of IllegalStateException |	Low|
-| [TUBEMQ-61](https://issues.apache.org/jira/browse/TUBEMQ-61) | minor update & fix some typos |	Low|
-| [TUBEMQ-64](https://issues.apache.org/jira/browse/TUBEMQ-64) | minor update & fix some typos |	Low|
-| [TUBEMQ-67](https://issues.apache.org/jira/browse/TUBEMQ-67) | remove synchronized & fix some typos |	Low|
-| [TUBEMQ-71](https://issues.apache.org/jira/browse/TUBEMQ-71) | using IllegalArgumentException & fix some typos |	Low|
-| [TUBEMQ-73](https://issues.apache.org/jira/browse/TUBEMQ-73) | remove duplicate codes & some minor updates |	Normal|
-| [TUBEMQ-74](https://issues.apache.org/jira/browse/TUBEMQ-74) | minor updates for DefaultBdbStoreService |	Low|
-| [TUBEMQ-75](https://issues.apache.org/jira/browse/TUBEMQ-75) | remove unused Logger |	Major|
-| [TUBEMQ-76](https://issues.apache.org/jira/browse/TUBEMQ-76) | rename the classes |	Low|
-| [TUBEMQ-77](https://issues.apache.org/jira/browse/TUBEMQ-77) | fix typo |	Low|
-| [TUBEMQ-79](https://issues.apache.org/jira/browse/TUBEMQ-79) | fix typo |	Major|
-| [TUBEMQ-80](https://issues.apache.org/jira/browse/TUBEMQ-80) | Fix some typos |	Low|
-| [TUBEMQ-82](https://issues.apache.org/jira/browse/TUBEMQ-82) | Fix some typos & update comments |	Low|
-| [TUBEMQ-83](https://issues.apache.org/jira/browse/TUBEMQ-83) | Fix some typos |	Low|
-| [TUBEMQ-87](https://issues.apache.org/jira/browse/TUBEMQ-87) | Minor updates |	Low|
-| [TUBEMQ-89](https://issues.apache.org/jira/browse/TUBEMQ-89) | Minor updates |	Low|
-| [TUBEMQ-90](https://issues.apache.org/jira/browse/TUBEMQ-90) | Remove unused codes in TubeBroker |	Normal|
-| [TUBEMQ-91](https://issues.apache.org/jira/browse/TUBEMQ-91) | replace explicit type with <> |	Low|
-| [TUBEMQ-93](https://issues.apache.org/jira/browse/TUBEMQ-93) | Substitute the parameterized type for client module & missed server module |	Low|
-| [TUBEMQ-94](https://issues.apache.org/jira/browse/TUBEMQ-94) | Substitute the parameterized type for core module |	Low|
-| [TUBEMQ-95](https://issues.apache.org/jira/browse/TUBEMQ-95) | Substitute the parameterized type for server module |	Low|
-| [TUBEMQ-96](https://issues.apache.org/jira/browse/TUBEMQ-96) | Fix typo & use IllegalArgumentException |	Low|
-| [TUBEMQ-98](https://issues.apache.org/jira/browse/TUBEMQ-98) | Fix typo & Simplify 'instanceof' judgment |	Low|
-| [TUBEMQ-100](https://issues.apache.org/jira/browse/TUBEMQ-100) | Fix typos & remove unused codes |	Low|
-| [TUBEMQ-101](https://issues.apache.org/jira/browse/TUBEMQ-101) | Optimize code & Fix type |	Low|
-| [TUBEMQ-103](https://issues.apache.org/jira/browse/TUBEMQ-103) | Substitute Chinese comments with English |	Normal|
-| [TUBEMQ-108](https://issues.apache.org/jira/browse/TUBEMQ-108) | About maven jdk version configuration problem |	Minor|
-| [TUBEMQ-127](https://issues.apache.org/jira/browse/TUBEMQ-127) | Fixed a bug & minor changes |	Low|
-| [TUBEMQ-128](https://issues.apache.org/jira/browse/TUBEMQ-128) | Shorten the log clearup check cycle |	Major|
-| [TUBEMQ-138](https://issues.apache.org/jira/browse/TUBEMQ-138) | Optimize core module test case code |	Low|
-| [TUBEMQ-141](https://issues.apache.org/jira/browse/TUBEMQ-141) | Remove the requirement to provide localHostIP |	Major|
-| [TUBEMQ-152](https://issues.apache.org/jira/browse/TUBEMQ-152) | Modify the master.ini file's annotations |	Normal|
-| [TUBEMQ-154](https://issues.apache.org/jira/browse/TUBEMQ-154) | Modify the wrong comment & Minor changes for example module |	Low|
-| [TUBEMQ-155](https://issues.apache.org/jira/browse/TUBEMQ-155) | Use enum class for consume position |	Normal|
-| [TUBEMQ-156](https://issues.apache.org/jira/browse/TUBEMQ-156) | Update for README.md |	Normal|
-| [TUBEMQ-166](https://issues.apache.org/jira/browse/TUBEMQ-166) | Hide `bdbStore` configs in master.ini |	Major|
-| [TUBEMQ-167](https://issues.apache.org/jira/browse/TUBEMQ-167) | Change to relative paths in default configs |	Trivial|
-| [TUBEMQ-168](https://issues.apache.org/jira/browse/TUBEMQ-168) | Example module: remove localhost IP configuration parameters |	Minor|
-| [TUBEMQ-170](https://issues.apache.org/jira/browse/TUBEMQ-170) | improve build/deployment/configuration for quick start |	Major|
-| [TUBEMQ-196](https://issues.apache.org/jira/browse/TUBEMQ-196) | use log to print exception |	Low|
-| [TUBEMQ-201](https://issues.apache.org/jira/browse/TUBEMQ-201) | [Website] Adjust user guide & fix demo example |	Major|
-| [TUBEMQ-202](https://issues.apache.org/jira/browse/TUBEMQ-202) | Add protobuf protocol syntax declaration |	Major|
-| [TUBEMQ-213](https://issues.apache.org/jira/browse/TUBEMQ-213) | Optimize code & Minor changes |	Low|
-| [TUBEMQ-216](https://issues.apache.org/jira/browse/TUBEMQ-216) | use ThreadUtil.sleep replace Thread.sleep |	Low|
-| [TUBEMQ-222](https://issues.apache.org/jira/browse/TUBEMQ-222) | Optimize code: Unnecessary boxing/unboxing conversion |	Normal|
-| [TUBEMQ-224](https://issues.apache.org/jira/browse/TUBEMQ-224) | Fixed: Unnecessary conversion to string inspection for server module |	Low|
-| [TUBEMQ-226](https://issues.apache.org/jira/browse/TUBEMQ-226) | Add Windows startup scripts |	High|
-| [TUBEMQ-227](https://issues.apache.org/jira/browse/TUBEMQ-227) | remove build guide in docker-build readme |	Major|
-| [TUBEMQ-232](https://issues.apache.org/jira/browse/TUBEMQ-232) | TubeBroker#register2Master, reconnect and wait |	Low|
-| [TUBEMQ-234](https://issues.apache.org/jira/browse/TUBEMQ-234) | Add .asf.yaml to change notifications |	Major|
-| [TUBEMQ-235](https://issues.apache.org/jira/browse/TUBEMQ-235) | Add code coverage supporting for pull request created. |	Normal|
-| [TUBEMQ-237](https://issues.apache.org/jira/browse/TUBEMQ-237) | add maven module build for docker image |	Major|
+| [INLONG-46](https://issues.apache.org/jira/browse/INLONG-46) | Correct some spelling issues |	Low|
+| [INLONG-53](https://issues.apache.org/jira/browse/INLONG-53) | fix some typos |	Low|
+| [INLONG-55](https://issues.apache.org/jira/browse/INLONG-55) | fix some typos |	Low|
+| [INLONG-57](https://issues.apache.org/jira/browse/INLONG-57) | fix some typos & todo |	Low|
+| [INLONG-58](https://issues.apache.org/jira/browse/INLONG-58) | fix some typos |	Low|
+| [INLONG-60](https://issues.apache.org/jira/browse/INLONG-60) | Remove unnecessary synchronized & using IllegalArgumentException instead of IllegalStateException |	Low|
+| [INLONG-61](https://issues.apache.org/jira/browse/INLONG-61) | minor update & fix some typos |	Low|
+| [INLONG-64](https://issues.apache.org/jira/browse/INLONG-64) | minor update & fix some typos |	Low|
+| [INLONG-67](https://issues.apache.org/jira/browse/INLONG-67) | remove synchronized & fix some typos |	Low|
+| [INLONG-71](https://issues.apache.org/jira/browse/INLONG-71) | using IllegalArgumentException & fix some typos |	Low|
+| [INLONG-73](https://issues.apache.org/jira/browse/INLONG-73) | remove duplicate codes & some minor updates |	Normal|
+| [INLONG-74](https://issues.apache.org/jira/browse/INLONG-74) | minor updates for DefaultBdbStoreService |	Low|
+| [INLONG-75](https://issues.apache.org/jira/browse/INLONG-75) | remove unused Logger |	Major|
+| [INLONG-76](https://issues.apache.org/jira/browse/INLONG-76) | rename the classes |	Low|
+| [INLONG-77](https://issues.apache.org/jira/browse/INLONG-77) | fix typo |	Low|
+| [INLONG-79](https://issues.apache.org/jira/browse/INLONG-79) | fix typo |	Major|
+| [INLONG-80](https://issues.apache.org/jira/browse/INLONG-80) | Fix some typos |	Low|
+| [INLONG-82](https://issues.apache.org/jira/browse/INLONG-82) | Fix some typos & update comments |	Low|
+| [INLONG-83](https://issues.apache.org/jira/browse/INLONG-83) | Fix some typos |	Low|
+| [INLONG-87](https://issues.apache.org/jira/browse/INLONG-87) | Minor updates |	Low|
+| [INLONG-89](https://issues.apache.org/jira/browse/INLONG-89) | Minor updates |	Low|
+| [INLONG-90](https://issues.apache.org/jira/browse/INLONG-90) | Remove unused codes in TubeBroker |	Normal|
+| [INLONG-91](https://issues.apache.org/jira/browse/INLONG-91) | replace explicit type with <> |	Low|
+| [INLONG-93](https://issues.apache.org/jira/browse/INLONG-93) | Substitute the parameterized type for client module & missed server module |	Low|
+| [INLONG-94](https://issues.apache.org/jira/browse/INLONG-94) | Substitute the parameterized type for core module |	Low|
+| [INLONG-95](https://issues.apache.org/jira/browse/INLONG-95) | Substitute the parameterized type for server module |	Low|
+| [INLONG-96](https://issues.apache.org/jira/browse/INLONG-96) | Fix typo & use IllegalArgumentException |	Low|
+| [INLONG-98](https://issues.apache.org/jira/browse/INLONG-98) | Fix typo & Simplify 'instanceof' judgment |	Low|
+| [INLONG-100](https://issues.apache.org/jira/browse/INLONG-100) | Fix typos & remove unused codes |	Low|
+| [INLONG-101](https://issues.apache.org/jira/browse/INLONG-101) | Optimize code & Fix type |	Low|
+| [INLONG-103](https://issues.apache.org/jira/browse/INLONG-103) | Substitute Chinese comments with English |	Normal|
+| [INLONG-108](https://issues.apache.org/jira/browse/INLONG-108) | About maven jdk version configuration problem |	Minor|
+| [INLONG-127](https://issues.apache.org/jira/browse/INLONG-127) | Fixed a bug & minor changes |	Low|
+| [INLONG-128](https://issues.apache.org/jira/browse/INLONG-128) | Shorten the log clearup check cycle |	Major|
+| [INLONG-138](https://issues.apache.org/jira/browse/INLONG-138) | Optimize core module test case code |	Low|
+| [INLONG-141](https://issues.apache.org/jira/browse/INLONG-141) | Remove the requirement to provide localHostIP |	Major|
+| [INLONG-152](https://issues.apache.org/jira/browse/INLONG-152) | Modify the master.ini file's annotations |	Normal|
+| [INLONG-154](https://issues.apache.org/jira/browse/INLONG-154) | Modify the wrong comment & Minor changes for example module |	Low|
+| [INLONG-155](https://issues.apache.org/jira/browse/INLONG-155) | Use enum class for consume position |	Normal|
+| [INLONG-156](https://issues.apache.org/jira/browse/INLONG-156) | Update for README.md |	Normal|
+| [INLONG-166](https://issues.apache.org/jira/browse/INLONG-166) | Hide `bdbStore` configs in master.ini |	Major|
+| [INLONG-167](https://issues.apache.org/jira/browse/INLONG-167) | Change to relative paths in default configs |	Trivial|
+| [INLONG-168](https://issues.apache.org/jira/browse/INLONG-168) | Example module: remove localhost IP configuration parameters |	Minor|
+| [INLONG-170](https://issues.apache.org/jira/browse/INLONG-170) | improve build/deployment/configuration for quick start |	Major|
+| [INLONG-196](https://issues.apache.org/jira/browse/INLONG-196) | use log to print exception |	Low|
+| [INLONG-201](https://issues.apache.org/jira/browse/INLONG-201) | [Website] Adjust user guide & fix demo example |	Major|
+| [INLONG-202](https://issues.apache.org/jira/browse/INLONG-202) | Add protobuf protocol syntax declaration |	Major|
+| [INLONG-213](https://issues.apache.org/jira/browse/INLONG-213) | Optimize code & Minor changes |	Low|
+| [INLONG-216](https://issues.apache.org/jira/browse/INLONG-216) | use ThreadUtil.sleep replace Thread.sleep |	Low|
+| [INLONG-222](https://issues.apache.org/jira/browse/INLONG-222) | Optimize code: Unnecessary boxing/unboxing conversion |	Normal|
+| [INLONG-224](https://issues.apache.org/jira/browse/INLONG-224) | Fixed: Unnecessary conversion to string inspection for server module |	Low|
+| [INLONG-226](https://issues.apache.org/jira/browse/INLONG-226) | Add Windows startup scripts |	High|
+| [INLONG-227](https://issues.apache.org/jira/browse/INLONG-227) | remove build guide in docker-build readme |	Major|
+| [INLONG-232](https://issues.apache.org/jira/browse/INLONG-232) | TubeBroker#register2Master, reconnect and wait |	Low|
+| [INLONG-234](https://issues.apache.org/jira/browse/INLONG-234) | Add .asf.yaml to change notifications |	Major|
+| [INLONG-235](https://issues.apache.org/jira/browse/INLONG-235) | Add code coverage supporting for pull request created. |	Normal|
+| [INLONG-237](https://issues.apache.org/jira/browse/INLONG-237) | add maven module build for docker image |	Major|
 
 ### BUG FIXES:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-| [TUBEMQ-47](https://issues.apache.org/jira/browse/TUBEMQ-47) | Fix some typos |	Major|
-| [TUBEMQ-102](https://issues.apache.org/jira/browse/TUBEMQ-102) | Fix question [TUBEMQ-101] [Optimize code] |	Major|
-| [TUBEMQ-121](https://issues.apache.org/jira/browse/TUBEMQ-121) | Fix compilation alarm |	Major|
-| [TUBEMQ-139](https://issues.apache.org/jira/browse/TUBEMQ-139) | a bug in the equals method of the TubeClientConfig class |	Major|
-| [TUBEMQ-157](https://issues.apache.org/jira/browse/TUBEMQ-157) | Optimize Broker disk anomaly check |	Normal|
-| [TUBEMQ-158](https://issues.apache.org/jira/browse/TUBEMQ-158) | nextWithAuthInfo2B status should be managed independently according to Broker |	Normal|
-| [TUBEMQ-159](https://issues.apache.org/jira/browse/TUBEMQ-159) | Fix some typos |	Normal|
-| [TUBEMQ-165](https://issues.apache.org/jira/browse/TUBEMQ-165) | Remove unnecessary fiiles |	Major|
-| [TUBEMQ-205](https://issues.apache.org/jira/browse/TUBEMQ-205) | Duplicate dependency of jetty in tuber-server pom file |	Minor|
-| [TUBEMQ-206](https://issues.apache.org/jira/browse/TUBEMQ-206) | There are some residual files after executed unit tests |	Major|
-| [TUBEMQ-210](https://issues.apache.org/jira/browse/TUBEMQ-210) | Add log4j properties file for unit tests |	Minor|
-| [TUBEMQ-217](https://issues.apache.org/jira/browse/TUBEMQ-217) | UPdate the je download path |	Major|
-| [TUBEMQ-218](https://issues.apache.org/jira/browse/TUBEMQ-218) | build failed: Too many files with unapproved license |	Major|
-| [TUBEMQ-230](https://issues.apache.org/jira/browse/TUBEMQ-230) | TubeMQ run mvn test failed with openjdk version 13.0.2 |	Major|
-| [TUBEMQ-236](https://issues.apache.org/jira/browse/TUBEMQ-236) | Can't get dependencies from the maven repository |	Major|
-| [TUBEMQ-253](https://issues.apache.org/jira/browse/TUBEMQ-253) | tube-consumer fetch-worker cpu used too high |	Major|
-| [TUBEMQ-254](https://issues.apache.org/jira/browse/TUBEMQ-254) | support using different mapping port for standalone mode |	Major|
-| [TUBEMQ-265](https://issues.apache.org/jira/browse/TUBEMQ-265) | Unexpected broker disappearance in broker list after updating default broker metadata |	Major|
+| [INLONG-47](https://issues.apache.org/jira/browse/INLONG-47) | Fix some typos |	Major|
+| [INLONG-102](https://issues.apache.org/jira/browse/INLONG-102) | Fix question [INLONG-101] [Optimize code] |	Major|
+| [INLONG-121](https://issues.apache.org/jira/browse/INLONG-121) | Fix compilation alarm |	Major|
+| [INLONG-139](https://issues.apache.org/jira/browse/INLONG-139) | a bug in the equals method of the TubeClientConfig class |	Major|
+| [INLONG-157](https://issues.apache.org/jira/browse/INLONG-157) | Optimize Broker disk anomaly check |	Normal|
+| [INLONG-158](https://issues.apache.org/jira/browse/INLONG-158) | nextWithAuthInfo2B status should be managed independently according to Broker |	Normal|
+| [INLONG-159](https://issues.apache.org/jira/browse/INLONG-159) | Fix some typos |	Normal|
+| [INLONG-165](https://issues.apache.org/jira/browse/INLONG-165) | Remove unnecessary fiiles |	Major|
+| [INLONG-205](https://issues.apache.org/jira/browse/INLONG-205) | Duplicate dependency of jetty in tuber-server pom file |	Minor|
+| [INLONG-206](https://issues.apache.org/jira/browse/INLONG-206) | There are some residual files after executed unit tests |	Major|
+| [INLONG-210](https://issues.apache.org/jira/browse/INLONG-210) | Add log4j properties file for unit tests |	Minor|
+| [INLONG-217](https://issues.apache.org/jira/browse/INLONG-217) | UPdate the je download path |	Major|
+| [INLONG-218](https://issues.apache.org/jira/browse/INLONG-218) | build failed: Too many files with unapproved license |	Major|
+| [INLONG-230](https://issues.apache.org/jira/browse/INLONG-230) | TubeMQ run mvn test failed with openjdk version 13.0.2 |	Major|
+| [INLONG-236](https://issues.apache.org/jira/browse/INLONG-236) | Can't get dependencies from the maven repository |	Major|
+| [INLONG-253](https://issues.apache.org/jira/browse/INLONG-253) | tube-consumer fetch-worker cpu used too high |	Major|
+| [INLONG-254](https://issues.apache.org/jira/browse/INLONG-254) | support using different mapping port for standalone mode |	Major|
+| [INLONG-265](https://issues.apache.org/jira/browse/INLONG-265) | Unexpected broker disappearance in broker list after updating default broker metadata |	Major|
 
 ### TASK:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-193](https://issues.apache.org/jira/browse/TUBEMQ-193)  | Update project document content |  Major |
+|[INLONG-193](https://issues.apache.org/jira/browse/INLONG-193)  | Update project document content |  Major |
 
 ### SUB-TASK:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-123](https://issues.apache.org/jira/browse/TUBEMQ-123) | Batch flush data to disk |  Major |
-|[TUBEMQ-126](https://issues.apache.org/jira/browse/TUBEMQ-126) | Increase the unflushed data bytes control |  Major |
-|[TUBEMQ-140](https://issues.apache.org/jira/browse/TUBEMQ-140) | Remove the SSD auxiliary consumption function |  Major |
-|[TUBEMQ-160](https://issues.apache.org/jira/browse/TUBEMQ-160) | Improve the protocol between Broker and Master |  Major |
-|[TUBEMQ-169](https://issues.apache.org/jira/browse/TUBEMQ-169) | support build with docker image |  Major |
-|[TUBEMQ-171](https://issues.apache.org/jira/browse/TUBEMQ-171) | master and broker support config hostname with “localhost” or "127.0.0.1" or dns address |  Major |
-|[TUBEMQ-172](https://issues.apache.org/jira/browse/TUBEMQ-172) | simplify start/stop script |  Major |
-|[TUBEMQ-173](https://issues.apache.org/jira/browse/TUBEMQ-173) | change jvm memory parameters for default deployment |  Major |
-|[TUBEMQ-174](https://issues.apache.org/jira/browse/TUBEMQ-174) | hange defaule accessing url of web gui to http://your-master-ip:8080 |  Major |
-|[TUBEMQ-178](https://issues.apache.org/jira/browse/TUBEMQ-178) | change default IPs configuration to localhost |  Major |
-|[TUBEMQ-188](https://issues.apache.org/jira/browse/TUBEMQ-188) | the example for demo topic catch exception |  Major |
-|[TUBEMQ-194](https://issues.apache.org/jira/browse/TUBEMQ-194) | [website]Remove SSD auxiliary storage introduction |  Major |
-|[TUBEMQ-195](https://issues.apache.org/jira/browse/TUBEMQ-195) | [website] Adjust the content of the Chinese part of the document |  Major |
-|[TUBEMQ-198](https://issues.apache.org/jira/browse/TUBEMQ-198) | Support TubeMQ source for flink |  Major |
-|[TUBEMQ-199](https://issues.apache.org/jira/browse/TUBEMQ-199) | Support TubeMQ sink for flink |  Major |
-|[TUBEMQ-204](https://issues.apache.org/jira/browse/TUBEMQ-204) | Remove document address guideline |  Major |
-|[TUBEMQ-221](https://issues.apache.org/jira/browse/TUBEMQ-221) | make quick start doc more easy for reading |  Major |
-|[TUBEMQ-240](https://issues.apache.org/jira/browse/TUBEMQ-240) | add status command for broker/master script |  Major |
-|[TUBEMQ-241](https://issues.apache.org/jira/browse/TUBEMQ-241) | add helm chart for tubemq |  Major |
-|[TUBEMQ-242](https://issues.apache.org/jira/browse/TUBEMQ-242) | Support Table interface for TubeMQ flink connector |  Major |
-|[TUBEMQ-244](https://issues.apache.org/jira/browse/TUBEMQ-244) | tubemq web support access using proxy IP |  Major |
-|[TUBEMQ-246](https://issues.apache.org/jira/browse/TUBEMQ-246) | support register broker using hostname |  Major |
-|[TUBEMQ-295](https://issues.apache.org/jira/browse/TUBEMQ-295) | Modify CHANGES.md to add 0.5.0 version release modification |  Major |
-|[TUBEMQ-299](https://issues.apache.org/jira/browse/TUBEMQ-299) | Fix RAT check warnning |  Major |
-|[TUBEMQ-300](https://issues.apache.org/jira/browse/TUBEMQ-300) | Update LICENSE |  Major |
+|[INLONG-123](https://issues.apache.org/jira/browse/INLONG-123) | Batch flush data to disk |  Major |
+|[INLONG-126](https://issues.apache.org/jira/browse/INLONG-126) | Increase the unflushed data bytes control |  Major |
+|[INLONG-140](https://issues.apache.org/jira/browse/INLONG-140) | Remove the SSD auxiliary consumption function |  Major |
+|[INLONG-160](https://issues.apache.org/jira/browse/INLONG-160) | Improve the protocol between Broker and Master |  Major |
+|[INLONG-169](https://issues.apache.org/jira/browse/INLONG-169) | support build with docker image |  Major |
+|[INLONG-171](https://issues.apache.org/jira/browse/INLONG-171) | master and broker support config hostname with “localhost” or "127.0.0.1" or dns address |  Major |
+|[INLONG-172](https://issues.apache.org/jira/browse/INLONG-172) | simplify start/stop script |  Major |
+|[INLONG-173](https://issues.apache.org/jira/browse/INLONG-173) | change jvm memory parameters for default deployment |  Major |
+|[INLONG-174](https://issues.apache.org/jira/browse/INLONG-174) | hange defaule accessing url of web gui to http://your-master-ip:8080 |  Major |
+|[INLONG-178](https://issues.apache.org/jira/browse/INLONG-178) | change default IPs configuration to localhost |  Major |
+|[INLONG-188](https://issues.apache.org/jira/browse/INLONG-188) | the example for demo topic catch exception |  Major |
+|[INLONG-194](https://issues.apache.org/jira/browse/INLONG-194) | [website]Remove SSD auxiliary storage introduction |  Major |
+|[INLONG-195](https://issues.apache.org/jira/browse/INLONG-195) | [website] Adjust the content of the Chinese part of the document |  Major |
+|[INLONG-198](https://issues.apache.org/jira/browse/INLONG-198) | Support TubeMQ source for flink |  Major |
+|[INLONG-199](https://issues.apache.org/jira/browse/INLONG-199) | Support TubeMQ sink for flink |  Major |
+|[INLONG-204](https://issues.apache.org/jira/browse/INLONG-204) | Remove document address guideline |  Major |
+|[INLONG-221](https://issues.apache.org/jira/browse/INLONG-221) | make quick start doc more easy for reading |  Major |
+|[INLONG-240](https://issues.apache.org/jira/browse/INLONG-240) | add status command for broker/master script |  Major |
+|[INLONG-241](https://issues.apache.org/jira/browse/INLONG-241) | add helm chart for tubemq |  Major |
+|[INLONG-242](https://issues.apache.org/jira/browse/INLONG-242) | Support Table interface for TubeMQ flink connector |  Major |
+|[INLONG-244](https://issues.apache.org/jira/browse/INLONG-244) | tubemq web support access using proxy IP |  Major |
+|[INLONG-246](https://issues.apache.org/jira/browse/INLONG-246) | support register broker using hostname |  Major |
+|[INLONG-295](https://issues.apache.org/jira/browse/INLONG-295) | Modify CHANGES.md to add 0.5.0 version release modification |  Major |
+|[INLONG-299](https://issues.apache.org/jira/browse/INLONG-299) | Fix RAT check warnning |  Major |
+|[INLONG-300](https://issues.apache.org/jira/browse/INLONG-300) | Update LICENSE |  Major |
 
 
 
@@ -389,65 +389,65 @@
 
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-42](https://issues.apache.org/jira/browse/TUBEMQ-42) | Add peer information about message received	Major	New Feature |  Major|
+|[INLONG-42](https://issues.apache.org/jira/browse/INLONG-42) | Add peer information about message received	Major	New Feature |  Major|
 
 ### IMPROVEMENTS:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-| [TUBEMQ-16](https://issues.apache.org/jira/browse/TUBEMQ-16) |Correct BdbStoreService#isPrimaryNodeActived to BdbStoreService#isPrimaryNodeActive|	Low|
-| [TUBEMQ-18](https://issues.apache.org/jira/browse/TUBEMQ-18) |Correct TMaster#idGenerater to TMaster#idGenerator|	Low|
-| [TUBEMQ-19](https://issues.apache.org/jira/browse/TUBEMQ-19) |Correct parameter names to fit in camel case|	Low|
-| [TUBEMQ-20](https://issues.apache.org/jira/browse/TUBEMQ-20) |Correct DefaultLoadBalancer#balance parameter	| Low|
-| [TUBEMQ-21](https://issues.apache.org/jira/browse/TUBEMQ-21) |Change version number from x.y-SNAPSHOT to x.y.z-incubating-SNAPSHOT|	Normal|
-| [TUBEMQ-22](https://issues.apache.org/jira/browse/TUBEMQ-22) |Correct ClientSubInfo#getTopicProcesser -> ClientSubInfo#getTopicProcessor|	Low|
-| [TUBEMQ-23](https://issues.apache.org/jira/browse/TUBEMQ-23) |Improve project README content introduction|	Major|
-| [TUBEMQ-24](https://issues.apache.org/jira/browse/TUBEMQ-24) |Add NOTICE and adjust LICENSE	| Major|
-| [TUBEMQ-26](https://issues.apache.org/jira/browse/TUBEMQ-26) |correct spelling (difftime-> diffTime)	|Low|
-| [TUBEMQ-27](https://issues.apache.org/jira/browse/TUBEMQ-27) |replace StringBuffer with StringBuilder |	Major|
-| [TUBEMQ-28](https://issues.apache.org/jira/browse/TUBEMQ-28) |ignore path error	|Major|
-| [TUBEMQ-29](https://issues.apache.org/jira/browse/TUBEMQ-29) |Change the package name to org.apache.tubemq.""	|Major|
-| [TUBEMQ-33](https://issues.apache.org/jira/browse/TUBEMQ-33) |refactor enum implement from annoymouse inner class	| Major|
-| [TUBEMQ-38](https://issues.apache.org/jira/browse/TUBEMQ-38) |Add Broker's running status check	| Major||
-| [TUBEMQ-39](https://issues.apache.org/jira/browse/TUBEMQ-39) |Optimize the loadMessageStores() logic	| Nor|mal|
-| [TUBEMQ-40](https://issues.apache.org/jira/browse/TUBEMQ-40) |Optimize message disk store classes's logic	| Major|
-| [TUBEMQ-43](https://issues.apache.org/jira/browse/TUBEMQ-43) |Add DeletePolicy's value check	| Major|
-| [TUBEMQ-44](https://issues.apache.org/jira/browse/TUBEMQ-44) |Remove unnecessary synchronized definition of shutdown () function	| Normal|
-| [TUBEMQ-49](https://issues.apache.org/jira/browse/TUBEMQ-49) |setTimeoutTime change to updTimeoutTime	| Major|
-| [TUBEMQ-50](https://issues.apache.org/jira/browse/TUBEMQ-50) |Replace fastjson to gson	| Major|
-| [TUBEMQ-7](https://issues.apache.org/jira/browse/TUBEMQ-7) | Using StringBuilder instead of StringBuffer in BaseResult	| Low|
-| [TUBEMQ-9](https://issues.apache.org/jira/browse/TUBEMQ-9) | Remove some unnecessary code	| Minor |
+| [INLONG-16](https://issues.apache.org/jira/browse/INLONG-16) |Correct BdbStoreService#isPrimaryNodeActived to BdbStoreService#isPrimaryNodeActive|	Low|
+| [INLONG-18](https://issues.apache.org/jira/browse/INLONG-18) |Correct TMaster#idGenerater to TMaster#idGenerator|	Low|
+| [INLONG-19](https://issues.apache.org/jira/browse/INLONG-19) |Correct parameter names to fit in camel case|	Low|
+| [INLONG-20](https://issues.apache.org/jira/browse/INLONG-20) |Correct DefaultLoadBalancer#balance parameter	| Low|
+| [INLONG-21](https://issues.apache.org/jira/browse/INLONG-21) |Change version number from x.y-SNAPSHOT to x.y.z-incubating-SNAPSHOT|	Normal|
+| [INLONG-22](https://issues.apache.org/jira/browse/INLONG-22) |Correct ClientSubInfo#getTopicProcesser -> ClientSubInfo#getTopicProcessor|	Low|
+| [INLONG-23](https://issues.apache.org/jira/browse/INLONG-23) |Improve project README content introduction|	Major|
+| [INLONG-24](https://issues.apache.org/jira/browse/INLONG-24) |Add NOTICE and adjust LICENSE	| Major|
+| [INLONG-26](https://issues.apache.org/jira/browse/INLONG-26) |correct spelling (difftime-> diffTime)	|Low|
+| [INLONG-27](https://issues.apache.org/jira/browse/INLONG-27) |replace StringBuffer with StringBuilder |	Major|
+| [INLONG-28](https://issues.apache.org/jira/browse/INLONG-28) |ignore path error	|Major|
+| [INLONG-29](https://issues.apache.org/jira/browse/INLONG-29) |Change the package name to org.apache.tubemq.""	|Major|
+| [INLONG-33](https://issues.apache.org/jira/browse/INLONG-33) |refactor enum implement from annoymouse inner class	| Major|
+| [INLONG-38](https://issues.apache.org/jira/browse/INLONG-38) |Add Broker's running status check	| Major||
+| [INLONG-39](https://issues.apache.org/jira/browse/INLONG-39) |Optimize the loadMessageStores() logic	| Nor|mal|
+| [INLONG-40](https://issues.apache.org/jira/browse/INLONG-40) |Optimize message disk store classes's logic	| Major|
+| [INLONG-43](https://issues.apache.org/jira/browse/INLONG-43) |Add DeletePolicy's value check	| Major|
+| [INLONG-44](https://issues.apache.org/jira/browse/INLONG-44) |Remove unnecessary synchronized definition of shutdown () function	| Normal|
+| [INLONG-49](https://issues.apache.org/jira/browse/INLONG-49) |setTimeoutTime change to updTimeoutTime	| Major|
+| [INLONG-50](https://issues.apache.org/jira/browse/INLONG-50) |Replace fastjson to gson	| Major|
+| [INLONG-7](https://issues.apache.org/jira/browse/INLONG-7) | Using StringBuilder instead of StringBuffer in BaseResult	| Low|
+| [INLONG-9](https://issues.apache.org/jira/browse/INLONG-9) | Remove some unnecessary code	| Minor |
 
 ### BUG FIXES:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-| [TUBEMQ-10](https://issues.apache.org/jira/browse/TUBEMQ-10) |Fix Javadoc error|Low|
-| [TUBEMQ-14](https://issues.apache.org/jira/browse/TUBEMQ-14) |Some compilation errors|Major|
-| [TUBEMQ-15](https://issues.apache.org/jira/browse/TUBEMQ-15) |Correct typo in http_access_API_definition.md|Low|
-| [TUBEMQ-32](https://issues.apache.org/jira/browse/TUBEMQ-32) |File path not match with package name in tubemq-client module|Major|
-| [TUBEMQ-35](https://issues.apache.org/jira/browse/TUBEMQ-35) |check illegal package's field value|Normal|
-| [TUBEMQ-36](https://issues.apache.org/jira/browse/TUBEMQ-36) |Remove unnecessary removefirst() function printing|Normal|
-| [TUBEMQ-37](https://issues.apache.org/jira/browse/TUBEMQ-37) |Offset is set to 0 when Broker goes offline|Major|
-| [TUBEMQ-45](https://issues.apache.org/jira/browse/TUBEMQ-45) |Check groupName with checkHostName function|Major|
-| [TUBEMQ-48](https://issues.apache.org/jira/browse/TUBEMQ-48) |No timeout when setting consumer timeout|Major|
-| [TUBEMQ-59](https://issues.apache.org/jira/browse/TUBEMQ-59) |Null pointer exception is thrown while constructing ConsumerConfig with MasterInfo|Normal|
-| [TUBEMQ-62](https://issues.apache.org/jira/browse/TUBEMQ-62) |consumed and set consumerConfig.setConsumeModel (0) for the first time|Major|
-| [TUBEMQ-66](https://issues.apache.org/jira/browse/TUBEMQ-66) |TubeSingleSessionFactory shutdown bug|Normal|
-| [TUBEMQ-85](https://issues.apache.org/jira/browse/TUBEMQ-85) |There is NPE when creating PullConsumer with TubeSingleSessionFactory|Major|
-| [TUBEMQ-88](https://issues.apache.org/jira/browse/TUBEMQ-88) |Broker does not take effect after the deletePolicy value is changed|Major|
-| [TUBEMQ-149](https://issues.apache.org/jira/browse/TUBEMQ-149) |Some of the consumers stop consuming their corresponding partitions and never release the partition to others|Major|
-| [TUBEMQ-153](https://issues.apache.org/jira/browse/TUBEMQ-153) |update copyright notices year to 2020|  Major |
-| [TUBEMQ-165](https://issues.apache.org/jira/browse/TUBEMQ-165) |Remove unnecessary fiiles|  Major |
+| [INLONG-10](https://issues.apache.org/jira/browse/INLONG-10) |Fix Javadoc error|Low|
+| [INLONG-14](https://issues.apache.org/jira/browse/INLONG-14) |Some compilation errors|Major|
+| [INLONG-15](https://issues.apache.org/jira/browse/INLONG-15) |Correct typo in http_access_API_definition.md|Low|
+| [INLONG-32](https://issues.apache.org/jira/browse/INLONG-32) |File path not match with package name in tubemq-client module|Major|
+| [INLONG-35](https://issues.apache.org/jira/browse/INLONG-35) |check illegal package's field value|Normal|
+| [INLONG-36](https://issues.apache.org/jira/browse/INLONG-36) |Remove unnecessary removefirst() function printing|Normal|
+| [INLONG-37](https://issues.apache.org/jira/browse/INLONG-37) |Offset is set to 0 when Broker goes offline|Major|
+| [INLONG-45](https://issues.apache.org/jira/browse/INLONG-45) |Check groupName with checkHostName function|Major|
+| [INLONG-48](https://issues.apache.org/jira/browse/INLONG-48) |No timeout when setting consumer timeout|Major|
+| [INLONG-59](https://issues.apache.org/jira/browse/INLONG-59) |Null pointer exception is thrown while constructing ConsumerConfig with MasterInfo|Normal|
+| [INLONG-62](https://issues.apache.org/jira/browse/INLONG-62) |consumed and set consumerConfig.setConsumeModel (0) for the first time|Major|
+| [INLONG-66](https://issues.apache.org/jira/browse/INLONG-66) |TubeSingleSessionFactory shutdown bug|Normal|
+| [INLONG-85](https://issues.apache.org/jira/browse/INLONG-85) |There is NPE when creating PullConsumer with TubeSingleSessionFactory|Major|
+| [INLONG-88](https://issues.apache.org/jira/browse/INLONG-88) |Broker does not take effect after the deletePolicy value is changed|Major|
+| [INLONG-149](https://issues.apache.org/jira/browse/INLONG-149) |Some of the consumers stop consuming their corresponding partitions and never release the partition to others|Major|
+| [INLONG-153](https://issues.apache.org/jira/browse/INLONG-153) |update copyright notices year to 2020|  Major |
+| [INLONG-165](https://issues.apache.org/jira/browse/INLONG-165) |Remove unnecessary fiiles|  Major |
 
 ### TASK:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-12](https://issues.apache.org/jira/browse/TUBEMQ-12)  |Change to use Apache License V2   |  Major |
+|[INLONG-12](https://issues.apache.org/jira/browse/INLONG-12)  |Change to use Apache License V2   |  Major |
 
 ### SUB-TASK:
 | JIRA | Summary | Priority |
 |:---- |:---- | :--- |
-|[TUBEMQ-130](https://issues.apache.org/jira/browse/TUBEMQ-130) |Generate CHANGES.md and DISCLAIMER-WIP   |  Major |
-|[TUBEMQ-133](https://issues.apache.org/jira/browse/TUBEMQ-133) |Add Apache parent pom |  Major |
-|[TUBEMQ-134](https://issues.apache.org/jira/browse/TUBEMQ-134) |add maven-source-plugin for generate source jar|  Major |
-|[TUBEMQ-135](https://issues.apache.org/jira/browse/TUBEMQ-135) |Refactoring all pom.xml|  Major |
-|[TUBEMQ-136](https://issues.apache.org/jira/browse/TUBEMQ-136) |Add LICENSE/NOTICE/DISCLAIMER-WIP to binary package|  Major |
+|[INLONG-130](https://issues.apache.org/jira/browse/INLONG-130) |Generate CHANGES.md and DISCLAIMER-WIP   |  Major |
+|[INLONG-133](https://issues.apache.org/jira/browse/INLONG-133) |Add Apache parent pom |  Major |
+|[INLONG-134](https://issues.apache.org/jira/browse/INLONG-134) |add maven-source-plugin for generate source jar|  Major |
+|[INLONG-135](https://issues.apache.org/jira/browse/INLONG-135) |Refactoring all pom.xml|  Major |
+|[INLONG-136](https://issues.apache.org/jira/browse/INLONG-136) |Add LICENSE/NOTICE/DISCLAIMER-WIP to binary package|  Major |
diff --git a/DISCLAIMER-WIP b/DISCLAIMER-WIP
index 6c72cf3..d777daa 100644
--- a/DISCLAIMER-WIP
+++ b/DISCLAIMER-WIP
@@ -1,4 +1,4 @@
-Apache TubeMQ is an effort undergoing incubation at The Apache Software Foundation (ASF),
+Apache InLong is an effort undergoing incubation at The Apache Software Foundation (ASF),
 sponsored by the Apache Incubator. Incubation is required of all newly accepted projects
 until a further review indicates that the infrastructure, communications, and decision
 making process have stabilized in a manner consistent with other successful ASF projects.
@@ -15,4 +15,4 @@ is likely to be incomplete):
 If you are planning to incorporate this work into your product/project, please be aware that
 you will need to conduct a thorough licensing review to determine the overall implications of
 including this work. For the current status of this project through the Apache Incubator
-visit: https://incubator.apache.org/projects/tubemq.html
\ No newline at end of file
+visit: https://incubator.apache.org/projects/inlong.html
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index a883d4c..5ae2686 100644
--- a/LICENSE
+++ b/LICENSE
@@ -210,7 +210,7 @@
 1.1 Third party MIT license licenses
 =========
 
-1.1.1 resources/assets/lib/jquery.min.js
+1.1.1 inlong-tubemq/resources/assets/lib/jquery.min.js
  Source  : jquery 1.11.3
  License : https://github.com/jquery/jquery/blob/1.11.3/MIT-LICENSE.txt
 | Copyright 2014 jQuery Foundation and other contributors
@@ -237,7 +237,7 @@
 
 ----
 
-1.1.2 resources/assets/lib/DataTables/*
+1.1.2 inlong-tubemq/resources/assets/lib/DataTables/*
  Source  : datatables  1.10.7
  License : https://github.com/DataTables/DataTables/blob/1.10.7/license.txt
 | Copyright (c) 2008-2013 SpryMedia Limited
@@ -263,8 +263,8 @@
 
 ----
 
-1.1.3 resources/assets/public/css/style.css
-      resources/assets/public/css/ie.css
+1.1.3 inlong-tubemq/resources/assets/public/css/style.css
+      inlong-tubemq/resources/assets/public/css/ie.css
  Source  : Compass
  License :  https://github.com/Compass/compass/blob/stable/LICENSE.markdown
  | Copyright (c) 2009-2014 Christopher M. Eppstein
@@ -285,8 +285,8 @@
 1.2 Third party BSD 3-Clause license
 =========
 
-1.2.1 tubemq-client-twins/tubemq-client-cpp/src/any.h
-      tubemq-client-twins/tubemq-client-cpp/src/buffer.h
+1.2.1 inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/any.h
+      inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/buffer.h
  Source  : https://github.com/Qihoo360/evpp/blob/master/evpp/any.h version c5038a6
            https://github.com/Qihoo360/evpp/blob/master/evpp/buffer.h version b2535d7
  License : https://github.com/Qihoo360/evpp/blob/master/LICENSE
@@ -326,28 +326,32 @@
 1.3 Third party Apache 2.0 Licenses
 =========
 
-1.3.1 tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/Bytes.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HashedBytes.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HasThread.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/RecoverableZooKeeper.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperWatcher.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperListener.java
-      tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/ThreadUtils.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperConnectionException.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/master/utils/Chore.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZKUtil.java
-      tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/RowLock.java
+1.3.1 inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/Bytes.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HashedBytes.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/HasThread.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/RecoverableZooKeeper.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperWatcher.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperListener.java
+      inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/ThreadUtils.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZooKeeperConnectionException.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/master/utils/Chore.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/offsetstorage/zookeeper/ZKUtil.java
+      inlong-tubemq/tubemq-server/src/main/java/org/apache/tubemq/server/common/utils/RowLock.java
  Source  : hbase 0.94.27 (Please note that the software have been modified.)
  License : https://github.com/apache/hbase/blob/rel/0.94.27/LICENSE.txt
 
-1.3.2 tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferInputStream.java
-      tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferOutputStream.java
+1.3.2 inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferInputStream.java
+      inlong-tubemq/tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferOutputStream.java
  Source  : Apache Avro 1.7.6
  License : https://github.com/apache/avro/blob/release-1.7.6/LICENSE.txt
 
-1.3.3 tubemq-client-twins/tubemq-client-cpp/src/future.h
+1.3.3 inlong-tubemq/tubemq-client-twins/tubemq-client-cpp/src/future.h
  Source  : Apache Pulsar
  License : https://github.com/apache/pulsar/blob/master/LICENSE
+ 
+1.3.4 codestyle/checkstyle.xml  
+ Source  :checkstyle 8.44 (Modified from src/main/resources/google_checks.xml)
+ License : https://github.com/checkstyle/checkstyle/blob/master/LICENSE.apache20
 
 ----
 
diff --git a/NOTICE b/NOTICE
index e451d38..bfe7504 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,4 +1,4 @@
-Apache TubeMQ
+Apache InLong
 Copyright 2019-2021 The Apache Software Foundation.
 
 This product includes software developed at
diff --git a/README.md b/README.md
index b7f8c68..bb3c434 100644
--- a/README.md
+++ b/README.md
@@ -1,110 +1,96 @@
-# Apache TubeMQ
-[![Build Status](https://travis-ci.org/apache/incubator-tubemq.svg?branch=master)](https://travis-ci.org/apache/incubator-tubemq)
-[![CodeCov](https://codecov.io/gh/apache/incubator-tubemq/branch/master/graph/badge.svg)](https://codecov.io/gh/apache/incubator-tubemq)
-[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.tubemq/tubemq/badge.svg)](http://search.maven.org/#search%7Cga%7C1%7Corg.apache.tubemq)
-[![GitHub release](https://img.shields.io/badge/release-download-orange.svg)](https://tubemq.apache.org/en-us/docs/download/download.html)
-[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
-
-[Apache TubeMQ](https://tubemq.apache.org)(incubating) is a trillion-records-scale distributed messaging queue (MQ) system, focuses on data transmission and storage under massive data. Compared to many open source MQ projects, TubeMQ has unique advantages in terms of stability, performance, and low cost.
+<!--
 
-It offers a variety of features:
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
 
-* Pluggable transport protocols, such as TCP, SSL
-* Support big-data and streaming ecosystem integration
-* Message retroactivity by time or offset
-* Efficient pull and push consumption model
-* Flexible distributed scale-out deployment architecture
-* Feature-rich administrative dashboard for configuration
-* Authentication and authorization
+      http://www.apache.org/licenses/LICENSE-2.0
 
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
 
-## Contact us
+-->
 
-- Mailing lists
 
-    | Name                                                                          | Scope                           |                                                                 |                                                                     |                                                                              |
-    |:------------------------------------------------------------------------------|:--------------------------------|:----------------------------------------------------------------|:--------------------------------------------------------------------|:-----------------------------------------------------------------------------|
-    | [dev@tubemq.apache.org](mailto:dev@tubemq.apache.org)     | Development-related discussions | [Subscribe](mailto:dev-subscribe@tubemq.apache.org)   | [Unsubscribe](mailto:dev-unsubscribe@tubemq.apache.org)   | [Archives](http://mail-archives.apache.org/mod_mbox/tubemq-dev/)   |
+# Apache InLong
+[![Build Status](https://travis-ci.org/apache/incubator-inlong.svg?branch=master)](https://travis-ci.org/apache/incubator-inlong)
+[![CodeCov](https://codecov.io/gh/apache/incubator-inlong/branch/master/graph/badge.svg)](https://codecov.io/gh/apache/incubator-inlong)
+[![Maven Central](https://maven-badges.herokuapp.com/maven-central/org.apache.inlong/inlong/badge.svg)](http://search.maven.org/#search%7Cga%7C1%7Corg.apache.inlong)
+[![GitHub release](https://img.shields.io/badge/release-download-orange.svg)](https://inlong.apache.org/en-us/docs/download/download.html)
+[![License](https://img.shields.io/badge/license-Apache%202-4EB1BA.svg)](https://www.apache.org/licenses/LICENSE-2.0.html)
 
-- Home page: https://tubemq.apache.org
-- Issues: https://issues.apache.org/jira/browse/TubeMQ
 
+- [What is Apache InLong?](#what-is-apache-inlong)
+- [Features](#features)
+- [When should I use InLong?](#when-should-i-use-inlong)
+- [Building InLong](#building-inlong)
+- [Deploying InLong](#deploying-inlong)
+- [Join the Community](#join-the-community)
+- [Documentation](#documentation)
+- [License](#license)
 
-## Contributing
+# What is Apache InLong?
+[Apache InLong](https://inlong.apache.org)(incubating) is a one-stop data streaming platform that provides automatic, secure, distributed, and efficient data publishing and subscription capabilities. This platform helps you easily build stream-based data applications.
 
-We always welcome new contributions, whether for trivial cleanups, new features or other material rewards, more details see [here](https://tubemq.apache.org/en-us/docs/development/how-to-contribute.html).
+InLong was originally built at Tencent, has served online businesses for more than 8 years, to support massive data (data scale of more than 40 trillion pieces of data per day) reporting services in big data scenarios. The entire platform has integrated 5 modules:  Ingestion, Convergence, Caching, Sorting, and Management, so that the business only needs to provide data sources, data service quality, data landing clusters and data landing formats, that is, the data can be continuously pus [...]
 
+For getting more information, please visit our project documentation at https://inlong.apache.org/en-us/ .
+<img src="https://github.com/apache/incubator-inlong-website/blob/master/img/inlong_architecture.png" align="center" alt="Apache InLong"/>
 
 
-## Build TubeMQ
+## Features
+Apache InLong offers a variety of features:
+* **Ease of Use**: a SaaS-based service platform, you can easily and quickly report, transfer, and distribute data by publishing and subscribing to data based on topics.
+* **Stability & Reliability**: derived from the actual online production environment, it delivers high-performance processing capabilities for 10 trillion-level data streams and highly reliable services for 100 billion-level data streams.
+* **Comprehensive Features**: supports various types of data access methods and can be integrated with different types of Message Queue (MQ) services, it also provides real-time data extract, transform, and load (ETL) and sorting capabilities based on rules, allows you to plug features to extend system capabilities.
+* **Service Integration**: provides unified system monitoring and alert services, it provides fine-grained metrics to facilitate data visualization, you can view the running status of queues and topic-based data statistics in a unified data metric platform, configure the alert service based on your business requirements so that users can be alerted when errors occur.
+* **Scalability**: adopts a pluggable architecture that allows you to plug modules into the system based on specific protocols, so you can replace components and add features based on your business requirements
 
-### Prerequisites
 
-- Java 1.8
-- Maven 3.3+
+## When should I use InLong?
+InLong is based on MQ and aims to provide a one-stop, practice-tested module pluggable data stream access service platform,based on this system, users can easily build stream-based data applications. It is suitable for environments that need to quickly build a data reporting platform, as well as an ultra-large-scale data reporting environment that InLong is very suitable for, and an environment that needs to automatically sort and land the reported data.
 
-### Build Distribution Tarball
+InLong is only a one-stop data reporting pipeline platform. It cannot be used as a persistent data storage, nor does it support complex business logic processing on data streams.
 
-- Compile and Package:
-```bash
-mvn clean package -DskipTests
-```
-- (Optional) Build Using Docker:
-```bash
-docker run -v REPLACE_WITH_SOURCE_PATH:/tubemq  apachetubemq/tubemq-build clean package -DskipTests
+## Building InLong
+More detailed instructions can be found at [Quick Demo]() section in the documentation.
 ```
-- Run Unit Tests:
-```bash
-mvn test
-```
-- Build Individual Module:
-```bash
-mvn clean install
-cd module-name (e.g. tubemq-client)
-mvn test
-```
-After the build, please go to `tubemq-server/target`. You can find the
-**tubemq-server-[TUBEMQ-VERSION]-bin.tar.gz** file. It is the TubeMQ deployment package, which includes
-scripts, configuration files, dependency jars and web GUI code.
-
-### Setting Up Your IDE
+# Clone a repo
+$ git clone https://github.com/apache/incubator-inlong.git
+$ cd incubator-inlong
 
-If you want to build and debug source code in IDE, go to the project root, and run
+# Build InLong
+$ mvn clean install -DskipTests
 
-```bash
-mvn compile
+# Deploy components
+ # see Deploying InLong section
 ```
 
-This command will generate the Java source files from the `protoc` files, the generated files located in `target/generated-sources`.
+## Deploying InLong
+InLong integrates a complete component chain for data reporting in big data scenarios, and not support automatic installation of modules now, so we need to choose manually  to install all or some modules according to actual needs. Please refer to [Running InLong]() in our project documentation.
 
-(Optional) If you want to use local `protoc` executable, you can change the configuration of `protobuf-maven-plugin` in `tubemq-core/pom.xml` as below
-
-```xml
-<configuration>
-    <outputDirectory>${project.build.directory}/generated-sources/java</outputDirectory>
-    <protocExecutable>/usr/local/bin/protoc</protocExecutable>
-</configuration>
-```
-
-## Deploy and Start
-
-### Deploy TubeMQ Standalone
-Standalone mode starts zookeeper/master/broker services in one docker container:
-```
-docker run -p 8080:8080 -p 8000:8000 -p 8123:8123 --name tubemq -d apachetubemq/tubemq-all:latest
-```
-After container is running, you can access ` http://127.0.0.1:8080`, and reference to next `Quick Start` chapter for experience.
-
-**Tips**: Standalone Mode is only available for development and experience, it's not designed for production environment.
-
-
-### Deploy TubeMQ Cluster
-For the detail deployment and configuration of TubeMQ cluster nodes, please refer to the introduction of [Deploy TubeMQ Cluster](https://tubemq.apache.org/en-us/docs/quick_start.html).
 
+## Join the Community
+- Ask questions on [Apache InLong Slack](https://the-asf.slack.com/archives/C01QAG6U00L)
+- Join Apache InLong mailing lists  
+    | Name                                                                          | Scope                           |                                                                 |                                                                     |                                                                              |
+    |:------------------------------------------------------------------------------|:--------------------------------|:----------------------------------------------------------------|:--------------------------------------------------------------------|:-----------------------------------------------------------------------------|
+    | [dev@inlong.apache.org](mailto:dev@inlong.apache.org)     | Development-related discussions | [Subscribe](mailto:dev-subscribe@inlong.apache.org)   | [Unsubscribe](mailto:dev-unsubscribe@inlong.apache.org)   | [Archives](http://mail-archives.apache.org/mod_mbox/inlong-dev/)   |
+- Contributing: we always welcome new contributions, whether for trivial cleanups, new features or other material rewards, more details see [How to contribute](https://inlong.apache.org/en-us/docs/development/how-to-contribute.html).
 
+## Documentation
+- Home page: https://inlong.apache.org/en-us/
+- Issues: https://issues.apache.org/jira/browse/InLong
 
 ## License
-
 © Contributors Licensed under an [Apache-2.0](LICENSE) license.
 
 
diff --git a/bin/broker.cmd b/bin/broker.cmd
deleted file mode 100644
index b53dbbc..0000000
--- a/bin/broker.cmd
+++ /dev/null
@@ -1,28 +0,0 @@
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM <p>
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM <p>
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-REM Windows Startup Script for Broker Node
-REM please do not change any command or variable in this script, check out
-REM env.cmd for details.
-
-setlocal
-call "%~dp0env.cmd"
-
-set BROKERMAIN=org.apache.tubemq.server.tools.BrokerStartup
-set BROKERCFG=%~dp0../conf/broker.ini
-
-echo on
-call %JAVA% %BROKER_JVM_OPTS% %GENERIC_ARGS% "%BROKERMAIN%" -f "%BROKERCFG%"
-endlocal
\ No newline at end of file
diff --git a/bin/env.cmd b/bin/env.cmd
deleted file mode 100644
index df52f5d..0000000
--- a/bin/env.cmd
+++ /dev/null
@@ -1,31 +0,0 @@
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM <p>
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM <p>
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-REM Windows Startup Script about Environment Settings
-REM Java runtime evironment could be specified here.
-
-set BASE_DIR=%~dp0..
-set CLASSPATH=%BASE_DIR%\lib\*;%BASE_DIR%\tubemq-server\target\*;%CLASSPATH%
-set GENERIC_ARGS="-Dtubemq.home=%BASE_DIR%" -cp "%CLASSPATH%" "-Dlog4j.configuration=file:%BASE_DIR%\conf\master.log4j.properties"
-
-REM If there's no system-wide JAVA_HOME or there's need to run on specific Java,
-REM please uncomment the following JAVA_HOME line, and specify the java home path.
-REM set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_241
-
-set JAVA="%JAVA_HOME%\bin\java"
-
-REM One may add extra Java runtime flags in addition to each role: Master or Broker
-set MASTER_JVM_OPTS=-Xmx1g -Xms256m -server
-set BROKER_JVM_OPTS=-Xmx1g -Xms512m -server
\ No newline at end of file
diff --git a/bin/groupAdmin.sh b/bin/groupAdmin.sh
deleted file mode 100644
index a05cfa1..0000000
--- a/bin/groupAdmin.sh
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#project directory
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-  #echo "TubeMQ master is at $BASE_DIR"
-fi
-source $BASE_DIR/bin/env.sh
-nohup $JAVA $TOOLS_ARGS  org.apache.tubemq.server.tools.BdbGroupAdmin $1 $2 $3 2>&1 &
-
-
diff --git a/bin/indexReBuilder.sh b/bin/indexReBuilder.sh
deleted file mode 100644
index 41a8396..0000000
--- a/bin/indexReBuilder.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-#project directory
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-  #echo "TubeMQ broker is at $BASE_DIR"
-fi
-source $BASE_DIR/bin/env.sh
-
-AS_USER=`whoami`
-LOG_DIR="$BASE_DIR/logs"
-LOG_FILE="$LOG_DIR/indexRepair.log"
-touch $LOG_FILE
-mkdir -p $LOG_DIR
-
-chown -R $AS_USER $LOG_DIR
-
-echo "Starting index file(s) repair..."
-
-nohup $JAVA $TOOL_REPAIR_ARGS  org.apache.tubemq.server.tools.StoreRepairAdmin $1 $2 2>&1 >>$LOG_FILE  &
-
-
-
-
diff --git a/bin/master.cmd b/bin/master.cmd
deleted file mode 100644
index b1446b0..0000000
--- a/bin/master.cmd
+++ /dev/null
@@ -1,28 +0,0 @@
-REM Licensed to the Apache Software Foundation (ASF) under one or more
-REM contributor license agreements.  See the NOTICE file distributed with
-REM this work for additional information regarding copyright ownership.
-REM The ASF licenses this file to You under the Apache License, Version 2.0
-REM (the "License"); you may not use this file except in compliance with
-REM the License.  You may obtain a copy of the License at
-REM <p>
-REM http://www.apache.org/licenses/LICENSE-2.0
-REM <p>
-REM Unless required by applicable law or agreed to in writing, software
-REM distributed under the License is distributed on an "AS IS" BASIS,
-REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-REM See the License for the specific language governing permissions and
-REM limitations under the License.
-
-REM Windows Startup Script for Master Node
-REM please do not change any command or variable in this script, check out
-REM env.cmd for details.
-
-setlocal
-call "%~dp0env.cmd"
-
-set MASTERMAIN=org.apache.tubemq.server.tools.MasterStartup
-set MASTERCFG=%~dp0..\conf\master.ini
-
-echo on
-call %JAVA% %MASTER_JVM_OPTS% %GENERIC_ARGS% "%MASTERMAIN%" -f "%MASTERCFG%"
-endlocal
\ No newline at end of file
diff --git a/bin/tubemq-broker-admin.sh b/bin/tubemq-broker-admin.sh
deleted file mode 100644
index b1cedf5..0000000
--- a/bin/tubemq-broker-admin.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-  #echo "TubeMQ master is at $BASE_DIR"
-fi
-source $BASE_DIR/bin/env.sh
-$JAVA $TOOLS_ARGS org.apache.tubemq.server.tools.cli.CliBrokerAdmin $@
diff --git a/bin/tubemq-consumer-test.sh b/bin/tubemq-consumer-test.sh
deleted file mode 100644
index 23292fb..0000000
--- a/bin/tubemq-consumer-test.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-  #echo "TubeMQ master is at $BASE_DIR"
-fi
-source $BASE_DIR/bin/env.sh
-$JAVA $TOOLS_ARGS org.apache.tubemq.server.tools.cli.CliConsumer $@
diff --git a/bin/tubemq-producer-test.sh b/bin/tubemq-producer-test.sh
deleted file mode 100644
index 0f96033..0000000
--- a/bin/tubemq-producer-test.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-  #echo "TubeMQ master is at $BASE_DIR"
-fi
-source $BASE_DIR/bin/env.sh
-$JAVA $TOOLS_ARGS org.apache.tubemq.server.tools.cli.CliProducer $@
diff --git a/bin/tubemq.sh b/bin/tubemq.sh
deleted file mode 100644
index 3f37541..0000000
--- a/bin/tubemq.sh
+++ /dev/null
@@ -1,178 +0,0 @@
-#!/bin/bash
-
-#
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#    http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# project directory
-if [ -z "$BASE_DIR" ] ; then
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-      PRG="$link"
-    else
-      PRG="`dirname "$PRG"`/$link"
-    fi
-  done
-  BASE_DIR=`dirname "$PRG"`/..
-
-  # make it fully qualified
-  BASE_DIR=`cd "$BASE_DIR" && pwd`
-fi
-
-# load environmental variables
-source $BASE_DIR/bin/env.sh
-
-AS_USER=`whoami`
-LOG_DIR="$BASE_DIR/logs"
-PID_DIR="$BASE_DIR/logs"
-
-# check service running status
-function running(){
-  if [ -f "$PID_FILE" ]; then
-    pid=$(cat "$PID_FILE")
-    process=`ps aux | grep " $pid "|grep "\-Dtubemq\.home=$BASE_DIR" | grep -v grep`;
-    if [ "$process" == "" ]; then
-      return 1;
-    else
-      return 0;
-    fi
-  else
-    return 1
-  fi
-}
-
-# start the specified service
-function start_server() {
-  if running; then
-    echo "TubeMQ $SERVICE is running."
-    exit 1
-  fi
-
-  mkdir -p $PID_DIR
-  touch $LOG_FILE
-  mkdir -p $LOG_DIR
-  chown -R $AS_USER $PID_DIR
-  chown -R $AS_USER $LOG_DIR
-
-  config_files="-f $BASE_DIR/conf/$SERVICE.ini"
-
-  echo "Starting TubeMQ $SERVICE server..."
-  pushd .
-    cd $BASE_DIR
-    #echo "$JAVA $SERVICE_ARGS $SERVICE_CLASS $config_files"
-    sleep 1
-    nohup $JAVA $SERVICE_ARGS $SERVICE_CLASS $config_files 2>&1 >>$LOG_FILE &
-    echo $! > $PID_FILE
-    chmod 755 $PID_FILE
-  popd
-}
-
-# status of the specified service
-function status_server() {
-  if running; then
-    echo "TubeMQ $SERVICE is running."
-    exit 0
-  else
-    echo "TubeMQ $SERVICE is not running."
-    exit 1
-  fi
-}
-
-# stop the specified service
-function stop_server() {
-  if ! running; then
-    echo "TubeMQ $SERVICE is not running."
-    exit 1
-  fi
-  count=0
-  pid=$(cat $PID_FILE)
-  while running;
-  do
-    let count=$count+1
-    echo "Stopping TubeMQ $SERVICE $count times"
-    if [ $count -gt 10 ]; then
-      echo "kill -9 $pid"
-      kill -9 $pid
-    else
-      kill $pid
-    fi
-    sleep 6;
-  done
-  echo "Stop TubeMQ $SERVICE successfully."
-  rm $PID_FILE
-}
-
-# display usage
-function help() {
-  echo "Usage: tubemq {master|broker} {status|start|stop|restart}" >&2
-  echo "       status:      start the master/broker server"
-  echo "       start:      start the master/broker server"
-  echo "       stop:       stop the master/broker server"
-  echo "       restart:    restart the master/broker server"
-}
-
-# if less than two arguments supplied
-if [ $# -lt 2 ]; then
-  help;
-  exit 1;
-fi
-
-SERVICE=$1
-COMMAND=$2
-shift 2
-
-case $SERVICE in
-  master)
-    SERVICE_CLASS="org.apache.tubemq.server.tools.MasterStartup"
-    SERVICE_ARGS=$MASTER_ARGS
-    ;;
-  broker)
-    SERVICE_CLASS="org.apache.tubemq.server.tools.BrokerStartup"
-    SERVICE_ARGS=$BROKER_ARGS
-    ;;
-  *)
-    help;
-    exit 1;
-    ;;
-esac
-
-LOG_FILE="$LOG_DIR/$SERVICE.log"
-PID_FILE="$PID_DIR/.$SERVICE.run.pid"
-
-case $COMMAND in
-  status)
-    status_server $@;
-    ;;
-  start)
-    start_server $@;
-    ;;
-  stop)
-    stop_server $@;
-    ;;
-  restart)
-    $0 $SERVICE stop $@
-    $0 $SERVICE start $@
-    ;;
-  *)
-    help;
-    exit 1;
-    ;;
-esac
diff --git a/codestyle/checkstyle.xml b/codestyle/checkstyle.xml
index 3d30c02..b478134 100644
--- a/codestyle/checkstyle.xml
+++ b/codestyle/checkstyle.xml
@@ -1,418 +1,413 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
--->
+<?xml version="1.0"?>
 <!DOCTYPE module PUBLIC
-        "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
-        "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
+          "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
+          "https://checkstyle.org/dtds/configuration_1_3.dtd">
 
-<!-- This is a checkstyle configuration file. For descriptions of
-what the following rules do, please see the checkstyle configuration
-page at http://checkstyle.sourceforge.net/config.html -->
+<!--
+    Checkstyle configuration that checks the Google coding conventions from Google Java Style
+    that can be found at https://google.github.io/styleguide/javaguide.html
 
-<module name="Checker">
+    Checkstyle is very configurable. Be sure to read the documentation at
+    http://checkstyle.org (or in your downloaded distribution).
 
-    <module name="FileTabCharacter">
-        <!-- Checks that there are no tab characters in the file. -->
-    </module>
+    To completely disable a check, just comment it out or delete it from the file.
+    To suppress certain violations please review suppression filters.
 
-    <module name="RegexpSingleline">
-        <!-- Checks that TODOs don't have stuff in parenthesis, e.g., username. -->
-        <property name="format" value="((//.*)|(\*.*))TODO\(" />
-        <property name="message" value="TODO comments must not include usernames." />
-        <property name="severity" value="error" />
-    </module>
+    Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
+ -->
 
-    <module name="RegexpSingleline">
-        <property name="format" value="\s+$"/>
-        <property name="message" value="Trailing whitespace"/>
-        <property name="severity" value="error"/>
-    </module>
+<module name = "Checker">
+    <property name="charset" value="UTF-8"/>
+    <property name="localeCountry" value="ZH"/>
+    <property name="localeLanguage" value="zh"/>
 
-    <module name="RegexpSingleline">
-        <property name="format" value="Throwables.propagate\("/>
-        <property name="message" value="Throwables.propagate is deprecated"/>
-        <property name="severity" value="error"/>
-    </module>
+    <property name="severity" value="error"/>
 
-    <!-- Prevent *Tests.java as tools may not pick them up -->
-    <module name="RegexpOnFilename">
-        <property name="fileNamePattern" value=".*Tests\.java$" />
+    <property name="fileExtensions" value="java, properties, xml"/>
+    <!-- Excludes all 'module-info.java' files              -->
+    <!-- See https://checkstyle.org/config_filefilters.html -->
+    <module name="BeforeExecutionExclusionFileFilter">
+        <property name="fileNamePattern" value="module\-info\.java$"/>
     </module>
-
+    <!-- https://checkstyle.org/config_filters.html#SuppressionFilter -->
     <module name="SuppressionFilter">
-        <property name="file" value="${checkstyle.suppressions.file}" default="suppressions.xml" />
+        <property name="file" value="${org.checkstyle.google.suppressionfilter.config}"
+                  default="checkstyle-suppressions.xml" />
+        <property name="optional" value="true"/>
     </module>
-
-    <!-- Allow use of comment to suppress javadocstyle -->
-    <module name="SuppressionCommentFilter">
-        <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
-        <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
-        <property name="checkFormat" value="$1"/>
+    <!-- new add -->
+    <module name="SuppressWarningsFilter" />
+    <!-- Checks for whitespace                               -->
+    <!-- See http://checkstyle.org/config_whitespace.html -->
+    <module name="FileTabCharacter">
+        <property name="eachLine" value="true"/>
+    </module>
+    <module name="LineLength">
+        <property name="fileExtensions" value="java"/>
+        <property name="max" value="120"/>
+        <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
+    </module>
+    <!-- new add -->
+    <module name="FileLength">
+            <property name="max" value="3000"/>
     </module>
-
-    <!-- All Java AST specific tests live under TreeWalker module. -->
     <module name="TreeWalker">
-
-        <!-- Check indentation. More configuration
-             see also https://checkstyle.org/config_misc.html#Indentation
-        -->
-        <module name="Indentation"/>
-
-        <module name="TodoComment">
-            <!-- Checks that disallowed strings are not used in comments.  -->
-            <property name="format" value="(FIXME)|(XXX)|(@author)" />
-        </module>
-
-        <!--
-
-        IMPORT CHECKS
-
-        -->
-
-        <module name="RedundantImport">
-            <!-- Checks for redundant import statements. -->
-            <property name="severity" value="error"/>
-            <message key="import.redundancy"
-                     value="Redundant import {0}."/>
-        </module>
-
-        <module name="ImportOrder">
-            <property name="severity" value="error"/>
-            <!-- This ensures that static imports go first. -->
-            <property name="option" value="top"/>
-            <property name="sortStaticImportsAlphabetically" value="true"/>
-            <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
-            <message key="import.ordering"
-                     value="Import {0} appears after other imports that it should precede"/>
+        <!-- new add -->
+        <module name="SuppressWarningsHolder" />
+        <!-- new add -->
+        <module name="SuppressionCommentFilter"/>
+
+        <module name="OuterTypeFilename"/>
+        <module name="IllegalTokenText">
+            <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
+            <property name="format"
+             value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
+            <property name="message"
+             value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
+        </module>
+        <module name="AvoidEscapedUnicodeCharacters">
+            <property name="allowEscapesForControlCharacters" value="true"/>
+            <property name="allowByTailComment" value="true"/>
+            <property name="allowNonPrintableEscapes" value="true"/>
+        </module>
+        <module name="AvoidStarImport"/>
+        <module name="OneTopLevelClass"/>
+        <module name="NoLineWrap">
+            <property name="tokens" value="PACKAGE_DEF, IMPORT, STATIC_IMPORT"/>
+        </module>
+        <module name="EmptyBlock">
+            <property name="option" value="TEXT"/>
+            <property name="tokens"
+             value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
         </module>
-
-        <module name="AvoidStarImport">
-            <property name="severity" value="error"/>
+        <module name="NeedBraces">
+            <property name="tokens"
+             value="LITERAL_DO, LITERAL_ELSE, LITERAL_FOR, LITERAL_IF, LITERAL_WHILE"/>
         </module>
-
-        <module name="IllegalImport">
-            <property name="illegalPkgs" value="autovalue.shaded, avro.shaded, bk-shade, com.google.api.client.repackaged, com.google.appengine.repackaged, io.netty.util.internal"/>
+        <module name="LeftCurly">
+            <property name="tokens"
+             value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, ENUM_CONSTANT_DEF, ENUM_DEF,
+                    INTERFACE_DEF, LAMBDA, LITERAL_CASE, LITERAL_CATCH, LITERAL_DEFAULT,
+                    LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF,
+                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF,
+                    OBJBLOCK, STATIC_INIT"/>
         </module>
-
-        <module name="RedundantModifier">
-            <!-- Checks for redundant modifiers on various symbol definitions.
-              See: http://checkstyle.sourceforge.net/config_modifier.html#RedundantModifier
-            -->
-            <property name="tokens" value="VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CLASS_DEF, ENUM_DEF"/>
+        <module name="RightCurly">
+            <property name="id" value="RightCurlySame"/>
+            <property name="tokens"
+             value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE,
+                    LITERAL_DO"/>
         </module>
-
-        <!--
-             Require static importing from Preconditions.
-        -->
-        <module name="RegexpSinglelineJava">
-            <property name="format" value="^import com.google.common.base.Preconditions;$"/>
-            <property name="message" value="Static import functions from Guava Preconditions"/>
+        <module name="RightCurly">
+            <property name="id" value="RightCurlyAlone"/>
+            <property name="option" value="alone"/>
+            <property name="tokens"
+             value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
+                    INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF"/>
         </module>
-
-        <module name="UnusedImports">
-            <property name="severity" value="error"/>
-            <property name="processJavadoc" value="true"/>
-            <message key="import.unused"
-                     value="Unused import: {0}."/>
+        <module name="WhitespaceAround">
+            <property name="allowEmptyConstructors" value="true"/>
+            <property name="allowEmptyLambdas" value="true"/>
+            <property name="allowEmptyMethods" value="true"/>
+            <property name="allowEmptyTypes" value="true"/>
+            <property name="allowEmptyLoops" value="true"/>
+            <property name="tokens"
+             value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
+                    BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND,
+                    LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY,
+                    LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED,
+                     LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
+                     NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
+                     SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND"/>
+            <message key="ws.notFollowed"
+             value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
+            <message key="ws.notPreceded"
+             value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
+        </module>
+        <module name="OneStatementPerLine"/>
+        <module name="MultipleVariableDeclarations"/>
+        <module name="ArrayTypeStyle"/>
+<!--        <module name="MissingSwitchDefault"/>-->
+        <module name="FallThrough"/>
+        <module name="UpperEll"/>
+        <module name="ModifierOrder"/>
+        <module name="EmptyLineSeparator">
+            <property name="tokens"
+             value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
+                    STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
+            <property name="allowNoEmptyLineBetweenFields" value="true"/>
+        </module>
+        <module name="SeparatorWrap">
+            <property name="id" value="SeparatorWrapDot"/>
+            <property name="tokens" value="DOT"/>
+            <property name="option" value="nl"/>
+        </module>
+        <module name="SeparatorWrap">
+            <property name="id" value="SeparatorWrapComma"/>
+            <property name="tokens" value="COMMA"/>
+            <property name="option" value="EOL"/>
+        </module>
+        <module name="SeparatorWrap">
+            <!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/258 -->
+            <property name="id" value="SeparatorWrapEllipsis"/>
+            <property name="tokens" value="ELLIPSIS"/>
+            <property name="option" value="EOL"/>
+        </module>
+        <module name="SeparatorWrap">
+            <!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/259 -->
+            <property name="id" value="SeparatorWrapArrayDeclarator"/>
+            <property name="tokens" value="ARRAY_DECLARATOR"/>
+            <property name="option" value="EOL"/>
+        </module>
+        <module name="SeparatorWrap">
+            <property name="id" value="SeparatorWrapMethodRef"/>
+            <property name="tokens" value="METHOD_REF"/>
+            <property name="option" value="nl"/>
         </module>
-
-<!--        TODO We ignore JAVADOC related checker _for now_ and -->
-<!--        it is hopefully we enable this section -->
-<!--        once our documentation is formally completed. -->
-
-<!--        &lt;!&ndash;-->
-
-<!--        JAVADOC CHECKS-->
-
-<!--        &ndash;&gt;-->
-
-<!--        &lt;!&ndash; Checks for Javadoc comments.                     &ndash;&gt;-->
-<!--        &lt;!&ndash; See http://checkstyle.sf.net/config_javadoc.html &ndash;&gt;-->
-<!--        <module name="JavadocMethod">-->
-<!--            <property name="scope" value="protected"/>-->
-<!--            <property name="severity" value="error"/>-->
-<!--            <property name="allowMissingJavadoc" value="true"/>-->
-<!--            <property name="allowMissingParamTags" value="true"/>-->
-<!--            <property name="allowMissingReturnTag" value="true"/>-->
-<!--            <property name="allowMissingThrowsTags" value="true"/>-->
-<!--            <property name="allowThrowsTagsForSubclasses" value="true"/>-->
-<!--            <property name="allowUndeclaredRTE" value="true"/>-->
-<!--        </module>-->
-
-<!--        &lt;!&ndash; Check that paragraph tags are used correctly in Javadoc. &ndash;&gt;-->
-<!--        <module name="JavadocParagraph"/>-->
-
-<!--        <module name="JavadocType">-->
-<!--            <property name="scope" value="protected"/>-->
-<!--            <property name="severity" value="error"/>-->
-<!--            <property name="allowMissingParamTags" value="true"/>-->
-<!--        </module>-->
-
-<!--        <module name="JavadocStyle">-->
-<!--            <property name="severity" value="error"/>-->
-<!--            <property name="checkHtml" value="true"/>-->
-<!--        </module>-->
-
-        <!--
-
-        NAMING CHECKS
-
-        -->
-
-        <!-- Adhere to generally accepted naming conventions -->
-
         <module name="PackageName">
-            <!-- Validates identifiers for package names against the
-              supplied expression. -->
-            <!-- Here the default checkstyle rule restricts package name parts to
-              seven characters, this is not in line with common practice at Google.
-            -->
-            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
-            <property name="severity" value="error"/>
-        </module>
-
-        <module name="TypeNameCheck">
-            <!-- Validates static, final fields against the
-            expression "^[A-Z][a-zA-Z0-9]*$". -->
-            <metadata name="altname" value="TypeName"/>
-            <property name="severity" value="error"/>
-        </module>
-
-        <module name="ConstantNameCheck">
-            <!-- Validates non-private, static, final fields against the supplied
-            public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". -->
-            <metadata name="altname" value="ConstantName"/>
-            <property name="applyToPublic" value="true"/>
-            <property name="applyToProtected" value="true"/>
-            <property name="applyToPackage" value="true"/>
-            <property name="applyToPrivate" value="false"/>
-            <property name="format" value="^([A-Z][A-Za-z0-9_]*|FLAG_.*)$"/>
+            <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
             <message key="name.invalidPattern"
-                     value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/>
-            <property name="severity" value="error"/>
+             value="Package name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
-        <module name="StaticVariableNameCheck">
-            <!-- Validates static, non-final fields against the supplied
-            expression "^[a-z][a-zA-Z0-9]*_?$". -->
-            <metadata name="altname" value="StaticVariableName"/>
-            <property name="applyToPublic" value="true"/>
-            <property name="applyToProtected" value="true"/>
-            <property name="applyToPackage" value="true"/>
-            <property name="applyToPrivate" value="true"/>
-            <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
-            <property name="severity" value="error"/>
+        <module name="TypeName">
+            <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF"/>
+            <message key="name.invalidPattern"
+             value="Type name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
-        <module name="MemberNameCheck">
-            <!-- Validates non-static members against the supplied expression. -->
-            <metadata name="altname" value="MemberName"/>
-            <property name="applyToPublic" value="true"/>
-            <property name="applyToProtected" value="true"/>
-            <property name="applyToPackage" value="true"/>
-            <property name="applyToPrivate" value="true"/>
+        <module name="MemberName">
+            <!--
+            <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
+            -->
             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
-            <property name="severity" value="error"/>
+            <message key="name.invalidPattern"
+             value="Member name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
-        <module name="MethodNameCheck">
-            <!-- Validates identifiers for method names. -->
-            <metadata name="altname" value="MethodName"/>
+        <module name="ParameterName">
+            <!--
+            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
+            -->
             <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
-            <property name="severity" value="error"/>
+            <message key="name.invalidPattern"
+             value="Parameter name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
-        <module name="ParameterName">
-            <!-- Validates identifiers for method parameters against the
-              expression "^[a-z][a-zA-Z0-9]*$". -->
-            <property name="severity" value="error"/>
+        <module name="LambdaParameterName">
+            <!--
+            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
+            -->
+            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
+            <message key="name.invalidPattern"
+                     value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
-        <module name="LocalFinalVariableName">
-            <!-- Validates identifiers for local final variables against the
-              expression "^[a-z][a-zA-Z0-9]*$". -->
-            <property name="severity" value="error"/>
+        <module name="CatchParameterName">
+            <!--
+            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
+            -->
+            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
+            <message key="name.invalidPattern"
+             value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
         <module name="LocalVariableName">
-            <!-- Validates identifiers for local variables against the
-              expression "^[a-z][a-zA-Z0-9]*$". -->
-            <property name="severity" value="error"/>
+            <!--
+            <property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
+            -->
+            <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
+            <message key="name.invalidPattern"
+             value="Local variable name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
         <module name="ClassTypeParameterName">
-            <property name="format" value="^(([A-Z][0-9]*)|([A-Z][a-z][a-zA-Z]*))$"/>
-            <property name="severity" value="error"/>
+            <!-- new add -->
+            <!--
+            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
+            -->
+            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
+            <message key="name.invalidPattern"
+             value="Class type name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
         <module name="MethodTypeParameterName">
-            <property name="format" value="^(([A-Z][0-9]*)|([A-Z][a-z][a-zA-Z]*T))$"/>
-            <property name="severity" value="error"/>
+            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
+            <message key="name.invalidPattern"
+             value="Method type name ''{0}'' must match pattern ''{1}''."/>
         </module>
-
         <module name="InterfaceTypeParameterName">
-            <property name="format" value="^(([A-Z][0-9]*)|([A-Z][a-z][a-zA-Z]*T))$"/>
-            <property name="severity" value="error"/>
-        </module>
-
-        <!--
-
-        LENGTH and CODING CHECKS
-
-        -->
-
-        <module name="LineLength">
-            <!-- Checks if a line is too long. -->
-            <property name="max" value="120"/>
-            <property name="severity" value="error"/>
-
+            <!-- new add -->
             <!--
-              The default ignore pattern exempts the following elements:
-                - import statements
-                - long URLs inside comments
+            <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
             -->
-
-            <property name="ignorePattern"
-                      value="^(package .*;\s*)|(import .*;\s*)|( *\* .*https?://.*)$"/>
-        </module>
-
-        <module name="LeftCurly">
-            <!-- Checks for placement of the left curly brace ('{'). -->
-            <property name="severity" value="error"/>
-        </module>
-
-        <module name="RightCurly">
-            <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
-            the same line. e.g., the following example is fine:
-            <pre>
-              if {
-                ...
-              } else
-            </pre>
-            -->
-            <!-- This next example is not fine:
-            <pre>
-              if {
-                ...
-              }
-              else
-            </pre>
+            <property name="format" value="^[A-Z][a-zA-Z0-9]*$"/>
+            <message key="name.invalidPattern"
+             value="Interface type name ''{0}'' must match pattern ''{1}''."/>
+        </module>
+        <module name="NoFinalizer"/>
+        <module name="GenericWhitespace">
+            <message key="ws.followed"
+             value="GenericWhitespace ''{0}'' is followed by whitespace."/>
+            <message key="ws.preceded"
+             value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
+            <message key="ws.illegalFollow"
+             value="GenericWhitespace ''{0}'' should followed by whitespace."/>
+            <message key="ws.notPreceded"
+             value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
+        </module>
+        <module name="Indentation">
+            <!--
+            <property name="basicOffset" value="4"/>
+            <property name="braceAdjustment" value="0"/>
+            <property name="caseIndent" value="4"/>
+            <property name="throwsIndent" value="4"/>
+            <property name="lineWrappingIndentation" value="4"/>
+            <property name="arrayInitIndent" value="4"/>
             -->
-            <property name="option" value="same"/>
-            <property name="severity" value="error"/>
-        </module>
-
-        <!-- Checks for braces around if and else blocks -->
-        <module name="NeedBraces">
-            <property name="severity" value="error"/>
-            <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
+            <!-- new add, because checkstyle does not fix some indentation scenes,
+                			choose to block the rules first
+							https://github.com/checkstyle/checkstyle/issues/3342
+             -->
+
+            <property name="severity" value="ignore"/>
+
+            <property name="basicOffset" value="4"/>
+            <property name="braceAdjustment" value="0"/>
+            <property name="caseIndent" value="4"/>
+            <property name="throwsIndent" value="8"/>
+            <property name="lineWrappingIndentation" value="8"/>
+            <property name="arrayInitIndent" value="4"/>
+        </module>
+        <module name="AbbreviationAsWordInName">
+            <!-- new add -->
+            <property name="severity" value="ignore"/>
+            <property name="ignoreFinal" value="false"/>
+            <property name="allowedAbbreviationLength" value="1"/>
+            <property name="tokens"
+             value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF,
+                    PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF"/>
         </module>
-
-        <module name="UpperEll">
-            <!-- Checks that long constants are defined with an upper ell.-->
-            <property name="severity" value="error"/>
+        <!--
+        <module name="DeclarationOrder">
+        -->
+        <module name="OverloadMethodsDeclarationOrder"/>
+        <module name="VariableDeclarationUsageDistance"/>
+        <module name="CustomImportOrder">
+             <!-- new add -->
+            <property name="severity" value="ignore"/>
+            <property name="sortImportsInGroupAlphabetically" value="true"/>
+            <property name="separateLineBetweenGroups" value="true"/>
+            <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
+            <property name="tokens" value="IMPORT, STATIC_IMPORT, PACKAGE_DEF"/>
+        </module>
+        <module name="MethodParamPad">
+            <property name="tokens"
+             value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
+                    SUPER_CTOR_CALL, ENUM_CONSTANT_DEF"/>
         </module>
-
-        <module name="FallThrough">
-            <!-- Warn about falling through to the next case statement.  Similar to
-            javac -Xlint:fallthrough, but the check is suppressed if a single-line comment
-            on the last non-blank line preceding the fallen-into case contains 'fall through' (or
-            some other variants that we don't publicized to promote consistency).
-            -->
-            <property name="reliefPattern"
-                      value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/>
-            <property name="severity" value="error"/>
+        <module name="NoWhitespaceBefore">
+            <property name="tokens"
+             value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
+            <property name="allowLineBreaks" value="true"/>
         </module>
-
-        <!-- Checks for over-complicated boolean expressions. -->
-        <module name="SimplifyBooleanExpression"/>
-
-        <!-- Detects empty statements (standalone ";" semicolon). -->
-        <module name="EmptyStatement"/>
-
-        <!--
-
-        MODIFIERS CHECKS
-
+        <module name="ParenPad">
+            <property name="tokens"
+             value="ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_CALL, CTOR_DEF, DOT, ENUM_CONSTANT_DEF,
+                    EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW,
+                    LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL,
+                    METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA"/>
+        </module>
+        <module name="OperatorWrap">
+            <property name="option" value="NL"/>
+            <property name="tokens"
+             value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
+                    LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
+        </module>
+        <module name="AnnotationLocation">
+            <property name="id" value="AnnotationLocationMostCases"/>
+            <property name="tokens"
+             value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
+        </module>
+        <module name="AnnotationLocation">
+            <property name="id" value="AnnotationLocationVariables"/>
+            <property name="tokens" value="VARIABLE_DEF"/>
+            <property name="allowSamelineMultipleAnnotations" value="true"/>
+        </module>
+        <module name="NonEmptyAtclauseDescription">
+            <!-- new add -->
+            <property name="severity" value="ignore"/>
+        </module>
+        <module name="InvalidJavadocPosition">
+            <property name="severity" value="info"/>
+        </module>
+        <!-- new add
+        <module name="JavadocTagContinuationIndentation"/>
+         -->
+        <module name="SummaryJavadoc">
+            <property name="severity" value="info"/>
+            <property name="forbiddenSummaryFragments"
+             value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
+             <!--
+              <property name="period" value="."/>
+             -->
+             <property name="period" value=""/>
+        </module>
+         <!-- new add
+        <module name="JavadocParagraph" />
         -->
-
-        <module name="ModifierOrder">
-            <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
-                 8.4.3.  The prescribed order is:
-                 public, protected, private, abstract, static, final, transient, volatile,
-                 synchronized, native, strictfp
-              -->
-            <property name="severity" value="error"/>
+        <!-- new add
+        <module name="AtclauseOrder">
+            <property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
+            <property name="target"
+             value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
         </module>
-
-
-        <!--
-
-        WHITESPACE CHECKS
-
         -->
-
-        <module name="WhitespaceAround">
-            <!-- Checks that various tokens are surrounded by whitespace.
-                 This includes most binary operators and keywords followed
-                 by regular or curly braces.
+        <module name="JavadocMethod">
+            <property name="severity" value="info"/>
+            <property name="scope" value="public"/>
+            <property name="allowMissingParamTags" value="true"/>
+            <property name="allowMissingReturnTag" value="true"/>
+            <property name="allowedAnnotations" value="Override, Test"/>
+            <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
+        </module>
+        <module name="MissingJavadocMethod">
+            <property name="severity" value="info"/>
+            <property name="scope" value="public"/>
+            <!--
+            <property name="minLineCount" value="2"/>
             -->
-            <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
-        BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
-        EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
-        LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
-        LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
-        MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
-        SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
-            <property name="severity" value="error"/>
+            <property name="minLineCount" value="15"/>
+            <property name="allowedAnnotations" value="Override, Test"/>
+            <property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF"/>
         </module>
-
-        <module name="WhitespaceAfter">
-            <!-- Checks that commas, semicolons and typecasts are followed by
-                 whitespace.
+        <module name="MethodName">
+            <!--
+            <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
             -->
-            <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
+            <property name="format" value="^[a-z][a-zA-Z0-9_]*$"/>
+            <message key="name.invalidPattern"
+             value="Method name ''{0}'' must match pattern ''{1}''."/>
         </module>
+        <!-- new add -->
+        <module name="ConstantName">
+          <property name="applyToProtected" value="false"/>
+          <property name="applyToPackage" value="false"/>
+            <property name="applyToPrivate" value="false"/>
+         </module>
 
-        <module name="NoWhitespaceAfter">
-            <!-- Checks that there is no whitespace after various unary operators.
-                 Linebreaks are allowed.
-            -->
-            <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
-        UNARY_PLUS"/>
-            <property name="allowLineBreaks" value="true"/>
-            <property name="severity" value="error"/>
+        <module name="SingleLineJavadoc">
+            <property name="severity" value="info"/>
+            <property name="ignoreInlineTags" value="true"/>
         </module>
-
-        <module name="NoWhitespaceBefore">
-            <!-- Checks that there is no whitespace before various unary operators.
-                 Linebreaks are allowed.
-            -->
-            <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
-            <property name="allowLineBreaks" value="true"/>
-            <property name="severity" value="error"/>
+        <module name="EmptyCatchBlock">
+            <property name="exceptionVariableName" value="expected"/>
         </module>
-
-        <module name="ParenPad">
-            <!-- Checks that there is no whitespace before close parens or after
-                 open parens.
+        <module name="CommentsIndentation">
+            <!--
+            <property name="tokens" value="SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN"/>
             -->
-            <property name="severity" value="error"/>
+            <property name="tokens" value="BLOCK_COMMENT_BEGIN"/>
         </module>
 
+
+        <!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
+        <module name="SuppressionXpathFilter">
+            <property name="file" value="${org.checkstyle.google.suppressionxpathfilter.config}"
+                      default="checkstyle-xpath-suppressions.xml" />
+            <property name="optional" value="true"/>
+        </module>
     </module>
 </module>
diff --git a/codestyle/suppressions.xml b/codestyle/suppressions.xml
index c48abb7..c7f7a86 100644
--- a/codestyle/suppressions.xml
+++ b/codestyle/suppressions.xml
@@ -1,20 +1,20 @@
 <?xml version="1.0"?>
 <!--
-// Licensed to the Apache Software Foundation (ASF) under one or more
-// contributor license agreements.  See the NOTICE file distributed with
-// this work for additional information regarding copyright ownership.
-// The ASF licenses this file to You under the Apache License, Version 2.0
-// (the "License"); you may not use this file except in compliance with
-// the License.  You may obtain a copy of the License at
-//
-//    http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
--->
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements. See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License. You may obtain a copy of the License at
+  ~
+  ~ http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
 <!DOCTYPE suppressions PUBLIC
         "-//Puppy Crawl//DTD Suppressions 1.1//EN"
         "http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
diff --git a/inlong-agent/agent-common/pom.xml b/inlong-agent/agent-common/pom.xml
new file mode 100755
index 0000000..863d3d6
--- /dev/null
+++ b/inlong-agent/agent-common/pom.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns="http://maven.apache.org/POM/4.0.0"
+    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <groupId>org.apache.inlong</groupId>
+        <artifactId>inlong-agent</artifactId>
+        <version>0.9.0-incubating-SNAPSHOT</version>
+    </parent>
+    <artifactId>agent-common</artifactId>
+    <modelVersion>4.0.0</modelVersion>
+    <name>Apache InLong - Agent Common</name>
+
+    <dependencies>
+        <dependency>
+            <artifactId>commons-dbutils</artifactId>
+            <groupId>commons-dbutils</groupId>
+        </dependency>
+        <dependency>
+            <artifactId>je</artifactId>
+            <groupId>com.sleepycat</groupId>
+        </dependency>
+        <dependency>
+            <artifactId>commons-lang3</artifactId>
+            <groupId>org.apache.commons</groupId>
+        </dependency>
+        <dependency>
+            <artifactId>gson</artifactId>
+            <groupId>com.google.code.gson</groupId>
+        </dependency>
+        <dependency>
+            <artifactId>slf4j-api</artifactId>
+            <groupId>org.slf4j</groupId>
+        </dependency>
+        <dependency>
+            <groupId>org.rocksdb</groupId>
+            <artifactId>rocksdbjni</artifactId>
+        </dependency>
+        <dependency>
+            <artifactId>slf4j-log4j12</artifactId>
+            <groupId>org.slf4j</groupId>
+        </dependency>
+
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+        </dependency>
+
+        <dependency>
+            <artifactId>commons-cli</artifactId>
+            <groupId>commons-cli</groupId>
+        </dependency>
+
+        <dependency>
+            <artifactId>commons-io</artifactId>
+            <groupId>commons-io</groupId>
+        </dependency>
+
+
+
+        <dependency>
+            <artifactId>junit</artifactId>
+            <groupId>junit</groupId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <version>RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-jar-plugin</artifactId>
+                <version>3.2.0</version>
+                <executions>
+                    <execution>
+                        <phase>compile</phase>
+                        <goals>
+                            <goal>test-jar</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>
\ No newline at end of file
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/cache/LocalFileCache.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/cache/LocalFileCache.java
new file mode 100644
index 0000000..f6ccacc
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/cache/LocalFileCache.java
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.cache;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.apache.commons.io.FileUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * use local file as cache.
+ */
+public class LocalFileCache {
+    private static final Logger LOGGER = LoggerFactory.getLogger(LocalFileCache.class);
+
+    private final File file;
+    private final long cacheTime;
+    private final ReadWriteLock lock = new ReentrantReadWriteLock();
+
+    /**
+     * file with cache time in ms
+     * @param file - file
+     * @param cacheTime - cache time.
+     */
+    public LocalFileCache(File file, long cacheTime) {
+        this.file = file;
+        this.cacheTime = cacheTime;
+    }
+
+    public String getCacheInfo() {
+        // lock before reading cache.
+        lock.readLock().lock();
+        String result = null;
+        try {
+            result = FileUtils.readFileToString(this.file, StandardCharsets.UTF_8);
+        } catch (IOException ex) {
+            LOGGER.error("exception on reading {}", this.file, ex);
+        } finally {
+            lock.readLock().unlock();
+        }
+        return result;
+    }
+
+    /**
+     * write string to cache
+     * @param info
+     */
+    public void writeToCache(String info) {
+        lock.writeLock().lock();
+        try {
+            FileUtils.writeStringToFile(this.file, info, StandardCharsets.UTF_8);
+        } catch (IOException ex) {
+            LOGGER.error("exception on writing {}", this.file, ex);
+        } finally {
+            lock.writeLock().unlock();
+        }
+    }
+
+    /**
+     * check whether cache is expired.
+     * @return true if cache is expired else false.
+     */
+    public boolean cacheIsExpired() {
+        lock.readLock().lock();
+        try {
+            return System.currentTimeMillis() - file.lastModified() > cacheTime;
+        } finally {
+            lock.readLock().unlock();
+        }
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/checkpoint/Checkpoint.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/checkpoint/Checkpoint.java
new file mode 100644
index 0000000..bbdb3f1
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/checkpoint/Checkpoint.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.checkpoint;
+
+public interface Checkpoint {
+
+    /**
+     * commit checkpoint.
+     */
+    void commit();
+
+    /**
+     * rollback checkpoint.
+     */
+    void rollback();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AbstractDaemon.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AbstractDaemon.java
new file mode 100644
index 0000000..1affb4e
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AbstractDaemon.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.common;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.SynchronousQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Providing work threads management, those threads run
+ * periodically until agent is stopped.
+ */
+public abstract class AbstractDaemon implements Service {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDaemon.class);
+
+    /** worker thread pool, share it **/
+    private static final ExecutorService WORKER_SERVICES =
+        new ThreadPoolExecutor(0, Integer.MAX_VALUE,
+        60L, TimeUnit.SECONDS,
+        new SynchronousQueue<Runnable>(), new AgentThreadFactory("AbstractDaemon"));
+    private final List<CompletableFuture<?>> workerFutures;
+    private boolean runnable = true;
+
+    public AbstractDaemon() {
+        this.workerFutures = new ArrayList<>();
+    }
+
+    /**
+     * Whether threads can in running state with while loop.
+     *
+     * @return - true if threads can run
+     */
+    public boolean isRunnable() {
+        return runnable;
+    }
+
+    /**
+     * Stop running threads.
+     */
+    public void stopRunningThreads() {
+        runnable = false;
+    }
+
+    /**
+     * Submit work thread to thread pool.
+     *
+     * @param worker - work thread
+     */
+    public void submitWorker(Runnable worker) {
+        CompletableFuture<?> future = CompletableFuture.runAsync(worker, WORKER_SERVICES);
+        workerFutures.add(future);
+        LOGGER.info("{} running worker number is {}", this.getClass().getName(),
+                workerFutures.size());
+    }
+
+    /**
+     * Wait for threads finish.
+     */
+    @Override
+    public void join() {
+        for (CompletableFuture<?> future : workerFutures) {
+            future.join();
+        }
+    }
+
+    /**
+     * Stop thread pool and running threads if they're in the running state.
+     */
+    public void waitForTerminate() {
+        // stop running threads.
+        if (isRunnable()) {
+            stopRunningThreads();
+        }
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AgentThreadFactory.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AgentThreadFactory.java
new file mode 100644
index 0000000..dd48468
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/AgentThreadFactory.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.common;
+
+
+import java.util.concurrent.ThreadFactory;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AgentThreadFactory implements ThreadFactory {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AgentThreadFactory.class);
+
+    private final AtomicInteger mThreadNum = new AtomicInteger(1);
+
+    private final String threadType;
+
+    public AgentThreadFactory(String threadType) {
+        this.threadType = threadType;
+    }
+
+    @Override
+    public Thread newThread(Runnable r) {
+        Thread t = new Thread(r, threadType + "-running-thread-" + mThreadNum.getAndIncrement());
+        LOGGER.debug("{} created", t.getName());
+        return t;
+    }
+}
\ No newline at end of file
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/Service.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/Service.java
new file mode 100755
index 0000000..aea5b58
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/common/Service.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.common;
+
+/**
+ * Service lifecycle interface.
+ */
+public interface Service {
+
+    /**
+     * start service
+     * @throws Exception
+     */
+    void start() throws Exception;
+
+    /**
+     * stop service
+     * @throws Exception
+     */
+    void stop() throws Exception;
+
+    /**
+     * join and wait until getting signal
+     * @throws Exception
+     */
+    void join() throws Exception;
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AbstractConfiguration.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AbstractConfiguration.java
new file mode 100644
index 0000000..1a9bb6c
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AbstractConfiguration.java
@@ -0,0 +1,268 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.conf;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.gson.JsonPrimitive;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.inlong.agent.utils.AgentUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractConfiguration.class);
+    private static final JsonParser JSON_PARSER = new JsonParser();
+
+    private final Map<String, JsonPrimitive> configStorage = new HashMap<>();
+
+    /** get config file by class loader **/
+    private ClassLoader classLoader;
+
+    public AbstractConfiguration() {
+        classLoader = Thread.currentThread().getContextClassLoader();
+        if (classLoader == null) {
+            classLoader = AgentConfiguration.class.getClassLoader();
+        }
+    }
+
+    /**
+     * Check whether all required keys exist
+     * @return true if all key exist else false.
+     */
+    public abstract boolean allRequiredKeyExist();
+
+    /**
+     * support load config file from json/properties file.
+     *
+     * @param fileName -  file name
+     * @param isJson - whether is json file
+     */
+    private void loadResource(String fileName, boolean isJson) {
+        Reader reader = null;
+        try {
+            InputStream inputStream = classLoader.getResourceAsStream(fileName);
+            if (inputStream != null) {
+                reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);
+                if (isJson) {
+                    JsonElement tmpElement = JSON_PARSER.parse(reader).getAsJsonObject();
+                    updateConfig(new HashMap<>(10), 0, tmpElement);
+                } else {
+                    Properties properties = new Properties();
+                    properties.load(reader);
+                    properties.forEach((key, value) -> configStorage.put((String) key,
+                        new JsonPrimitive((String) value)));
+                }
+            }
+        } catch (Exception ioe) {
+            LOGGER.error("error init {}", fileName, ioe);
+        } finally {
+            AgentUtils.finallyClose(reader);
+        }
+    }
+
+    /**
+     * load config from json string.
+     *
+     * @param jsonStr - json string
+     */
+    public void loadJsonStrResource(String jsonStr) {
+        JsonElement tmpElement = JSON_PARSER.parse(jsonStr);
+        updateConfig(new HashMap<>(10), 0, tmpElement);
+    }
+
+    /**
+     * load config file from CLASS_PATH. config file is json file.
+     *
+     * @param fileName - file name
+     */
+    void loadJsonResource(String fileName) {
+        loadResource(fileName, true);
+    }
+
+    void loadPropertiesResource(String fileName) {
+        loadResource(fileName, false);
+    }
+
+    /**
+     * Convert json string to map
+     *
+     * @param keyDeptPath - map
+     * @param dept - json dept
+     * @param tmpElement - json element
+     */
+    void updateConfig(HashMap<Integer, String> keyDeptPath, int dept, JsonElement tmpElement) {
+        if (tmpElement instanceof JsonObject) {
+            JsonObject tmpJsonObject = tmpElement.getAsJsonObject();
+            for (String key : tmpJsonObject.keySet()) {
+                keyDeptPath.put(dept, key);
+                updateConfig(keyDeptPath, dept + 1, tmpJsonObject.get(key));
+            }
+        } else if (tmpElement instanceof JsonArray) {
+            JsonArray tmpJsonArray = tmpElement.getAsJsonArray();
+            String lastKey = keyDeptPath.getOrDefault(dept - 1, "");
+            for (int index = 0; index < tmpJsonArray.size(); index++) {
+                keyDeptPath.put(dept - 1, lastKey + "[" + index + "]");
+                updateConfig(keyDeptPath, dept, tmpJsonArray.get(index));
+            }
+        } else if (tmpElement instanceof JsonPrimitive) {
+            List<String> builder = new ArrayList<>();
+            for (int index = 0; index < dept; index++) {
+                builder.add(keyDeptPath.getOrDefault(index, ""));
+            }
+            String keyChain = StringUtils.join(builder, ".");
+            if (!StringUtils.isBlank(keyChain)) {
+                configStorage.put(keyChain, tmpElement.getAsJsonPrimitive());
+            }
+        }
+    }
+
+    /**
+     * get int from config
+     *
+     * @param key - key
+     * @param defaultValue - default value
+     * @return value
+     */
+    public int getInt(String key, int defaultValue) {
+        JsonElement value = configStorage.get(key);
+        return value == null ? defaultValue : value.getAsInt();
+    }
+
+    /**
+     * get int from config
+     *
+     * @param key - key
+     * @return value
+     * @throws NullPointerException npe
+     */
+    public int getInt(String key) {
+        JsonElement value = configStorage.get(key);
+        if (value == null) {
+            throw new NullPointerException("null value for key " + key);
+        }
+        return value.getAsInt();
+    }
+
+    /**
+     * get long
+     *
+     * @param key - key
+     * @param defaultValue - default value
+     * @return long
+     */
+    public long getLong(String key, long defaultValue) {
+        JsonElement value = configStorage.get(key);
+        return value == null ? defaultValue : value.getAsLong();
+    }
+
+    /**
+     * get boolean
+     *
+     * @param key - key
+     * @param defaultValue - default value
+     * @return boolean
+     */
+    public boolean getBoolean(String key, boolean defaultValue) {
+        JsonElement value = configStorage.get(key);
+        return value == null ? defaultValue : value.getAsBoolean();
+    }
+
+    /**
+     * get string
+     *
+     * @param key - key
+     * @param defaultValue - default value
+     * @return string
+     */
+    public String get(String key, String defaultValue) {
+        JsonElement value = configStorage.get(key);
+        return value == null ? defaultValue : value.getAsString();
+    }
+
+    /**
+     * get string or throw npe
+     *
+     * @param key - key
+     * @return string
+     * @throws NullPointerException if value is null, throw npe
+     */
+    public String get(String key) {
+        JsonElement value = configStorage.get(key);
+        if (value == null) {
+            throw new NullPointerException("null value for key " + key);
+        }
+        return value.getAsString();
+    }
+
+    /**
+     * whether key exists
+     *
+     * @param key - key
+     * @return - true if key exists else not
+     */
+    public boolean hasKey(String key) {
+        return configStorage.containsKey(key);
+    }
+
+    /**
+     * set key/value
+     *
+     * @param key - key
+     * @param value - value
+     */
+    public void set(String key, String value) {
+        configStorage.put(key, new JsonPrimitive(value));
+    }
+
+    public void setInt(String key, int value) {
+        configStorage.put(key, new JsonPrimitive(value));
+    }
+
+    public void setLong(String key, long value) {
+        configStorage.put(key, new JsonPrimitive(value));
+    }
+
+    public void setBoolean(String key, boolean value) {
+        configStorage.put(key, new JsonPrimitive(value));
+    }
+
+    Map<String, JsonPrimitive> getConfigStorage() {
+        return configStorage;
+    }
+
+    List<String> getStorageList() {
+        List<String> result = new ArrayList<>();
+        for (Map.Entry<String, JsonPrimitive> entry : configStorage.entrySet()) {
+            result.add(entry.getKey() + "=" + entry.getValue().getAsString());
+        }
+        return result;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AgentConfiguration.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AgentConfiguration.java
new file mode 100644
index 0000000..71a566a
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/AgentConfiguration.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.conf;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.apache.commons.io.FileUtils;
+import org.apache.inlong.agent.constants.AgentConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * agent configuration. Only one instance in the process.
+ * Basically it use properties file to store configurations.
+ */
+public class AgentConfiguration extends AbstractConfiguration {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AgentConfiguration.class);
+
+    private static final String DEFAULT_CONFIG_FILE = "agent.properties";
+    private static final String TMP_CONFIG_FILE = ".tmp.agent.properties";
+
+    private static final ArrayList<String> LOCAL_RESOURCES = new ArrayList<>();
+
+    private static final ReadWriteLock LOCK = new ReentrantReadWriteLock();
+
+    static {
+        LOCAL_RESOURCES.add(DEFAULT_CONFIG_FILE);
+    }
+
+    private static volatile AgentConfiguration agentConf = null;
+
+    /**
+     * load config from agent file.
+     */
+    private AgentConfiguration() {
+        for (String fileName : LOCAL_RESOURCES) {
+            super.loadPropertiesResource(fileName);
+        }
+    }
+
+    /**
+     * singleton for agent configuration.
+     * @return - static instance of AgentConfiguration
+     */
+    public static AgentConfiguration getAgentConf() {
+        if (agentConf == null) {
+            synchronized (AgentConfiguration.class) {
+                if (agentConf == null) {
+                    agentConf = new AgentConfiguration();
+                }
+            }
+        }
+        return agentConf;
+    }
+
+    private String getNextBackupFileName() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
+        String dateStr = format.format(new Date(System.currentTimeMillis()));
+        return DEFAULT_CONFIG_FILE + "." + dateStr;
+    }
+
+    /**
+     * flush config to local files.
+     */
+    public void flushToLocalPropertiesFile() {
+        LOCK.writeLock().lock();
+        // TODO: flush to local file as properties file.
+        try {
+            String agentConfParent = get(
+                AgentConstants.AGENT_CONF_PARENT, AgentConstants.DEFAULT_AGENT_CONF_PARENT);
+            File sourceFile = new File(agentConfParent, DEFAULT_CONFIG_FILE);
+            File targetFile = new File(agentConfParent, getNextBackupFileName());
+            File tmpFile = new File(agentConfParent, TMP_CONFIG_FILE);
+            if (sourceFile.exists()) {
+                FileUtils.copyFile(sourceFile, targetFile);
+            }
+            List<String> tmpCache = getStorageList();
+            FileUtils.writeLines(tmpFile, tmpCache);
+
+            FileUtils.copyFile(tmpFile, sourceFile);
+            boolean result = tmpFile.delete();
+            if (!result) {
+                LOGGER.warn("cannot delete file {}", tmpFile);
+            }
+        } catch (Exception ex) {
+            LOGGER.error("error while flush agent conf to local", ex);
+        } finally {
+            LOCK.writeLock().unlock();
+        }
+
+    }
+
+    @Override
+    public boolean allRequiredKeyExist() {
+        return true;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/JobProfile.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/JobProfile.java
new file mode 100644
index 0000000..bf3fbc4
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/JobProfile.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.conf;
+
+import com.google.gson.Gson;
+import org.apache.inlong.agent.constants.JobConstants;
+
+/**
+ * job profile which contains details describing properties of one job.
+ *
+ */
+public class JobProfile extends AbstractConfiguration {
+
+    private final Gson gson = new Gson();
+
+    /**
+     * parse json string to configuration instance。
+     *
+     * @param jsonStr
+     * @return job configuration
+     */
+    public static JobProfile parseJsonStr(String jsonStr) {
+        JobProfile conf = new JobProfile();
+        conf.loadJsonStrResource(jsonStr);
+        return conf;
+    }
+
+    /**
+     * parse properties file
+     *
+     * @param fileName - file name.
+     * @return jobConfiguration.
+     */
+    public static JobProfile parsePropertiesFile(String fileName) {
+        JobProfile conf = new JobProfile();
+        conf.loadPropertiesResource(fileName);
+        return conf;
+    }
+
+    /**
+     * pase json file.
+     * @param fileName - json file name.
+     * @return jobConfiguration.
+     */
+    public static JobProfile parseJsonFile(String fileName) {
+        JobProfile conf = new JobProfile();
+        conf.loadJsonResource(fileName);
+        return conf;
+    }
+
+    /**
+     * check whether required keys exists.
+     *
+     * @return return true if all required keys exists else false.
+     */
+    @Override
+    public boolean allRequiredKeyExist() {
+        return hasKey(JobConstants.JOB_ID) && hasKey(JobConstants.JOB_SOURCE)
+                && hasKey(JobConstants.JOB_SINK) && hasKey(JobConstants.JOB_CHANNEL) && hasKey(
+            JobConstants.JOB_NAME);
+    }
+
+    public String toJsonStr() {
+        return gson.toJson(getConfigStorage());
+    }
+
+    public String getInstanceId() {
+        return get(JobConstants.JOB_INSTANCE_ID);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/ProfileFetcher.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/ProfileFetcher.java
new file mode 100755
index 0000000..59f3111
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/ProfileFetcher.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.conf;
+
+import java.util.List;
+import org.apache.inlong.agent.common.Service;
+
+/**
+ * fetch profile from other system, communicate with json format string
+ */
+public interface ProfileFetcher extends Service {
+
+    /**
+     * get job profiles
+     * @return - job profile list
+     */
+    List<JobProfile> getJobProfiles();
+
+    /**
+     * get trigger profiles
+     * @return - trigger profile lisy
+     */
+    List<TriggerProfile>  getTriggerProfiles();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/TriggerProfile.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/TriggerProfile.java
new file mode 100755
index 0000000..4a0e48a
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/conf/TriggerProfile.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.conf;
+
+import org.apache.inlong.agent.constants.JobConstants;
+
+/**
+ * profile used in trigger. Trigger profile is a special job profile
+ */
+public class TriggerProfile extends JobProfile {
+
+    @Override
+    public boolean allRequiredKeyExist() {
+        return hasKey(JobConstants.JOB_TRIGGER) && super.allRequiredKeyExist();
+    }
+
+    public static TriggerProfile parseJsonStr(String jsonStr) {
+        TriggerProfile conf = new TriggerProfile();
+        conf.loadJsonStrResource(jsonStr);
+        return conf;
+    }
+
+    public String getTriggerId() {
+        return get(JobConstants.JOB_ID);
+    }
+
+    public static TriggerProfile parseJobProfile(JobProfile jobProfile) {
+        TriggerProfile conf = new TriggerProfile();
+        conf.loadJsonStrResource(jobProfile.toJsonStr());
+        return conf;
+    }
+
+    public Integer getOpType() {
+        return getInt(JobConstants.JOB_OP);
+    }
+
+    public String getDeliveryTime() {
+        return get(JobConstants.JOB_DELIVERY_TIME);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/AgentConstants.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/AgentConstants.java
new file mode 100755
index 0000000..22bfec1
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/AgentConstants.java
@@ -0,0 +1,162 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.constants;
+
+import org.apache.inlong.agent.utils.AgentUtils;
+
+public class AgentConstants {
+
+    public static final String AGENT_HOME = "agent.home";
+    public static final String DEFAULT_AGENT_HOME = System.getProperty("agent.home");
+
+    public static final String AGENT_LOCAL_CACHE = "agent.local.cache";
+    public static final String DEFAULT_AGENT_LOCAL_CACHE = ".local";
+
+    public static final String AGENT_LOCAL_CACHE_TIMEOUT = "agent.local.cache.timeout";
+    /** cache timeout in minutes. **/
+    public static final int DEFAULT_AGENT_LOCAL_CACHE_TIMEOUT = 30;
+
+    public static final String AGENT_LOCAL_STORE_PATH = "agent.localStore.path";
+    public static final String DEFAULT_AGENT_LOCAL_STORE_PATH = ".bdb";
+
+    public static final String AGENT_ROCKS_DB_PATH = "agent.rocks.db.path";
+    public static final String DEFAULT_AGENT_ROCKS_DB_PATH = ".rocksdb";
+
+    public static final String AGENT_UNIQ_ID = "agent.uniq.id";
+    // default use local ip as uniq id for agent.
+    public static final String DEFAULT_AGENT_UNIQ_ID = AgentUtils.getLocalIp();
+
+    public static final String AGENT_DB_INSTANCE_NAME = "agent.db.instance.name";
+    public static final String DEFAULT_AGENT_DB_INSTANCE_NAME = "agent";
+
+    public static final String AGENT_DB_CLASSNAME = "agent.db.classname";
+    public static final String DEFAULT_AGENT_DB_CLASSNAME = "org.apache.inlong.agent.db.BerkeleyDbImp";
+
+    // default is empty.
+    public static final String AGENT_FETCHER_CLASSNAME = "agent.fetcher.classname";
+
+    public static final String AGENT_CONF_PARENT = "agent.conf.parent";
+    public static final String DEFAULT_AGENT_CONF_PARENT = "conf";
+
+    public static final String AGENT_LOCAL_STORE_READONLY = "agent.localStore.readonly";
+    public static final boolean DEFAULT_AGENT_LOCAL_STORE_READONLY = false;
+
+    public static final String AGENT_HTTP_PORT = "agent.http.port";
+    public static final int DEFAULT_AGENT_HTTP_PORT = 8008;
+
+    public static final String AGENT_ENABLE_HTTP = "agent.http.enable";
+    public static final boolean DEFAULT_AGENT_ENABLE_HTTP = false;
+
+    public static final String TRIGGER_FETCH_INTERVAL = "trigger.fetch.interval";
+    public static final int DEFAULT_TRIGGER_FETCH_INTERVAL = 1;
+
+    public static final String TRIGGER_MAX_RUNNING_NUM = "trigger.max.running.num";
+    public static final int DEFAULT_TRIGGER_MAX_RUNNING_NUM = 4096;
+
+    public static final String AGENT_LOCAL_STORE_TRANSACTIONAL = "agent.localStore.transactional";
+    public static final boolean DEFAULT_AGENT_LOCAL_STORE_TRANSACTIONAL = true;
+
+    public static final String AGENT_LOCAL_STORE_LOCK_TIMEOUT = "agent.localStore.lockTimeout";
+    public static final int DEFAULT_AGENT_LOCAL_STORE_LOCK_TIMEOUT = 10000;
+
+    public static final String AGENT_LOCAL_STORE_NO_SYNC_VOID = "agent.localStore.noSyncVoid";
+    public static final boolean DEFAULT_AGENT_LOCAL_STORE_NO_SYNC_VOID = false;
+
+    public static final String AGENT_LOCAL_STORE_WRITE_NO_SYNC_VOID =
+            "agent.localStore.WriteNoSyncVoid";
+    public static final boolean DEFAULT_AGENT_LOCAL_STORE_WRITE_NO_SYNC_VOID = false;
+
+    public static final String AGENT_FETCH_CENTER_INTERVAL_SECONDS = "agent.fetchCenter.interval";
+    public static final int DEFAULT_AGENT_FETCH_CENTER_INTERVAL_SECONDS = 5;
+
+    public static final String AGENT_TRIGGER_CHECK_INTERVAL_SECONDS = "agent.trigger.check.interval";
+    public static final int DEFAULT_AGENT_TRIGGER_CHECK_INTERVAL_SECONDS = 1;
+
+    public static final String THREAD_POOL_AWAIT_TIME = "thread.pool.await.time";
+    // time in ms
+    public static final long DEFAULT_THREAD_POOL_AWAIT_TIME = 300;
+
+    public static final String JOB_THREAD_PENDING_MAX = "job.thread.pending.max";
+    public static final int DEFAULT_JOB_THREAD_PENDING_MAX = 40;
+
+    public static final String JOB_THREAD_RUNNING_CORE = "job.thread.running.core";
+    public static final int DEFAULT_JOB_THREAD_RUNNING_CORE = 4;
+
+
+    public static final String JOB_MONITOR_INTERVAL = "job.monitor.interval";
+    public static final int DEFAULT_JOB_MONITOR_INTERVAL = 5;
+
+    public static final String JOB_THREAD_RUNNING_MAX = "job.thread.running.max";
+    public static final int DEFAULT_JOB_THREAD_RUNNING_MAX = 20;
+
+    public static final String JOB_RUNNING_THREAD_KEEP_ALIVE = "job.running.thread.keepAlive";
+    public static final long DEFAULT_JOB_RUNNING_THREAD_KEEP_ALIVE = 60L;
+
+    public static final String JOB_FINISH_CHECK_INTERVAL = "job.finish.checkInterval";
+    public static final long DEFAULT_JOB_FINISH_CHECK_INTERVAL = 6L;
+
+    public static final String TASK_PENDING_MAX = "task.pending.max";
+    public static final int DEFAULT_TASK_PENDING_MAX = 100;
+
+    public static final String TASK_RUNNING_THREAD_CORE_SIZE = "task.running.thread.coreSize";
+    public static final int DEFAULT_TASK_RUNNING_THREAD_CORE_SIZE = 4;
+
+    public static final String TASK_RUNNING_THREAD_MAX_SIZE = "task.running.thread.maxSize";
+    public static final int DEFAULT_TASK_RUNNING_THREAD_MAX_SIZE =
+            Runtime.getRuntime().availableProcessors() * 2;
+
+    public static final String TASK_RUNNING_THREAD_KEEP_ALIVE = "task.running.thread.keepAlive";
+    public static final long DEFAULT_TASK_RUNNING_THREAD_KEEP_ALIVE = 60L;
+
+    public static final String TASK_RETRY_MAX_CAPACITY = "task.retry.maxCapacity";
+    public static final int DEFAULT_TASK_RETRY_MAX_CAPACITY = 10000;
+
+    public static final String TASK_MONITOR_INTERVAL = "task.monitor.interval";
+    public static final int DEFAULT_TASK_MONITOR_INTERVAL = 6;
+
+    public static final String TASK_RETRY_SUBMIT_WAIT_SECONDS = "task.retry.submit.waitSeconds";
+    public static final int DEFAULT_TASK_RETRY_SUBMIT_WAIT_SECONDS = 5;
+
+    public static final String TASK_MAX_RETRY_TIME = "task.maxRetry.time";
+    public static final int DEFAULT_TASK_MAX_RETRY_TIME = 3;
+
+    public static final String TASK_PUSH_MAX_SECOND = "task.push.maxSecond";
+    public static final int DEFAULT_TASK_PUSH_MAX_SECOND = 2;
+
+    public static final String TASK_PULL_MAX_SECOND = "task.pull.maxSecond";
+    public static final int DEFAULT_TASK_PULL_MAX_SECOND = 2;
+
+    public static final String CHANNEL_MEMORY_CAPACITY = "channel.memory.capacity";
+    public static final int DEFAULT_CHANNEL_MEMORY_CAPACITY = 10000;
+
+    public static final String TRIGGER_CHECK_INTERVAL = "trigger.check.interval";
+    public static final int DEFAULT_TRIGGER_CHECK_INTERVAL = 2;
+
+    public static final String WORKER_POOL_AWAIT_TIME = "worker.pool.await.time";
+    public static final long DEFAULT_WORKER_POOL_AWAIT_TIME = 10;
+
+    public static final String JOB_DB_CACHE_TIME = "job.db.cache.time";
+    // cache for 3 days.
+    public static final long DEFAULT_JOB_DB_CACHE_TIME = 3 * 24 * 60 * 60 * 1000;
+
+    public static final String JOB_DB_CACHE_CHECK_INTERVAL = "job.db.cache.check.interval";
+    public static final int DEFAULT_JOB_DB_CACHE_CHECK_INTERVAL = 60 * 60;
+
+    public static final String AGENT_LOCAL_IP = "agent.local.ip";
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/CommonConstants.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/CommonConstants.java
new file mode 100644
index 0000000..7e3fc6d
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/CommonConstants.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.constants;
+
+import org.apache.inlong.agent.utils.AgentUtils;
+
+public class CommonConstants {
+
+    public static final String PROXY_NET_TAG = "proxy.net.tag";
+    public static final String DEFAULT_PROXY_NET_TAG = "";
+
+    public static final String PROXY_BID = "proxy.bid";
+    public static final String POSITION_SUFFIX = ".position";
+
+    public static final String PROXY_LOCAL_HOST = "proxy.localHost";
+    public static final String DEFAULT_PROXY_LOCALHOST = AgentUtils.getLocalIp();
+
+    public static final String PROXY_IS_LOCAL_VISIT = "proxy.isLocalVisit";
+    public static final boolean DEFAULT_PROXY_IS_LOCAL_VISIT = true;
+
+    public static final String PROXY_TOTAL_ASYNC_PROXY_SIZE = "proxy.total.async.proxy.size";
+    public static final int DEFAULT_PROXY_TOTAL_ASYNC_PROXY_SIZE = 200 * 1024 * 1024;
+
+    public static final String PROXY_ALIVE_CONNECTION_NUM = "proxy.alive.connection.num";
+    public static final int DEFAULT_PROXY_ALIVE_CONNECTION_NUM = 10;
+
+    public static final String PROXY_MSG_TYPE = "proxy.msgType";
+    public static final int DEFAULT_PROXY_MSG_TYPE = 7;
+
+    public static final String PROXY_IS_COMPRESS = "proxy.is.compress";
+    public static final boolean DEFAULT_PROXY_IS_COMPRESS = true;
+
+    public static final String PROXY_MAX_SENDER_PER_BID = "proxy.max.sender.per.pid";
+    public static final int DEFAULT_PROXY_MAX_SENDER_PER_PID = 10;
+
+    // max size of message list
+    public static final String PROXY_PACKAGE_MAX_SIZE = "proxy.package.maxSize";
+    // max size of single batch in bytes, default is 200KB.
+    public static final int DEFAULT_PROXY_PACKAGE_MAX_SIZE = 200000;
+
+    public static final String PROXY_TID_QUEUE_MAX_NUMBER = "proxy.tid.queue.maxNumber";
+    public static final int DEFAULT_PROXY_TID_QUEUE_MAX_NUMBER = 10000;
+
+    public static final String PROXY_PACKAGE_MAX_TIMEOUT_MS = "proxy.package.maxTimeout.ms";
+    public static final int DEFAULT_PROXY_PACKAGE_MAX_TIMEOUT_MS = 4 * 1000;
+
+    public static final String PROXY_BATCH_FLUSH_INTERVAL = "proxy.batch.flush.interval";
+    public static final int DEFAULT_PROXY_BATCH_FLUSH_INTERVAL = 2 * 1000;
+
+    public static final String PROXY_SENDER_MAX_TIMEOUT = "proxy.sender.maxTimeout";
+    // max timeout in seconds.
+    public static final int DEFAULT_PROXY_SENDER_MAX_TIMEOUT = 20;
+
+    public static final String PROXY_SENDER_MAX_RETRY = "proxy.sender.maxRetry";
+    public static final int DEFAULT_PROXY_SENDER_MAX_RETRY = 5;
+
+    public static final String PROXY_IS_FILE = "proxy.isFile";
+    public static final boolean DEFAULT_IS_FILE = false;
+
+    public static final String PROXY_RETRY_SLEEP = "proxy.retry.sleep";
+    public static final long DEFAULT_PROXY_RETRY_SLEEP = 500;
+
+    public static final String PROXY_KEY_BID = "bid";
+    public static final String PROXY_KEY_ID = "id";
+    public static final String PROXY_KEY_AGENT_IP = "agentip";
+    public static final String PROXY_OCEANUS_F = "f";
+    public static final String PROXY_OCEANUS_BL = "bl";
+
+    // config for pulsar
+    // pulsar host port like http://host1:port1
+    public static final String PULSAR_SERVERS = "pulsar.servers";
+    // pulsar topic name
+    public static final String PULSAR_TOPIC = "pulsar.topic";
+    // whether async sending data
+    public static final String PULSAR_PRODUCER_ASYNC = "pulsar.producer.async";
+    public static final boolean DEFAULT_PULSAR_PRODUCER_ASYNC = true;
+
+    public static final String PULSAR_PRODUCER_MAX_PENDING_COUNT = "pulsar.producer.maxPending.count";
+    public static final int DEFAULT_PULSAR_PRODUCER_MAX_PENDING_COUNT = 10000;
+
+    public static final String PULSAR_PRODUCER_THREAD_NUM = "pulsar.producer.thread.num";
+    public static final int DEFAULT_PULSAR_PRODUCER_THREAD_NUM = 1;
+
+    public static final String PULSAR_PRODUCER_ENABLE_BATCH = "pulsar.producer.enable.batch";
+    public static final boolean DEFAULT_PULSAR_PRODUCER_ENABLE_BATCH = true;
+
+    public static final String PULSAR_SINK_POLL_TIMEOUT = "pulsar.sink.poll.timeout";
+    // time in ms
+    public static final long DEFAULT_PULSAR_SINK_POLL_TIMEOUT = 1000;
+
+    public static final String PULSAR_SINK_CACHE_CAPACITY = "pulsar.sink.cache.capacity";
+    public static final int DEFAULT_PULSAR_SINK_CACHE_CAPACITY = 100000;
+
+    public static final String PULSAR_PRODUCER_COMPRESS_TYPE = "pulsar.producer.compress.type";
+    public static final String DEFAULT_PULSAR_PRODUCER_COMPRESS_TYPE = "snappy";
+
+    public static final String PULSAR_PRODUCER_BATCH_MAXSIZE = "pulsar.producer.batch.maxsize";
+    public static final int DEFAULT_PULSAR_PRODUCER_BATCH_MAXSIZE = 1024 * 1024;
+
+    public static final String PULSAR_PRODUCER_BATCH_MAXCOUNT = "pulsar.producer.batch.maxcount";
+    public static final int DEFAULT_PULSAR_PRODUCER_BATCH_MAXCOUNT = 1000;
+
+    public static final String PULSAR_PRODUCER_BLOCK_QUEUE = "pulsar.producer.block.queue";
+    public static final boolean DEFAULT_PULSAR_PRODUCER_BLOCK_QUEUE = true;
+
+
+    public static final String FILE_MAX_NUM = "file.max.num";
+    public static final int DEFAULT_FILE_MAX_NUM = 4096;
+
+    public static final String TRIGGER_ID_PREFIX = "trigger_";
+
+
+    public static final String COMMAND_STORE_INSTANCE_NAME = "commandStore";
+
+
+    public static final String AGENT_OS_NAME = "os.name";
+    public static final String AGENT_NIX_OS = "nix";
+    public static final String AGENT_NUX_OS = "nux";
+    public static final String AGENT_COLON = ":";
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/JobConstants.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/JobConstants.java
new file mode 100755
index 0000000..b131f3a
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/constants/JobConstants.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.constants;
+
+
+/**
+ * Basic config for a single job
+ */
+public class JobConstants extends CommonConstants {
+
+    // job id
+    public static final String JOB_ID = "job.id";
+    public static final String JOB_INSTANCE_ID = "job.instance.id";
+    public static final String JOB_IP = "job.ip";
+    public static final String JOB_RETRY = "job.retry";
+
+
+    public static final String JOB_SOURCE = "job.source";
+    public static final String JOB_SINK = "job.sink";
+    public static final String JOB_CHANNEL = "job.channel";
+    public static final String JOB_TRIGGER = "job.trigger";
+    public static final String JOB_NAME = "job.name";
+    public static final String JOB_LINE_FILTER_PATTERN = "job.pattern";
+    public static final String DEFAULT_JOB_NAME = "default";
+    public static final String JOB_DESCRIPTION = "job.description";
+    public static final String DEFAULT_JOB_DESCRIPTION = "default job description";
+    public static final String DEFAULT_JOB_LINE_FILTER = "";
+
+    // job type, delete/add
+    public static final String JOB_TYPE = "job.type";
+
+    public static final String JOB_CHECKPOINT = "job.checkpoint";
+
+    // offset for time
+    public static final String JOB_FILE_TIME_OFFSET = "job.file.time.offset";
+
+    public static final String DEFAULT_JOB_FILE_TIME_OFFSET = "0d";
+
+    public static final String JOB_FILE_MAX_WAIT = "job.file.max.wait";
+    // time in min
+    public static final int DEFAULT_JOB_FILE_MAX_WAIT = 1;
+
+    public static final String JOB_DIR_FILTER_PATTERN = "job.dir.pattern";
+
+    public static final String JOB_DIR_FILTER_PATH = "job.dir.path";
+
+    public static final String JOB_ID_PREFIX = "job_";
+
+    public static final String JOB_STORE_TIME = "job.store.time";
+
+    public static final String JOB_OP = "job.op";
+
+    public static final String TRIGGER_ONLY_ONE_JOB = "job.standalone";
+
+    // field splitter
+    public static final String JOB_FIELD_SPLITTER = "job.splitter";
+
+    public static final String JOB_ADDITION_STR = "job.additionStr";
+
+    // job delivery time
+    public static final String JOB_DELIVERY_TIME = "job.deliveryTime";
+
+    // job time reading file
+    public static final String JOB_DATA_TIME = "job.dataTime";
+
+    public static final String JOB_CYCLE_UNIT = "job.cycleUnit";
+
+    /**
+     * when job is retried, the retry time should be provided
+     */
+    public static final String JOB_RETRY_TIME = "job.retryTime";
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/BerkeleyDbImp.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/BerkeleyDbImp.java
new file mode 100644
index 0000000..407ac89
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/BerkeleyDbImp.java
@@ -0,0 +1,234 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import static java.util.Objects.requireNonNull;
+
+import com.sleepycat.je.Environment;
+import com.sleepycat.je.EnvironmentConfig;
+import com.sleepycat.persist.EntityCursor;
+import com.sleepycat.persist.EntityStore;
+import com.sleepycat.persist.PrimaryIndex;
+import com.sleepycat.persist.SecondaryIndex;
+import com.sleepycat.persist.StoreConfig;
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+import org.apache.inlong.agent.conf.AgentConfiguration;
+import org.apache.inlong.agent.constants.AgentConstants;
+import org.apache.inlong.agent.constants.CommonConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DB implement based on berkeley db.
+ */
+public class BerkeleyDbImp implements Db {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(BerkeleyDbImp.class);
+
+    private final EntityStore jobStore;
+    private final EntityStore commandStore;
+    private final PrimaryIndex<String, KeyValueEntity> primaryIndex;
+    private final SecondaryIndex<StateSearchKey, String, KeyValueEntity> secondaryIndex;
+    private final PrimaryIndex<String, CommandEntity> commandPrimaryIndex;
+    private final SecondaryIndex<String, String, KeyValueEntity> fileNameSecondaryIndex;
+    private final SecondaryIndex<Boolean, String, CommandEntity> commandSecondaryIndex;
+
+    private final AgentConfiguration agentConf;
+
+    public BerkeleyDbImp() {
+        this.agentConf = AgentConfiguration.getAgentConf();
+        StoreConfig storeConfig = initStoreConfig();
+        Environment environment = initEnv();
+        String instanceName = agentConf.get(
+            AgentConstants.AGENT_DB_INSTANCE_NAME, AgentConstants.DEFAULT_AGENT_DB_INSTANCE_NAME);
+        this.jobStore = new EntityStore(environment, instanceName, storeConfig);
+        this.commandStore = new EntityStore(environment, CommonConstants.COMMAND_STORE_INSTANCE_NAME, storeConfig);
+        commandPrimaryIndex = this.commandStore.getPrimaryIndex(String.class, CommandEntity.class);
+        commandSecondaryIndex = commandStore.getSecondaryIndex(
+            commandPrimaryIndex, Boolean.class, "isAcked");
+        primaryIndex = this.jobStore.getPrimaryIndex(String.class, KeyValueEntity.class);
+        secondaryIndex = this.jobStore.getSecondaryIndex(primaryIndex, StateSearchKey.class,
+                "stateSearchKey");
+        fileNameSecondaryIndex = this.jobStore.getSecondaryIndex(primaryIndex,
+            String.class, "fileName");
+    }
+
+    /**
+     * init store by config
+     *
+     * @return store config
+     */
+    private StoreConfig initStoreConfig() {
+        return new StoreConfig()
+                .setReadOnly(agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_READONLY,
+                    AgentConstants.DEFAULT_AGENT_LOCAL_STORE_READONLY))
+                .setAllowCreate(!agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_READONLY,
+                    AgentConstants.DEFAULT_AGENT_LOCAL_STORE_READONLY))
+                .setTransactional(agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_TRANSACTIONAL,
+                    AgentConstants.DEFAULT_AGENT_LOCAL_STORE_TRANSACTIONAL));
+    }
+
+    /**
+     * init local bdb path and get it.
+     * @return local path.
+     */
+    private File tryToInitAndGetPath() {
+        String storePath = agentConf.get(
+            AgentConstants.AGENT_LOCAL_STORE_PATH, AgentConstants.DEFAULT_AGENT_LOCAL_STORE_PATH);
+        String parentPath = agentConf.get(
+            AgentConstants.AGENT_HOME, AgentConstants.DEFAULT_AGENT_HOME);
+        File finalPath = new File(parentPath, storePath);
+        try {
+            boolean result = finalPath.mkdirs();
+            LOGGER.info("try to create local path {}, result is {}", finalPath, result);
+        } catch (Exception ex) {
+            throw new RuntimeException(ex);
+        }
+        return finalPath;
+    }
+
+    /**
+     * init env by config
+     *
+     * @return env config
+     */
+    private Environment initEnv() {
+        EnvironmentConfig envConfig = new EnvironmentConfig()
+                .setReadOnly(agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_READONLY, AgentConstants.DEFAULT_AGENT_LOCAL_STORE_READONLY))
+                .setAllowCreate(!agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_READONLY, AgentConstants.DEFAULT_AGENT_LOCAL_STORE_READONLY))
+                .setTransactional(agentConf.getBoolean(
+                        AgentConstants.AGENT_LOCAL_STORE_TRANSACTIONAL,
+                    AgentConstants.DEFAULT_AGENT_LOCAL_STORE_TRANSACTIONAL))
+                .setLockTimeout(
+                        agentConf.getInt(AgentConstants.AGENT_LOCAL_STORE_LOCK_TIMEOUT,
+                                AgentConstants.DEFAULT_AGENT_LOCAL_STORE_LOCK_TIMEOUT),
+                        TimeUnit.MILLISECONDS);
+        envConfig.setTxnNoSyncVoid(agentConf.getBoolean(
+            AgentConstants.AGENT_LOCAL_STORE_NO_SYNC_VOID,
+                AgentConstants.DEFAULT_AGENT_LOCAL_STORE_NO_SYNC_VOID));
+        envConfig.setTxnWriteNoSyncVoid(agentConf.getBoolean(
+            AgentConstants.AGENT_LOCAL_STORE_WRITE_NO_SYNC_VOID,
+                AgentConstants.DEFAULT_AGENT_LOCAL_STORE_WRITE_NO_SYNC_VOID));
+        return new Environment(tryToInitAndGetPath(), envConfig);
+    }
+
+    @Override
+    public KeyValueEntity get(String key) {
+        requireNonNull(key);
+        return primaryIndex.get(key);
+    }
+
+
+    @Override
+    public CommandEntity getCommand(String commandId) {
+        requireNonNull(commandId);
+        return commandPrimaryIndex.get(commandId);
+    }
+
+
+    @Override
+    public CommandEntity putCommand(CommandEntity entity) {
+        requireNonNull(entity);
+        return commandPrimaryIndex.put(entity);
+    }
+
+    @Override
+    public void set(KeyValueEntity entity) {
+        requireNonNull(entity);
+        primaryIndex.put(entity);
+    }
+
+    @Override
+    public KeyValueEntity put(KeyValueEntity entity) {
+        requireNonNull(entity);
+        return primaryIndex.put(entity);
+    }
+
+    @Override
+    public KeyValueEntity remove(String key) {
+        requireNonNull(key);
+        KeyValueEntity entity = primaryIndex.get(key);
+        primaryIndex.delete(key);
+        return entity;
+    }
+
+    @Override
+    public List<KeyValueEntity> search(StateSearchKey searchKey) {
+        requireNonNull(searchKey);
+        List<KeyValueEntity> ret = new ArrayList<>();
+        try (EntityCursor<KeyValueEntity> children = secondaryIndex.subIndex(searchKey)
+                .entities()) {
+            for (KeyValueEntity entity : children) {
+                ret.add(entity);
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public List<CommandEntity> searchCommands(boolean isAcked) {
+        requireNonNull(isAcked);
+        List<CommandEntity> ret = new ArrayList<>();
+        try (EntityCursor<CommandEntity> children = commandSecondaryIndex.subIndex(isAcked)
+            .entities()) {
+            for (CommandEntity entity : children) {
+                ret.add(entity);
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public KeyValueEntity searchOne(StateSearchKey searchKey) {
+        requireNonNull(searchKey);
+        return secondaryIndex.get(searchKey);
+    }
+
+    @Override
+    public KeyValueEntity searchOne(String fileName) {
+        requireNonNull(fileName);
+        return fileNameSecondaryIndex.get(fileName);
+    }
+
+    @Override
+    public List<KeyValueEntity> findAll(String prefix) {
+        requireNonNull(prefix);
+        List<KeyValueEntity> ret = new ArrayList<>();
+        try (EntityCursor<KeyValueEntity> children = primaryIndex.entities()) {
+            for (KeyValueEntity entity : children) {
+                if (entity.getKey().startsWith(prefix)) {
+                    ret.add(entity);
+                }
+            }
+        }
+        return ret;
+    }
+
+    @Override
+    public void close() {
+        jobStore.close();
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandDb.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandDb.java
new file mode 100644
index 0000000..c343e69
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandDb.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import java.util.List;
+import org.apache.inlong.agent.conf.TriggerProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class CommandDb {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(CommandDb.class);
+    public static final int MANAGER_SUCCESS_CODE = 0;
+    public static final int MANAGER_FAIL_CODE = 1;
+    private final Db db;
+
+    public CommandDb(Db db) {
+        this.db = db;
+    }
+
+    /**
+     * store manager command to db
+     * @param commandEntity
+     */
+    public void storeCommand(CommandEntity commandEntity) {
+        db.putCommand(commandEntity);
+    }
+
+    /**
+     * get those commands not ack to manager
+     * @return
+     */
+    public List<CommandEntity> getUnackedCommands() {
+        return db.searchCommands(false);
+    }
+
+
+    /**
+     * save normal command result for trigger
+     * @param profile
+     * @param success
+     */
+    public void saveNormalCmds(TriggerProfile profile, boolean success) {
+        CommandEntity entity = new CommandEntity();
+        entity.setId(CommandEntity.generateCommanid(profile.getTriggerId(), profile.getOpType()));
+        entity.setTaskId(profile.getTriggerId());
+        entity.setDeliveryTime(profile.getDeliveryTime());
+        entity.setCommandResult(success ? MANAGER_SUCCESS_CODE : MANAGER_FAIL_CODE);
+        entity.setAcked(false);
+        storeCommand(entity);
+    }
+
+    /**
+     * save special command result for trigger (retry\makeup\check)
+     * @param id
+     * @param taskId
+     * @param success
+     */
+    public void saveSpecialCmds(Integer id, Integer taskId, boolean success) {
+        CommandEntity entity = new CommandEntity();
+        entity.setId(String.valueOf(id));
+        entity.setTaskId(String.valueOf(taskId));
+        entity.setAcked(false);
+        entity.setCommandResult(success ? MANAGER_SUCCESS_CODE : MANAGER_FAIL_CODE);
+        storeCommand(entity);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandEntity.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandEntity.java
new file mode 100644
index 0000000..68fac8b
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/CommandEntity.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import com.sleepycat.persist.model.Entity;
+import com.sleepycat.persist.model.PrimaryKey;
+import com.sleepycat.persist.model.Relationship;
+import com.sleepycat.persist.model.SecondaryKey;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Entity(version = 1)
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class CommandEntity {
+    @PrimaryKey
+    private String id;
+    private int commandResult;
+    @SecondaryKey(relate = Relationship.MANY_TO_ONE)
+    private boolean isAcked;
+    private String taskId;
+    private String deliveryTime;
+
+
+    public static String generateCommanid(String taskId, int opType) {
+        return taskId + opType;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/Db.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/Db.java
new file mode 100644
index 0000000..81023db
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/Db.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import java.io.Closeable;
+import java.util.List;
+import javax.management.openmbean.KeyAlreadyExistsException;
+
+/**
+ * local storage for key/value.
+ */
+public interface Db extends Closeable {
+
+
+    abstract KeyValueEntity get(String key);
+
+    /**
+     * get command by command id
+     * @param commandId
+     * @return
+     */
+    CommandEntity getCommand(String commandId);
+
+    /**
+     * put command entity in db
+     * @param entity
+     * @return
+     */
+    CommandEntity putCommand(CommandEntity entity);
+
+    /**
+     * store keyValue, if key has exists, throw exception.
+     *
+     * @param entity - key/value
+     * @throws NullPointerException key should not be null
+     * @throws KeyAlreadyExistsException key already exists
+     */
+    void set(KeyValueEntity entity);
+
+    /**
+     * store keyValue, if key has exists, overwrite it.
+     *
+     * @param entity - key/value
+     * @return null or old value which is overwritten.
+     * @throws NullPointerException key should not be null.
+     */
+    KeyValueEntity put(KeyValueEntity entity);
+
+    /**
+     * remove keyValue by key.
+     *
+     * @param key - key
+     * @return key/value
+     * @throws NullPointerException key should not be null.
+     */
+    KeyValueEntity remove(String key);
+
+    /**
+     * search keyValue list by search key.
+     *
+     * @param searchKey - search keys.
+     * @return key/value list
+     * @throws NullPointerException search key should not be null.
+     */
+    List<KeyValueEntity> search(StateSearchKey searchKey);
+
+    /**
+     * search commands using ack status
+     * @param isAcked
+     * @return
+     */
+    List<CommandEntity> searchCommands(boolean isAcked);
+
+    /**
+     * search one keyValue by search key
+     * @param searchKey - search key
+     * @return null or keyValue
+     */
+    KeyValueEntity searchOne(StateSearchKey searchKey);
+
+    /**
+     * search one keyValue by fileName
+     * @param fileName
+     * @return
+     */
+    KeyValueEntity searchOne(String fileName);
+
+    /**
+     * find all by prefix key.
+     * @param prefix - prefix string
+     * @return list of k/v
+     */
+    List<KeyValueEntity> findAll(String prefix);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/JobProfileDb.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/JobProfileDb.java
new file mode 100644
index 0000000..f8bc6ea
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/JobProfileDb.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+
+package org.apache.inlong.agent.db;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.inlong.agent.conf.JobProfile;
+import org.apache.inlong.agent.constants.JobConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Wrapper for job conf persistence.
+ */
+public class JobProfileDb {
+    private static final Logger LOGGER = LoggerFactory.getLogger(JobProfileDb.class);
+    private final Db db;
+
+    public JobProfileDb(Db db) {
+        this.db = db;
+    }
+
+    /**
+     * get job which in accepted state
+     * @return null or job conf
+     */
+    public JobProfile getAcceptedJob() {
+        return getJob(StateSearchKey.ACCEPTED);
+    }
+
+    public List<JobProfile> getAcceptedJobs() {
+        return getJobs(StateSearchKey.ACCEPTED);
+    }
+
+    /**
+     * update job state and search it by key name
+     * @param jobInstanceId - job key name
+     * @param stateSearchKey - job state
+     */
+    public void updateJobState(String jobInstanceId, StateSearchKey stateSearchKey) {
+        KeyValueEntity entity = db.get(jobInstanceId);
+        if (entity != null) {
+            entity.setStateSearchKey(stateSearchKey);
+            db.put(entity);
+        }
+    }
+
+    /**
+     * store job profile
+     * @param jobProfile - job profile
+     */
+    public void storeJobFirstTime(JobProfile jobProfile) {
+        if (jobProfile.allRequiredKeyExist()) {
+            String keyName = jobProfile.get(JobConstants.JOB_INSTANCE_ID);
+            jobProfile.setLong(JobConstants.JOB_STORE_TIME, System.currentTimeMillis());
+            KeyValueEntity entity = new KeyValueEntity(keyName,
+                jobProfile.toJsonStr(), jobProfile.get(JobConstants.JOB_DIR_FILTER_PATTERN));
+            entity.setStateSearchKey(StateSearchKey.ACCEPTED);
+            db.put(entity);
+        }
+    }
+
+    /**
+     * update job profile
+     * @param jobProfile
+     */
+    public void updateJobProfile(JobProfile jobProfile) {
+        String instanceId = jobProfile.getInstanceId();
+        KeyValueEntity entity = db.get(instanceId);
+        if (entity == null) {
+            LOGGER.warn("job profile {} doesn't exist, update job profile fail {}", instanceId, jobProfile.toJsonStr());
+            return;
+        }
+        entity.setJsonValue(jobProfile.toJsonStr());
+        db.put(entity);
+    }
+
+    /**
+     * check whether job is finished, note that non-exist job is regarded as finished.
+     * @param jobProfile
+     * @return
+     */
+    public boolean checkJobfinished(JobProfile jobProfile) {
+        KeyValueEntity entity = db.get(jobProfile.getInstanceId());
+        if (entity == null) {
+            LOGGER.info("job profile {} doesn't exist", jobProfile.getInstanceId());
+            return true;
+        }
+        return entity.checkFinished();
+    }
+
+    public void deleteJob(String keyName) {
+        db.remove(keyName);
+    }
+
+    public JobProfile getJobProfile(String jobId) {
+        KeyValueEntity keyValueEntity = db.get(jobId);
+        if (keyValueEntity != null) {
+            return keyValueEntity.getAsJobProfile();
+        }
+        return null;
+    }
+
+    public void removeExpireJobs(long expireTime) {
+        // remove finished tasks
+        List<KeyValueEntity> successEntityList = db.search(StateSearchKey.SUCCESS);
+        List<KeyValueEntity> failedEntityList = db.search(StateSearchKey.FAILED);
+        List<KeyValueEntity> entityList = new ArrayList<>(successEntityList);
+        entityList.addAll(failedEntityList);
+        for (KeyValueEntity entity : entityList) {
+            if (entity.getKey().startsWith(JobConstants.JOB_ID_PREFIX)) {
+                JobProfile profile = entity.getAsJobProfile();
+                long storeTime = profile.getLong(JobConstants.JOB_STORE_TIME, 0);
+                long currentTime = System.currentTimeMillis();
+                if (storeTime == 0 || currentTime - storeTime > expireTime) {
+                    LOGGER.info("delete job {} because of timeout store time: {}, expire time: {}",
+                        entity.getKey(), storeTime, expireTime);
+                    deleteJob(entity.getKey());
+                }
+            }
+        }
+    }
+
+    /**
+     * get job conf by state
+     * @param stateSearchKey - state index for searching.
+     * @return
+     */
+    public JobProfile getJob(StateSearchKey stateSearchKey) {
+        KeyValueEntity entity = db.searchOne(stateSearchKey);
+        if (entity != null && entity.getKey().startsWith(JobConstants.JOB_ID_PREFIX)) {
+            return entity.getAsJobProfile();
+        }
+        return null;
+    }
+
+
+    /**
+     * get job reading specific file
+     * @param fileName
+     * @return
+     */
+    public JobProfile getJob(String fileName) {
+        KeyValueEntity entity = db.searchOne(fileName);
+        if (entity != null && entity.getKey().startsWith(JobConstants.JOB_ID_PREFIX)) {
+            return entity.getAsJobProfile();
+        }
+        return null;
+    }
+
+    /**
+     * get list of job profiles.
+     * @param stateSearchKey - state search key.
+     * @return - list of job profile.
+     */
+    public List<JobProfile> getJobs(StateSearchKey stateSearchKey) {
+        List<KeyValueEntity> entityList = db.search(stateSearchKey);
+        List<JobProfile> profileList = new ArrayList<>();
+        for (KeyValueEntity entity : entityList) {
+            if (entity.getKey().startsWith(JobConstants.JOB_ID_PREFIX)) {
+                profileList.add(entity.getAsJobProfile());
+            }
+        }
+        return profileList;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/KeyValueEntity.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/KeyValueEntity.java
new file mode 100644
index 0000000..ab0ca19
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/KeyValueEntity.java
@@ -0,0 +1,105 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import com.sleepycat.persist.model.Entity;
+import com.sleepycat.persist.model.PrimaryKey;
+import com.sleepycat.persist.model.Relationship;
+import com.sleepycat.persist.model.SecondaryKey;
+import org.apache.inlong.agent.conf.JobProfile;
+import org.apache.inlong.agent.conf.TriggerProfile;
+
+/**
+ * key value entity. key is string and value is a json
+ */
+@Entity(version = 1)
+public class KeyValueEntity {
+
+    @PrimaryKey
+    private String key;
+
+    @SecondaryKey(relate = Relationship.MANY_TO_ONE)
+    private StateSearchKey stateSearchKey;
+
+    /**
+     * stores the file name that the jsonValue refers
+     */
+    @SecondaryKey(relate = Relationship.MANY_TO_ONE)
+    private String fileName;
+
+    private String jsonValue;
+
+    private KeyValueEntity() {
+
+    }
+
+    public KeyValueEntity(String key, String jsonValue, String fileName) {
+        this.key = key;
+        this.jsonValue = jsonValue;
+        this.stateSearchKey = StateSearchKey.ACCEPTED;
+        this.fileName = fileName;
+    }
+
+    public String getKey() {
+        return key;
+    }
+
+    public StateSearchKey getStateSearchKey() {
+        return stateSearchKey;
+    }
+
+    public KeyValueEntity setStateSearchKey(StateSearchKey stateSearchKey) {
+        this.stateSearchKey = stateSearchKey;
+        return this;
+    }
+
+    public String getJsonValue() {
+        return jsonValue;
+    }
+
+    public KeyValueEntity setJsonValue(String jsonValue) {
+        this.jsonValue = jsonValue;
+        return this;
+    }
+
+    /**
+     * convert keyValue to job profile
+     * @return JobConfiguration
+     */
+    public JobProfile getAsJobProfile() {
+        // convert jsonValue to jobConfiguration
+        return JobProfile.parseJsonStr(getJsonValue());
+    }
+
+    /**
+     * convert keyValue to trigger profile
+     * @return
+     */
+    public TriggerProfile getAsTriggerProfile() {
+        return TriggerProfile.parseJsonStr(getJsonValue());
+    }
+
+    /**
+     * check whether the entity is finished
+     * @return
+     */
+    public boolean checkFinished() {
+        return stateSearchKey.equals(StateSearchKey.SUCCESS)
+                || stateSearchKey.equals(StateSearchKey.FAILED);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/LocalProfile.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/LocalProfile.java
new file mode 100755
index 0000000..9439912
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/LocalProfile.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.inlong.agent.db;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.inlong.agent.conf.JobProfile;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * profile from local file
+ */
+public class LocalProfile {
+    private static final Logger LOGGER = LoggerFactory.getLogger(LocalProfile.class);
+
+    private static final String JSON_SUFFIX = ".json";
+    private static final String PROPERTIES_SUFFIX = ".properties";
+    private static final String PARENT_PATH = "/jobs";
+
+    private final Path filePath;
+
+    public LocalProfile(String parentConfPath) {
+        String fileName = parentConfPath + PARENT_PATH;
+        this.filePath = Paths.get(fileName);
+    }
+
+    public List<JobProfile> readFromLocal() {
+        List<JobProfile> profileList = new ArrayList<>();
+        try {
+            if (Files.isDirectory(this.filePath)) {
+                // list parent path and find files which name is end with .json or .properties
+                for (Iterator<Path> it = Files.list(this.filePath).iterator(); it.hasNext(); ) {
+                    String childPath = it.next().toString();
+                    JobProfile jobProfile = null;
+                    if (childPath.endsWith(JSON_SUFFIX)) {
+                        jobProfile = JobProfile.parseJsonFile(childPath);
+                    } else if (childPath.endsWith(PROPERTIES_SUFFIX)) {
+                        jobProfile = JobProfile.parsePropertiesFile(childPath);
+                    }
+                    if (jobProfile != null && jobProfile.allRequiredKeyExist()) {
+                        profileList.add(jobProfile);
+                    }
+                }
+            }
+        } catch (Exception ex) {
+            LOGGER.error("error in reading files {}", this.filePath);
+        }
+        return profileList;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/RocksDbImp.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/RocksDbImp.java
new file mode 100755
index 0000000..8babb0e
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/RocksDbImp.java
@@ -0,0 +1,123 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import org.apache.inlong.agent.conf.AgentConfiguration;
+import org.apache.inlong.agent.constants.AgentConstants;
+import org.rocksdb.Options;
+import org.rocksdb.RocksDB;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * DB implement based on rocks db.
+ * TODO: this is low priority.
+ */
+public class RocksDbImp implements Db {
+    private static final Logger LOGGER = LoggerFactory.getLogger(RocksDbImp.class);
+
+    private final AgentConfiguration conf;
+    private final RocksDB db;
+
+    public RocksDbImp() {
+        // init rocks db
+        this.conf = AgentConfiguration.getAgentConf();
+        this.db = initEnv();
+    }
+
+    private RocksDB initEnv() {
+        String storePath = conf.get(
+            AgentConstants.AGENT_ROCKS_DB_PATH, AgentConstants.DEFAULT_AGENT_ROCKS_DB_PATH);
+        String parentPath = conf.get(AgentConstants.AGENT_HOME, AgentConstants.DEFAULT_AGENT_HOME);
+        File finalPath = new File(parentPath, storePath);
+        RocksDB.loadLibrary();
+        final Options options = new Options();
+        options.setCreateIfMissing(true);
+        try {
+            boolean result = finalPath.mkdirs();
+            LOGGER.info("create directory {}, result is {}", finalPath, result);
+            return RocksDB.open(options, finalPath.getAbsolutePath());
+        } catch (Exception ex) {
+            // cannot create local path, stop running.
+            throw new RuntimeException(ex);
+        }
+    }
+
+    @Override
+    public KeyValueEntity get(String key) {
+        return null;
+    }
+
+    @Override
+    public CommandEntity getCommand(String commandId) {
+        return null;
+    }
+
+    @Override
+    public CommandEntity putCommand(CommandEntity entity) {
+        return null;
+    }
+
+    @Override
+    public void set(KeyValueEntity entity) {
+
+    }
+
+    @Override
+    public KeyValueEntity put(KeyValueEntity entity) {
+        return null;
+    }
+
+    @Override
+    public KeyValueEntity remove(String key) {
+        return null;
+    }
+
+    @Override
+    public List<KeyValueEntity> search(StateSearchKey searchKey) {
+        return null;
+    }
+
+    @Override
+    public List<CommandEntity> searchCommands(boolean isAcked) {
+        return null;
+    }
+
+    @Override
+    public KeyValueEntity searchOne(StateSearchKey searchKey) {
+        return null;
+    }
+
+    @Override
+    public KeyValueEntity searchOne(String fileName) {
+        return null;
+    }
+
+    @Override
+    public List<KeyValueEntity> findAll(String prefix) {
+        return null;
+    }
+
+    @Override
+    public void close() throws IOException {
+
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/StateSearchKey.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/StateSearchKey.java
new file mode 100755
index 0000000..e747279
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/StateSearchKey.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+/**
+ * search key for state.
+ */
+public enum StateSearchKey {
+    // success state
+    SUCCESS,
+    // fail state
+    FAILED,
+    // accepted state
+    ACCEPTED,
+    // running state
+    RUNNING
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/TriggerProfileDb.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/TriggerProfileDb.java
new file mode 100755
index 0000000..af58613
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/db/TriggerProfileDb.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.db;
+
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.inlong.agent.conf.TriggerProfile;
+import org.apache.inlong.agent.constants.CommonConstants;
+import org.apache.inlong.agent.constants.JobConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * db interface for trigger profile.
+ */
+public class TriggerProfileDb {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(TriggerProfileDb.class);
+
+    private final Db db;
+
+    public TriggerProfileDb(Db db) {
+        this.db = db;
+    }
+
+    /**
+     * get trigger list from db.
+     * @return - list of trigger
+     */
+    public List<TriggerProfile> getTriggers() {
+        // potential performance issue, needs to find out the speed.
+        List<KeyValueEntity> result = this.db.findAll(CommonConstants.TRIGGER_ID_PREFIX);
+        List<TriggerProfile> triggerList = new ArrayList<>();
+        for (KeyValueEntity entity : result) {
+            triggerList.add(entity.getAsTriggerProfile());
+        }
+        return triggerList;
+    }
+
+    /**
+     * store trigger profile.
+     * @param trigger - trigger
+     */
+    public void storeTrigger(TriggerProfile trigger) {
+        if (trigger.allRequiredKeyExist()) {
+            String keyName = CommonConstants.TRIGGER_ID_PREFIX + trigger.get(JobConstants.JOB_ID);
+            KeyValueEntity entity = new KeyValueEntity(keyName,
+                trigger.toJsonStr(), trigger.get(JobConstants.JOB_DIR_FILTER_PATTERN));
+            KeyValueEntity oldEntity = db.put(entity);
+            if (oldEntity != null) {
+                LOGGER.warn("trigger profile {} has been replaced", oldEntity.getKey());
+            }
+        }
+    }
+
+    /**
+     * delete trigger by id.
+     * @param id
+     */
+    public void deleteTrigger(String id) {
+        db.remove(CommonConstants.TRIGGER_ID_PREFIX + id);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/DefaultMessage.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/DefaultMessage.java
new file mode 100644
index 0000000..3c735cf
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/DefaultMessage.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.message;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.inlong.agent.plugin.Message;
+
+public class DefaultMessage implements Message {
+
+    private final byte[] body;
+    private final Map<String, String> header;
+
+    public DefaultMessage(byte[] body, Map<String, String> header) {
+        this.body = body;
+        this.header = header;
+    }
+
+    public DefaultMessage(byte[] body) {
+        this(body, new HashMap<>());
+    }
+
+    @Override
+    public byte[] getBody() {
+        return body;
+    }
+
+    @Override
+    public Map<String, String> getHeader() {
+        return header;
+    }
+
+    @Override
+    public String toString() {
+        return new String(body, StandardCharsets.UTF_8);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/EndMessage.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/EndMessage.java
new file mode 100644
index 0000000..53876e4
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/EndMessage.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.message;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.inlong.agent.plugin.Message;
+
+/**
+ * End message, this is an empty message only indicate
+ * that source data have been completely consumed.
+ */
+public class EndMessage implements Message {
+
+    @Override
+    public byte[] getBody() {
+        return null;
+    }
+
+    @Override
+    public Map<String, String> getHeader() {
+        return new HashMap<>(10);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/ProxyMessage.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/ProxyMessage.java
new file mode 100644
index 0000000..7afd369
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/message/ProxyMessage.java
@@ -0,0 +1,74 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.message;
+
+import java.util.Map;
+import org.apache.inlong.agent.plugin.Message;
+
+/**
+ * Bus message with body, header, bid and tid.
+ */
+public class ProxyMessage implements Message {
+
+    private static final String DEFAULT_TID = "__";
+
+    private final byte[] body;
+    private final Map<String, String> header;
+    private final String bid;
+    private final String tid;
+
+
+    public ProxyMessage(byte[] body, Map<String, String> header) {
+        this.body = body;
+        this.header = header;
+        this.bid = header.get("bid");
+        this.tid = header.getOrDefault("tid", DEFAULT_TID);
+    }
+
+    /**
+     * Get first line of body list
+     *
+     * @return first line of body list
+     */
+    @Override
+    public byte[] getBody() {
+        return body;
+    }
+
+    /**
+     * Get header of message
+     *
+     * @return header
+     */
+    @Override
+    public Map<String, String> getHeader() {
+        return header;
+    }
+
+    public String getBid() {
+        return bid;
+    }
+
+    public String getTid() {
+        return tid;
+    }
+
+    public static ProxyMessage parse(Message message) {
+        return new ProxyMessage(message.getBody(), message.getHeader());
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/AgentDynamicMBean.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/AgentDynamicMBean.java
new file mode 100644
index 0000000..5331342
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/AgentDynamicMBean.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.DynamicMBean;
+import javax.management.MBeanAttributeInfo;
+import javax.management.MBeanInfo;
+import org.apache.inlong.agent.metrics.meta.MetricMeta;
+import org.apache.inlong.agent.metrics.meta.MetricsMeta;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Dynamic MBean for agent
+ */
+public class AgentDynamicMBean implements DynamicMBean {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AgentDynamicMBean.class);
+
+    private final ConcurrentHashMap<String, MetricSnapshot<?>> snapshotAttrs = new ConcurrentHashMap<>();
+    private final MBeanInfo mBeanInfo;
+    private final List<MBeanAttributeInfo> attrs;
+    private final MetricsMeta metricsMeta;
+    private final String module;
+    private final String aspect;
+    private final String desc;
+
+    public AgentDynamicMBean(String module, String aspect, String desc,
+        MetricsMeta metricsMeta, Object source) {
+        this.module = module;
+        this.aspect = aspect;
+        this.desc = desc;
+        this.metricsMeta = metricsMeta;
+        this.attrs = new ArrayList<>();
+        this.mBeanInfo = metricsMetaToInfo();
+        formatSnapshotList(source);
+    }
+
+    private void formatSnapshotList(Object source) {
+        for (MetricMeta metricMeta : this.metricsMeta.getMetricMetaList()) {
+            try {
+                snapshotAttrs.put(metricMeta.getName(),
+                    (MetricSnapshot<?>) metricMeta.getField().get(source));
+            } catch (Exception ex) {
+                LOGGER.error("exception while adding snapshot list", ex);
+            }
+        }
+    }
+
+
+    private MBeanInfo metricsMetaToInfo() {
+        // overwrite name, desc from MetricsMeta if not null.
+        String name = this.module == null ? metricsMeta.getName() : this.module;
+        String description = this.desc == null ? metricsMeta.getDesc() : this.desc;
+
+        for (MetricMeta fieldMetricMeta : metricsMeta.getMetricMetaList()) {
+            attrs.add(new MBeanAttributeInfo(fieldMetricMeta.getName(),
+                fieldMetricMeta.getType(), fieldMetricMeta.getDesc(), true, false, false));
+        }
+        return new MBeanInfo(name, description, attrs.toArray(new MBeanAttributeInfo[0]),
+            null, null, null);
+    }
+
+    @Override
+    public Object getAttribute(String attribute) {
+        MetricSnapshot<?> snapshot = snapshotAttrs.get(attribute);
+        return new Attribute(attribute, snapshot.snapshot());
+    }
+
+    @Override
+    public void setAttribute(Attribute attribute) {
+        throw new UnsupportedOperationException("Metrics are read-only.");
+    }
+
+    @Override
+    public AttributeList getAttributes(String[] attributes) {
+        AttributeList attributeList = new AttributeList();
+        for (String attrKey : attributes) {
+            MetricSnapshot<?> snapshot = snapshotAttrs.get(attrKey);
+            if (snapshot != null) {
+                attributeList.add(new Attribute(attrKey, snapshot.snapshot()));
+            }
+        }
+        return attributeList;
+    }
+
+    @Override
+    public AttributeList setAttributes(AttributeList attributes) {
+        throw new UnsupportedOperationException("Metrics are read-only.");
+    }
+
+    @Override
+    public Object invoke(String actionName, Object[] params, String[] signature) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public MBeanInfo getMBeanInfo() {
+        return mBeanInfo;
+    }
+
+    public String getModule() {
+        return module;
+    }
+
+    public String getAspect() {
+        return aspect;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metric.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metric.java
new file mode 100644
index 0000000..194bc41
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metric.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * metric for field
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ElementType.FIELD, ElementType.METHOD})
+public @interface Metric {
+
+    /**
+     * Type of metric
+     *
+     * @return metric type
+     */
+    Type type() default Type.DEFAULT;
+
+    /**
+     * Doc of metric
+     *
+     * @return metric doc
+     */
+    String desc() default "";
+
+    enum Type {
+        DEFAULT("java.lang.String"),
+        COUNTER_INT("java.lang.Integer"),
+        COUNTER_LONG("java.lang.Long"),
+        GAUGE_INT("java.lang.Integer"),
+        GAUGE_LONG("java.lang.Long"),
+        TAG("java.lang.String");
+        private final String value;
+
+        private Type(String value) {
+            this.value = value;
+        }
+
+        public String getValue() {
+            return value;
+        }
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricException.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricException.java
new file mode 100644
index 0000000..ada7edd
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricException.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+public class MetricException extends RuntimeException {
+
+    public MetricException(String message, Exception ex) {
+        super(message, ex);
+    }
+
+    public MetricException(String message) {
+        super(message);
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricSnapshot.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricSnapshot.java
new file mode 100644
index 0000000..bd729c8
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricSnapshot.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+public interface MetricSnapshot<T> {
+    T snapshot();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metrics.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metrics.java
new file mode 100644
index 0000000..f3ae8e7
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Metrics.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * metric
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+public @interface Metrics {
+
+    /**
+     * Metrics name
+     *
+     * @return
+     */
+    String name() default "";
+
+    /**
+     * Metrics context
+     *
+     * @return
+     */
+    String context() default "";
+
+    /**
+     * Metrics description
+     *
+     * @return
+     */
+    String desc() default "";
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricsRegister.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricsRegister.java
new file mode 100644
index 0000000..88278c9
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MetricsRegister.java
@@ -0,0 +1,146 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+import java.lang.annotation.Annotation;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.ConcurrentHashMap;
+import javax.management.MBeanServer;
+import javax.management.ObjectName;
+import org.apache.inlong.agent.metrics.counter.CounterInt;
+import org.apache.inlong.agent.metrics.counter.CounterLong;
+import org.apache.inlong.agent.metrics.gauge.GaugeInt;
+import org.apache.inlong.agent.metrics.gauge.GaugeLong;
+import org.apache.inlong.agent.metrics.meta.MetricMeta;
+import org.apache.inlong.agent.metrics.meta.MetricsMeta;
+import org.apache.inlong.agent.utils.AgentUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * register for metrics.
+ */
+public class MetricsRegister {
+    private static final Logger LOGGER = LoggerFactory.getLogger(MetricsRegister.class);
+
+    private static final String DOMAIN_PREFIX = "Agent:";
+    private static final String MODULE_PREFIX = "module=";
+    private static final String ASPECT_PREFIX = "aspect=";
+    private static final String COMMA_SPLITTER = ",";
+
+    // object name should be uniq
+    private static final ConcurrentHashMap<String, ObjectName> CACHED_NAME = new ConcurrentHashMap<>();
+
+    private MetricsRegister() {
+    }
+
+    /**
+     * register object name for metric
+     * @param agentDynamicMBean agent mbean
+     */
+    private static void innerRegister(AgentDynamicMBean agentDynamicMBean) {
+        final MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
+        String nameStr = DOMAIN_PREFIX + MODULE_PREFIX + agentDynamicMBean.getModule()
+                + COMMA_SPLITTER + ASPECT_PREFIX + agentDynamicMBean.getAspect();
+        try {
+            ObjectName tmpName = new ObjectName(nameStr);
+            ObjectName objectName = CACHED_NAME.putIfAbsent(nameStr, tmpName);
+            if (objectName == null) {
+                mbs.registerMBean(agentDynamicMBean, tmpName);
+            }
+        } catch (Exception ex) {
+            LOGGER.error("exception while register mbean", ex);
+        }
+    }
+
+    public static void register(String module, String aspect, String desc, Object source) {
+        List<MetricMeta> metricMetaList = handleFieldAnnotation(source);
+        MetricsMeta metricsMeta = handleClassAnnotation(source, metricMetaList);
+        if (metricsMeta != null) {
+            innerRegister(new AgentDynamicMBean(module, aspect, desc, metricsMeta, source));
+        } else {
+            LOGGER.error("Cannot find Metrics annotation in {}, invalid metric", source);
+        }
+    }
+
+
+    /**
+     * handle class level annotation
+     */
+    private static MetricsMeta handleClassAnnotation(Object source,
+            List<MetricMeta> metricMetaList) {
+        for (Annotation annotation : source.getClass().getAnnotations()) {
+            if (annotation instanceof Metrics) {
+                return MetricsMeta.build((Metrics) annotation, metricMetaList);
+            }
+        }
+        return null;
+    }
+
+
+    private static boolean initFieldByType(Object source, Field field) {
+        try {
+            if (field.getType() == CounterInt.class) {
+                field.set(source, new CounterInt());
+                return true;
+            } else if (field.getType() == CounterLong.class) {
+                field.set(source, new CounterLong());
+                return true;
+            } else if (field.getType() == GaugeInt.class) {
+                field.set(source, new GaugeInt());
+                return true;
+            } else if (field.getType() == GaugeLong.class) {
+                field.set(source, new GaugeLong());
+                return true;
+            } else if (field.getType() == Tag.class) {
+                field.set(source, new Tag());
+                return true;
+            } else {
+                throw new MetricException("field type error " + field.getType().toString());
+            }
+        } catch (MetricException ex) {
+            throw ex;
+        } catch (Exception ex) {
+            throw new MetricException("Error setting field " + field
+                    + " annotated with metric", ex);
+        }
+    }
+
+    /**
+     * handle field annotation
+     */
+    private static List<MetricMeta> handleFieldAnnotation(Object source) {
+        List<MetricMeta> result = new ArrayList<>();
+        for (Field field : AgentUtils.getDeclaredFieldsIncludingInherited(source.getClass())) {
+            field.setAccessible(true);
+            for (Annotation fieldAnnotation : field.getAnnotations()) {
+                if (fieldAnnotation instanceof Metric) {
+                    if (initFieldByType(source, field)) {
+                        result.add(MetricMeta.build((Metric) fieldAnnotation, field));
+                    }
+                    break;
+                }
+            }
+        }
+        return result;
+    }
+}
+
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MutableMetric.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MutableMetric.java
new file mode 100644
index 0000000..f3112f6
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/MutableMetric.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+/**
+ * Metric with number
+ */
+public interface MutableMetric extends MetricSnapshot<Number> {
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Tag.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Tag.java
new file mode 100755
index 0000000..1682f33
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/Tag.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics;
+
+public class Tag implements MetricSnapshot<String> {
+
+    private String name;
+
+    /**
+     * set string name for tag.
+     * @param name - tag name
+     */
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    @Override
+    public String snapshot() {
+        return name;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/Counter.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/Counter.java
new file mode 100644
index 0000000..d035a69
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/Counter.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.counter;
+
+import org.apache.inlong.agent.metrics.MutableMetric;
+
+public interface Counter extends MutableMetric {
+
+    /**
+     * +1
+     */
+    void incr();
+
+    /**
+     * +delta
+     *
+     * @param delta > 0
+     */
+    void incr(int delta);
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterInt.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterInt.java
new file mode 100644
index 0000000..ef1215b
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterInt.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.counter;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class CounterInt implements Counter {
+
+    private AtomicInteger value = new AtomicInteger(0);
+
+    @Override
+    public void incr() {
+        value.incrementAndGet();
+    }
+
+    @Override
+    public void incr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(delta);
+    }
+
+    @Override
+    public Integer snapshot() {
+        return value.get();
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterLong.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterLong.java
new file mode 100644
index 0000000..fe9decd
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/counter/CounterLong.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.counter;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+/**
+ * atomic long for counter
+ */
+public class CounterLong implements Counter {
+
+    private final AtomicLong value = new AtomicLong();
+
+    @Override
+    public void incr() {
+        value.incrementAndGet();
+    }
+
+    @Override
+    public void incr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(delta);
+    }
+
+    @Override
+    public Long snapshot() {
+        return value.get();
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/Gauge.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/Gauge.java
new file mode 100644
index 0000000..9427111
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/Gauge.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.gauge;
+
+
+import org.apache.inlong.agent.metrics.MutableMetric;
+
+public interface Gauge<T> extends MutableMetric {
+
+    void set(T num);
+
+    /**
+     * +1
+     */
+    void incr();
+
+    /**
+     * + delt
+     *
+     * @param delta > 0
+     */
+    void incr(int delta);
+
+    /**
+     * -1
+     */
+    void decr();
+
+    /**
+     * -delta
+     *
+     * @param delta > 0
+     */
+    void decr(int delta);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeInt.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeInt.java
new file mode 100644
index 0000000..0246289
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeInt.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.gauge;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class GaugeInt implements Gauge<Integer> {
+
+    private final AtomicInteger value = new AtomicInteger(0);
+
+    @Override
+    public void set(Integer num) {
+        value.set(num);
+    }
+
+    @Override
+    public void incr() {
+        value.incrementAndGet();
+    }
+
+    @Override
+    public void incr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(delta);
+    }
+
+    @Override
+    public void decr() {
+        value.decrementAndGet();
+    }
+
+    @Override
+    public void decr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(-delta);
+    }
+
+    @Override
+    public Integer snapshot() {
+        return value.get();
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeLong.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeLong.java
new file mode 100644
index 0000000..4bf01bf
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/gauge/GaugeLong.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.gauge;
+
+import java.util.concurrent.atomic.AtomicLong;
+
+public class GaugeLong implements Gauge<Long> {
+
+    private final AtomicLong value = new AtomicLong(0);
+
+    @Override
+    public void set(Long num) {
+        value.set(num);
+    }
+
+    @Override
+    public void incr() {
+        value.incrementAndGet();
+    }
+
+    @Override
+    public void incr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(delta);
+    }
+
+    @Override
+    public void decr() {
+        value.decrementAndGet();
+    }
+
+    @Override
+    public void decr(int delta) {
+        assert delta > 0;
+        value.getAndAdd(-delta);
+    }
+
+    @Override
+    public Long snapshot() {
+        return value.get();
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricMeta.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricMeta.java
new file mode 100644
index 0000000..adf8890
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricMeta.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.meta;
+
+import static org.apache.inlong.agent.metrics.Metric.Type.COUNTER_INT;
+import static org.apache.inlong.agent.metrics.Metric.Type.COUNTER_LONG;
+import static org.apache.inlong.agent.metrics.Metric.Type.DEFAULT;
+import static org.apache.inlong.agent.metrics.Metric.Type.GAUGE_INT;
+import static org.apache.inlong.agent.metrics.Metric.Type.GAUGE_LONG;
+
+import java.lang.reflect.Field;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.inlong.agent.metrics.Metric;
+import org.apache.inlong.agent.metrics.counter.CounterInt;
+import org.apache.inlong.agent.metrics.counter.CounterLong;
+import org.apache.inlong.agent.metrics.gauge.GaugeInt;
+import org.apache.inlong.agent.metrics.gauge.GaugeLong;
+
+/**
+ * this class is related to {@link Metric}
+ */
+public class MetricMeta {
+
+    private String name;
+    private String type;
+    private String desc;
+    private Field field;
+
+    public static MetricMeta build(Metric annotation, Field field) {
+        MetricMeta metricMeta = new MetricMeta();
+        metricMeta.name = StringUtils.capitalize(field.getName());
+        metricMeta.desc = annotation.desc();
+        metricMeta.type = DEFAULT.getValue();
+        metricMeta.field = field;
+        Class<?> clz = field.getType();
+        if (clz.isAssignableFrom(CounterLong.class)) {
+            metricMeta.type = COUNTER_LONG.getValue();
+        } else if (clz.isAssignableFrom(CounterInt.class)) {
+            metricMeta.type = COUNTER_INT.getValue();
+        } else if (clz.isAssignableFrom(GaugeInt.class)) {
+            metricMeta.type = GAUGE_INT.getValue();
+        } else if (clz.isAssignableFrom(GaugeLong.class)) {
+            metricMeta.type = GAUGE_LONG.getValue();
+        }
+        return metricMeta;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public Field getField() {
+        return field;
+    }
+}
+
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricsMeta.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricsMeta.java
new file mode 100644
index 0000000..03a697f
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/metrics/meta/MetricsMeta.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.metrics.meta;
+
+import java.util.List;
+import org.apache.inlong.agent.metrics.Metrics;
+
+/**
+ * This class is related to {@link Metrics}
+ */
+public class MetricsMeta {
+
+    private String context;
+    private String desc;
+    private String name;
+    private List<MetricMeta> metricMetaList;
+
+    private MetricsMeta() {
+    }
+
+    public static MetricsMeta build(Metrics metrics,
+            List<MetricMeta> metricMetaList) {
+        MetricsMeta metricsMeta = new MetricsMeta();
+        metricsMeta.context = metrics.context();
+        metricsMeta.desc = metrics.desc();
+        metricsMeta.name = metrics.name();
+        metricsMeta.metricMetaList = metricMetaList;
+        return metricsMeta;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public List<MetricMeta> getMetricMetaList() {
+        return metricMetaList;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Channel.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Channel.java
new file mode 100644
index 0000000..5b192ce
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Channel.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Channel is used as data buffer between source and sink.
+ */
+public interface Channel extends Stage {
+
+
+    /**
+     * write message
+     *
+     * @param message - message
+     */
+    void push(Message message);
+
+    /**
+     * write message with timeout
+     *
+     * @param message
+     * @param timeout
+     * @param unit
+     * @return
+     */
+    boolean push(Message message, long timeout, TimeUnit unit);
+
+    /**
+     * read message with timeout
+     *
+     * @param timeout
+     * @param unit
+     * @return
+     */
+    Message pull(long timeout, TimeUnit unit);
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Filter.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Filter.java
new file mode 100644
index 0000000..43d403c
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Filter.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+/**
+ * filter for source split
+ */
+public interface Filter {
+
+    /**
+     * whether reader is legal.
+     * @return true if reader is legal else false.
+     */
+    boolean match();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Message.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Message.java
new file mode 100644
index 0000000..87c5582
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Message.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+import java.util.Map;
+
+/**
+ * Message used in inner-data transfer, message is divided into
+ * two parts, header and body. header is the attributes of message
+ * and body is the content of message.
+ */
+public interface Message {
+
+    /**
+     * Data content of message.
+     *
+     * @return bytes body
+     */
+    byte[] getBody();
+
+    /**
+     * Data attribute of message
+     *
+     * @return map header
+     */
+    Map<String, String> getHeader();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Reader.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Reader.java
new file mode 100755
index 0000000..ea3dabf
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Reader.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+/**
+ * Reader reads data and provides condition whether the reading action is finished. It's called at
+ * Task level.
+ */
+public interface Reader extends Stage {
+
+    /**
+     * Read message
+     *
+     * @return - message
+     */
+    Message read();
+
+    /**
+     * Whether finish reading
+     * @return
+     */
+    boolean isFinished();
+
+    /**
+     * Return the reader's reading file name
+     * @return
+     */
+    String getReadFile();
+
+    /**
+     * set readTimeout
+     */
+    void setReadTimeout(long mill);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Sink.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Sink.java
new file mode 100755
index 0000000..4c5d42e
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Sink.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+/**
+ * Sink data to remote data center
+ */
+public interface Sink extends Stage {
+
+    /**
+     * Write data into data center
+     *
+     * @param message - message
+     */
+    void write(Message message);
+
+
+    /**
+     * set source file name where the message is generated
+     * @param sourceFileName
+     */
+    void setSourceFile(String sourceFileName);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Source.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Source.java
new file mode 100755
index 0000000..a1da459
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Source.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+import java.util.List;
+import org.apache.inlong.agent.conf.JobProfile;
+
+/**
+ * Source can be split into multiple reader.
+ */
+public interface Source {
+
+    /**
+     * Split source into a list of readers.
+     *
+     * @param conf job conf
+     * @return - list of reader
+     */
+    List<Reader> split(JobProfile conf);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Stage.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Stage.java
new file mode 100755
index 0000000..2a9a96c
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Stage.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+import org.apache.inlong.agent.conf.JobProfile;
+
+/**
+ * Stage definition.
+ */
+public interface Stage {
+
+    /**
+     * Init job.
+     *
+     * @param jobConf - job config
+     */
+    void init(JobProfile jobConf);
+
+    /**
+     * Destroy job.
+     */
+    void destroy();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Trigger.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Trigger.java
new file mode 100755
index 0000000..02160b5
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Trigger.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+import java.io.IOException;
+import org.apache.inlong.agent.conf.JobProfile;
+import org.apache.inlong.agent.conf.TriggerProfile;
+
+/**
+ * Trigger interface, which generates job in condition.
+ */
+public interface Trigger {
+
+    /**
+     * init trigger by trigger profile
+     * @param profile
+     * @throws IOException
+     */
+    void init(TriggerProfile profile) throws IOException;
+
+    /**
+     * run trigger.
+     */
+    void run();
+
+    /**
+     * destroy trigger.
+     */
+    void destroy();
+
+    /**
+     * fetch job profile from trigger
+     * @return - job profile
+     */
+    JobProfile fetchJobProfile();
+
+    /**
+     * get trigger profile
+     * @return
+     */
+    TriggerProfile getTriggerProfile();
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Validator.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Validator.java
new file mode 100644
index 0000000..56c749d
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/plugin/Validator.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.plugin;
+
+/**
+ * For every message, there might be validators to filter required ones
+ */
+public interface Validator {
+
+    /**
+     *
+     * @param messageLine
+     * @return
+     */
+    boolean validate(String messageLine);
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/AbstractStateWrapper.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/AbstractStateWrapper.java
new file mode 100644
index 0000000..edbdc83
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/AbstractStateWrapper.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.state;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public abstract class AbstractStateWrapper implements Runnable {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AbstractStateWrapper.class);
+
+    private final Map<Pair<State, State>, StateCallback> callBacks = new HashMap<>();
+    private volatile State currentState = State.ACCEPTED;
+
+    public AbstractStateWrapper() {
+        addCallbacks();
+    }
+
+    /**
+     * add callback for state change
+     */
+    public abstract void addCallbacks();
+
+
+    public AbstractStateWrapper addCallback(State begin, State end, StateCallback callback) {
+        callBacks.put(new ImmutablePair<>(begin, end), callback);
+        return this;
+    }
+
+    /**
+     * change state and execute callback functions
+     *
+     * @param nextState - next state
+     */
+    public synchronized void doChangeState(State nextState) {
+        LOGGER.debug("state change, current state is {}, next state is {}", currentState, nextState);
+        Pair<State, State> statePair = new ImmutablePair<>(currentState, nextState);
+        StateCallback callback = callBacks.get(statePair);
+        // change state before callback.
+        currentState = nextState;
+        if (callback != null) {
+            callback.call(currentState, nextState);
+        }
+    }
+
+    /**
+     * determine the exception
+     *
+     * @return
+     */
+    public boolean isException() {
+        State tmpState = currentState;
+        return State.KILLED.equals(tmpState) || State.FAILED.equals(tmpState) || State.FATAL.equals(tmpState);
+    }
+
+    public boolean isFinished() {
+        State tmpState = currentState;
+        return State.FATAL.equals(tmpState) || State.SUCCEEDED.equals(tmpState) || State.KILLED.equals(tmpState);
+    }
+
+    public boolean isSuccess() {
+        return State.SUCCEEDED.equals(currentState);
+    }
+
+    public boolean isFailed() {
+        return State.FAILED.equals(currentState);
+    }
+
+    public boolean isFatal() {
+        State tmpState = currentState;
+        return State.FATAL.equals(tmpState) || State.KILLED.equals(tmpState);
+    }
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/State.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/State.java
new file mode 100755
index 0000000..682dffd
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/State.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.state;
+
+/**
+ * job/task state
+ */
+public enum State {
+    // accepted state
+    ACCEPTED,
+    // running
+    RUNNING,
+    // succeeded
+    SUCCEEDED,
+    // failed
+    FAILED,
+    // killed
+    KILLED,
+    // fatal after retry failed
+    FATAL
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateCallback.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateCallback.java
new file mode 100755
index 0000000..31a2521
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateCallback.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.state;
+
+/**
+ * callbacks
+ */
+public interface StateCallback {
+
+    void call(State before, State after);
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateTransferException.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateTransferException.java
new file mode 100755
index 0000000..a934837
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/state/StateTransferException.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.state;
+
+
+public class StateTransferException extends RuntimeException {
+
+    public StateTransferException(State begin, State end) {
+        super(String.format("%s -> %s not allowed", begin, end));
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentDbUtils.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentDbUtils.java
new file mode 100644
index 0000000..e866318
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentDbUtils.java
@@ -0,0 +1,242 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.utils;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.concurrent.TimeUnit;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.commons.dbutils.DbUtils;
+import org.apache.commons.lang3.StringUtils;
+
+public class AgentDbUtils {
+
+    private static final Pattern PATTERN =
+        Pattern.compile("\\$\\{(((0x)|(0X)|o|O)??[0-9a-fA-F]+?) *, "
+            + "*(((0x)|(0X)|o|O)??[0-9a-fA-F]+?) *(, *[0-9]*?)??}");
+    private static final Pattern OCT_PATTERN = Pattern.compile("^o[0-7]+?$");
+    private static final Pattern DEC_PATTERN = Pattern.compile("^[0-9]+?$");
+    private static final int HEX_MODE = 16;
+    private static final int EIGHT_MODE = 8;
+    private static final String HEX_PREFIX = "0x";
+    private static final String O_PREFIX  = "o";
+
+    /**
+     * Attempts to establish a connection to the database from the XML configurations. If failed,
+     * try use alternative standby database.
+     *
+     * @return Database connection
+     */
+    public static Connection getConnectionFailover(String driverClassName,
+            String connectionUrl,
+            String userName,
+            String password) throws Exception {
+
+        int totalRetryTimes = 3;
+        int timeInterval = 10;
+
+        connectionUrl = StringUtils.trim(connectionUrl);
+        connectionUrl = StringUtils.replace(connectionUrl, "\r", "");
+        connectionUrl = StringUtils.replace(connectionUrl, "\n", "");
+
+        /* TODO: try to decrypt password, if failed then use raw password */
+
+        /*
+         * NOTE: THIS MAY CAUSE DEADLOAK WHEN MULTIPLE THREADS CALLED AT THE
+         * SAME TIME
+         * sun.security.jca.ProviderConfig.getProvider(ProviderConfig.java:188)
+         */
+        synchronized (AgentDbUtils.class) {
+            DbUtils.loadDriver(driverClassName);
+        }
+
+        Connection conn = null;
+        int retryTimes = 0;
+        while (conn == null) {
+            try {
+                conn = DriverManager.getConnection(connectionUrl, userName, password);
+            } catch (Exception e) {
+                retryTimes++;
+                if (retryTimes >= totalRetryTimes) {
+                    throw new SQLException(
+                            "Failed to connect database after retry " + retryTimes + " times.", e);
+                }
+                TimeUnit.SECONDS.sleep(timeInterval);
+            }
+        }
+
+        conn.setAutoCommit(false);
+        return conn;
+    }
+
+    private static String format(int num, boolean lengthEquals, int length, int mode) {
+        String numStr;
+        if (mode == HEX_MODE) {
+            numStr = Integer.toHexString(num);
+            /* sub hex head '0x' */
+            length = length - 2;
+        } else if (mode == EIGHT_MODE) {
+            numStr = Integer.toOctalString(num);
+            /* sub oct head 'o' */
+            length = length - 1;
+        } else {
+            numStr = String.valueOf(num);
+        }
+
+        /* append string length for lengthEquals = true */
+        if (lengthEquals) {
+            if (numStr.length() < length) {
+                StringBuilder numberFormatStr = new StringBuilder();
+                for (int i = 0; i < length - numStr.length(); i++) {
+                    numberFormatStr.append(0);
+                }
+                numberFormatStr.append(numStr);
+                numStr = numberFormatStr.toString();
+            }
+        }
+        return numStr;
+    }
+
+    private static int parseInt(String parseStr) {
+
+        int parseValue = -1;
+
+        if (parseStr.startsWith(HEX_PREFIX)) {
+            parseStr = parseStr.substring(2).trim();
+            parseValue = Integer.parseInt(parseStr, 16);
+        } else if (parseStr.startsWith(O_PREFIX)) {
+            parseStr = parseStr.substring(1).trim();
+            parseValue = Integer.parseInt(parseStr, 8);
+        } else {
+            parseValue = Integer.parseInt(parseStr);
+        }
+
+        return parseValue;
+    }
+
+    /**
+     * Transfer string pattern into a list of real string.
+     * For example: ${1, 99} = 1, 2, 3, ... 98,
+     * 99 <br> ${01, 99} = 01, 02, ... 98, 99 <br>
+     *     ${0x0,0xff} = 1, 2, ... fe, ff <br> ${0x00,0xff}
+     * = 01, 02, ... fe, ff <br> ${O1,O10} = 1, 2,... 7, 10<br>
+     *     ${O01,O10} = 01, 02,... 07, 10<br>
+     *
+     * test_${0x00,0x12,5} = test_00, test_05, test_0a, test_0f<br>
+     *
+     * @param str source string
+     * @return string list.
+     */
+    public static String[] replaceDynamicSeq(String str) {
+        if (StringUtils.isBlank(str)) {
+            return null;
+        }
+
+        StringBuffer sb = new StringBuffer();
+        int index = 0;
+        /* find need replace number string */
+        Matcher matcher = PATTERN.matcher(str);
+        ArrayList<String> startNum = new ArrayList<String>();
+        ArrayList<String> endNum = new ArrayList<String>();
+        ArrayList<Integer> modes = new ArrayList<Integer>();
+        ArrayList<Integer> steps = new ArrayList<Integer>();
+        while (matcher.find()) {
+            String matchStr = matcher.group(0);
+            matchStr = StringUtils.strip(matchStr, "${");
+            matchStr = StringUtils.strip(matchStr, "}");
+            String[] patterns = matchStr.split(",");
+            String startStr = patterns[0].trim().toLowerCase();
+            String endStr = patterns[1].trim().toLowerCase();
+            int step = 1;
+            if (patterns.length >= 3) {
+                String stepStr = patterns[2].trim();
+                if (stepStr.length() > 0) {
+                    step = parseInt(stepStr);
+                }
+            }
+
+            boolean bFound = false;
+            int mode = -1;
+
+            /* match hex string */
+            if (startStr.startsWith("0x") && endStr.startsWith("0x")) {
+                bFound = true;
+                mode = 16;
+            } else if (startStr.startsWith("o") && endStr.startsWith("o")) {
+                /* match oct string */
+                Matcher startMatch = OCT_PATTERN.matcher(startStr);
+                Matcher endMatch = OCT_PATTERN.matcher(endStr);
+                if (startMatch.find() && endMatch.find()) {
+                    bFound = true;
+                    mode = 8;
+                }
+            } else {
+                /* match dec string */
+                Matcher startMatch = DEC_PATTERN.matcher(startStr);
+                Matcher endMatch = DEC_PATTERN.matcher(endStr);
+                if (startMatch.find() && endMatch.find()) {
+                    bFound = true;
+                    mode = 10;
+                }
+            }
+
+            /* if not match oct, dec, hex; not do anything */
+            /* if matched, bFound = true */
+            if (bFound) {
+                startNum.add(startStr);
+                endNum.add(endStr);
+                modes.add(mode);
+                steps.add(step);
+                matcher.appendReplacement(sb, "\\${" + (index++) + "}");
+            }
+        }
+        matcher.appendTail(sb);
+        ArrayList<String>[] tempArray = formatStartNum(startNum, endNum, modes, steps, sb);
+        return tempArray[startNum.size()].toArray(new String[0]);
+    }
+
+    private static ArrayList<String>[] formatStartNum(ArrayList<String> startNum,
+        ArrayList<String> endNum,
+        ArrayList<Integer> modes,
+        ArrayList<Integer> steps,
+        StringBuffer sb) {
+        @SuppressWarnings("unchecked")
+        ArrayList<String>[] tempArray = new ArrayList[startNum.size() + 1];
+        tempArray[0] = new ArrayList<String>();
+        tempArray[0].add(sb.toString());
+        for (int index = 0; index < startNum.size(); index++) {
+            String start = startNum.get(index);
+            String end = endNum.get(index);
+            int mode = modes.get(index);
+            int step = steps.get(index);
+            tempArray[index + 1] = new ArrayList<String>();
+            boolean lengthEquals = start.length() == end.length();
+            for (String currentPath : tempArray[index]) {
+                for (int i = parseInt(start); i <= parseInt(end); i = i + step) {
+                    tempArray[index + 1].add(currentPath.replaceAll(
+                        "\\$\\{" + index + "}",
+                        format(i, lengthEquals, end.length(), mode)));
+                }
+            }
+        }
+        return tempArray;
+    }
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentUtils.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentUtils.java
new file mode 100644
index 0000000..b35e27a
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/AgentUtils.java
@@ -0,0 +1,363 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.inlong.agent.utils;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.InputStream;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileSystems;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.TimeZone;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import org.apache.commons.codec.digest.DigestUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AgentUtils {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(AgentUtils.class);
+    private static final AtomicLong INDEX = new AtomicLong(0);
+    private static final String HEX_PREFIX = "0x";
+    public static final String EQUAL = "=";
+    public static final String M_VALUE = "m";
+    public static final String ADDITION_SPLITTER = "&";
+    public static final String BEIJING_TIME_ZONE = "GMT+8:00";
+    public static final String HOUR_PATTERN = "yyyyMMddHH";
+    public static final String DAY_PATTERN = "yyyyMMdd";
+    public static final String DEFAULT_PATTERN = "yyyyMMddHHmm";
+    public static final String DAY = "D";
+    public static final String HOUR = "H";
+    public static final String HOUR_LOW_CASE = "h";
+    public static final String MINUTE = "m";
+
+
+    /**
+     * get md5 of file.
+     * @param file - file name
+     * @return
+     */
+    public static String getFileMd5(File file) {
+        try (InputStream is = Files.newInputStream(Paths.get(file.getAbsolutePath()))) {
+            return DigestUtils.md5Hex(is);
+        } catch (Exception ex) {
+            LOGGER.warn("cannot get md5 of {}", file, ex);
+        }
+        return "";
+    }
+
+    /**
+     * finally close resources
+     *
+     * @param resource -  resource which is closable.
+     */
+    public static void finallyClose(Closeable resource) {
+        if (resource != null) {
+            try {
+                resource.close();
+            } catch (Exception ex) {
+                LOGGER.info("error while closing", ex);
+            }
+        }
+    }
+
+    /**
+     * finally close resources.
+     *
+     * @param resource -  resource which is closable.
+     */
+    public static void finallyClose(AutoCloseable resource) {
+        if (resource != null) {
+            try {
+                resource.close();
+            } catch (Exception ex) {
+                LOGGER.error("error while closing", ex);
+            }
+        }
+    }
+
+    /**
+     * Get declare fields.
+     */
+    public static List<Field> getDeclaredFieldsIncludingInherited(Class<?> clazz) {
+        List<Field> fields = new ArrayList<Field>();
+        // check whether parent exists
+        while (clazz != null) {
+            fields.addAll(Arrays.asList(clazz.getDeclaredFields()));
+            clazz = clazz.getSuperclass();
+        }
+        return fields;
+    }
+
+    /**
+     * Get declare methods.
+     *
+     * @param clazz - class of field from method return
+     * @return list of methods
+     */
+    public static List<Method> getDeclaredMethodsIncludingInherited(Class<?> clazz) {
+        List<Method> methods = new ArrayList<Method>();
+        while (clazz != null) {
+            methods.addAll(Arrays.asList(clazz.getDeclaredMethods()));
+            clazz = clazz.getSuperclass();
+        }
+        return methods;
+    }
+
+    /**
+     * get random int of [seed, seed * 2]
+     * @param seed
+     * @return
+     */
+    public static int getRandomBySeed(int seed) {
+        return ThreadLocalRandom.current().nextInt(0, seed) + seed;
+    }
+
+    public static String getLocalIp() {
+        String ip = "127.0.0.1";
+        try (DatagramSocket socket = new DatagramSocket()) {
+            socket.connect(InetAddress.getByName("8.8.8.8"), 10002);
+            ip = socket.getLocalAddress().getHostAddress();
+        } catch (Exception ex) {
+            LOGGER.error("error while get local ip", ex);
+        }
+        return ip;
+    }
+
+    /**
+     * Get uniq id with timestamp.
+     *
+     * @return uniq id.
+     */
+    public static String getUniqId(String prefix, String id) {
+        return getUniqId(prefix, id, 0L);
+    }
+
+    /**
+     * Get uniq id with timestamp and index.
+     * @param id - job id
+     * @param index - job index
+     * @return uniq id
+     */
+    public static String getUniqId(String prefix, String id, long index) {
+        long currentTime = System.currentTimeMillis() / 1000;
+        return  prefix + currentTime + "_" + id + "_" + index;
+    }
+
+    public static void silenceSleepInMs(long millisecond) {
+        try {
+            TimeUnit.MILLISECONDS.sleep(millisecond);
+        } catch (Exception ignored) {
+            LOGGER.warn("silenceSleepInMs ", ignored);
+        }
+    }
+
+    public static String parseHexStr(String delimiter) throws IllegalArgumentException {
+        if (delimiter.trim().toLowerCase().startsWith(HEX_PREFIX)) {
+            //only one char
+            byte[] byteArr = new byte[1];
+            byteArr[0] = Byte.decode(delimiter.trim());
+            return new String(byteArr, StandardCharsets.UTF_8);
+        } else {
+            throw new IllegalArgumentException("delimiter not start with " + HEX_PREFIX);
+        }
+    }
+
+    /**
+     * formatter for current time
+     * @param formatter
+     * @return
+     */
+    public static String formatCurrentTime(String formatter) {
+        return formatCurrentTime(formatter, Locale.getDefault());
+    }
+
+    public static String formatCurrentTime(String formatter, Locale locale) {
+        ZonedDateTime zoned = ZonedDateTime.now();
+        // TODO: locale seems not working
+        return DateTimeFormatter.ofPattern(formatter).withLocale(locale).format(zoned);
+    }
+
+    /**
+     * formatter with time offset
+     * @param formatter - formatter string
+     * @param day - day offset
+     * @param hour - hour offset
+     * @param min - min offset
+     * @return current time with offset
+     */
+    public static String formatCurrentTimeWithOffset(String formatter, int day, int hour, int min) {
+        ZonedDateTime zoned = ZonedDateTime.now().plusDays(day).plusHours(hour).plusMinutes(min);
+        return DateTimeFormatter.ofPattern(formatter).withLocale(Locale.getDefault()).format(zoned);
+    }
+
+
+    public static String formatCurrentTimeWithoutOffset(String formatter) {
+        ZonedDateTime zoned = ZonedDateTime.now().plusDays(0).plusHours(0).plusMinutes(0);
+        return DateTimeFormatter.ofPattern(formatter).withLocale(Locale.getDefault()).format(zoned);
+    }
+
+    /**
+     * whether all class of path name are matched
+     *
+     * @param pathStr - path string
+     * @param patternStr - regex pattern
+     * @return true if all match
+     */
+    public static boolean regexMatch(String pathStr, String patternStr) {
+        String[] pathNames = StringUtils.split(pathStr, FileSystems.getDefault().getSeparator());
+        String[] patternNames = StringUtils
+                .split(patternStr, FileSystems.getDefault().getSeparator());
+        for (int i = 0; i < pathNames.length && i < patternNames.length; i++) {
+            if (!pathNames[i].equals(patternNames[i])) {
+                Matcher matcher = Pattern.compile(patternNames[i]).matcher(pathNames[i]);
+                if (!matcher.matches()) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * parse addition attr, the attributes must be send in proxy sender
+     * @param additionStr
+     * @return
+     */
+    public static Pair<String, Map<String, String>> parseAddAttr(String additionStr) {
+        Map<String, String> attr = new HashMap<>();
+        String[] split = additionStr.split(ADDITION_SPLITTER);
+        String mValue = "";
+        for (String s : split) {
+            if (!s.contains(EQUAL)) {
+                continue;
+            }
+            String[] pairs = s.split(EQUAL);
+            if (pairs[0].equalsIgnoreCase(M_VALUE)) {
+                mValue = pairs[1];
+                continue;
+            }
+            getAttrs(attr, s, pairs);
+        }
+        return Pair.of(mValue, attr);
+    }
+
+    /**
+     * the attrs in pairs can be complicated in online env
+     * @param attr
+     * @param s
+     * @param pairs
+     */
+    private static void getAttrs(Map<String, String> attr, String s, String[] pairs) {
+        // when addiction attr be like "m=10&__addcol1__worldid="
+        if (s.endsWith(EQUAL) && pairs.length == 1) {
+            attr.put(pairs[0], "");
+        } else {
+            attr.put(pairs[0], pairs[1]);
+        }
+    }
+
+    /**
+     * get addition attributes in additionStr
+     * @param additionStr
+     * @return
+     */
+    public static Map<String, String> getAdditionAttr(String additionStr) {
+        Pair<String, Map<String, String>> mValueAttrs = parseAddAttr(additionStr);
+        return mValueAttrs.getRight();
+    }
+
+
+    /**
+     * get m value in additionStr
+     * @param addictiveAttr
+     * @return
+     */
+    public static String getmValue(String addictiveAttr) {
+        Pair<String, Map<String, String>> mValueAttrs = parseAddAttr(addictiveAttr);
+        return mValueAttrs.getLeft();
+    }
+
+    /**
+     * time str convert to mill sec
+     * @param time
+     * @param cycleUnit
+     * @return
+     */
+    public static long timeStrConvertToMillSec(String time, String cycleUnit) {
+        long defaultTime = System.currentTimeMillis();
+        if (time.isEmpty() || cycleUnit.isEmpty()) {
+            return defaultTime;
+        }
+        String pattern = DEFAULT_PATTERN;
+        switch (cycleUnit) {
+            case DAY:
+                pattern = DAY_PATTERN;
+                time = time.substring(0, 8);
+                break;
+            case HOUR:
+            case HOUR_LOW_CASE:
+                pattern = HOUR_PATTERN;
+                time = time.substring(0, 10);
+                break;
+            case MINUTE:
+                break;
+            default:
+                LOGGER.error("cycle unit {} is illegal, please check!", cycleUnit);
+                break;
+        }
+        return parseTimeToMillSec(time, pattern);
+    }
+
+    private static long parseTimeToMillSec(String time, String pattern) {
+        try {
+            SimpleDateFormat df = new SimpleDateFormat(pattern);
+            df.setTimeZone(TimeZone.getTimeZone(BEIJING_TIME_ZONE));
+            return df.parse(time).getTime();
+        } catch (ParseException e) {
+            LOGGER.error("convert time string {} to millSec error", time);
+        }
+        return System.currentTimeMillis();
+    }
+
+
+
+
+
+}
diff --git a/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/ByteUtil.java b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/ByteUtil.java
new file mode 100644
index 0000000..bbc378f
--- /dev/null
+++ b/inlong-agent/agent-common/src/main/java/org/apache/inlong/agent/utils/ByteUtil.java
@@ -0,0 +1,237 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.inlong.agent.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ByteUtil {
+    /**
+     * Splits the source array into multiple array segments using the given separator, up to a
+     * maximum of count items. This will naturally produce copied byte arrays for each of the split
+     * segments. To identify the split ranges without the array copies, see {@link
+     * ByteUtil#splitRanges(byte[], byte[])}.
+     *
+     * @param source
+     * @param separator
+     * @return
+     */
+    public static byte[][] split(byte[] source, byte[] separator) {
+        return split(source, separator, -1);
+    }
+
+    /**
+     * Splits the source array into multiple array segments using the given separator, up to a
+     * maximum of count items. This will naturally produce copied byte arrays for each of the split
+     * segments. To identify the split ranges without the array copies, see {@link
+     * ByteUtil#splitRanges(byte[], byte[])}.
+     *
+     * @param source
+     * @param separator
+     * @return
+     */
+    public static byte[][] split(byte[] source, byte[] separator, int limit) {
+        List<Range> segments = splitRanges(source, separator, limit);
+
+        byte[][] splits = new byte[segments.size()][];
+        for (int i = 0; i < segments.size(); i++) {
+            Range r = segments.get(i);
+            byte[] tmp = new byte[r.length()];
+            if (tmp.length > 0) {
+                System.arraycopy(source, r.start(), tmp, 0, r.length());
+            }
+            splits[i] = tmp;
+        }
+        return splits;
+    }
+
+    /**
+     * Returns a list of ranges identifying [start, end) -- closed, open -- positions within the
+     * source byte array that would be split using the separator byte array.
+     */
+    public static List<Range> splitRanges(byte[] source, byte[] separator) {
+        return splitRanges(source, separator, -1);
+    }
+
+    /**
+     * Returns a list of ranges identifying [start, end) -- closed, open -- positions within the
+     * source byte array that would be split using the separator byte array.
+     *
+     * @param source the source data
+     * @param separator the separator pattern to look for
+     * @param limit the maximum number of splits to identify in the source
+     */
+    public static List<Range> splitRanges(byte[] source, byte[] separator, int limit) {
+        List<Range> segments = new ArrayList<Range>();
+        int start = 0;
+        itersource:
+        for (int i = 0; i < source.length; i++) {
+            for (int j = 0; j < separator.length; j++) {
+                if (source[i + j] != separator[j]) {
+                    continue itersource;
+                }
+            }
+            // all separator elements matched
+            if (limit > 0 && segments.size() >= (limit - 1)) {
+                // everything else goes in one final segment
+                break;
+            }
+
+            segments.add(new Range(start, i));
+            start = i + separator.length;
+            // i will be incremented again in outer for loop
+            i += separator.length - 1;
+        }
+        // add in remaining to a final range
+        if (start <= source.length) {
+            segments.add(new Range(start, source.length));
+        }
+        return segments;
+    }
+
+    /**
+     * Returns a single byte array containing all of the individual component arrays separated by
+     * the separator array.
+     *
+     * @param separator
+     * @param components
+     * @return
+     */
+    public static byte[] join(byte[] separator, byte[]... components) {
+        if (components == null || components.length == 0) {
+            return new byte[0];
+        }
+
+        int finalSize = 0;
+        if (separator != null) {
+            finalSize = separator.length * (components.length - 1);
+        }
+        for (byte[] comp : components) {
+            finalSize += comp.length;
+        }
+
+        byte[] buf = new byte[finalSize];
+        int offset = 0;
+        for (int i = 0; i < components.length; i++) {
+            System.arraycopy(components[i], 0, buf, offset, components[i].length);
+            offset += components[i].length;
+            if (i < (components.length - 1) && separator != null && separator.length > 0) {
+                System.arraycopy(separator, 0, buf, offset, separator.length);
+                offset += separator.length;
+            }
+        }
+        return buf;
+    }
+
+    /**
+     * Returns the index (start position) of the first occurrence of the specified {@code target}
+     * within {@code array} starting at {@code fromIndex} , or {@code -1} if there is no such
+     * occurrence.
+     *
+     * <p>
+     * Returns the lowest index {@code k} such that {@code k >= fromIndex} and {@code
+     * java.util.Arrays.copyOfRange(array, k, k + target.length)} contains exactly the same elements
+     * as {@code target}.
+     *
+     * @param array the array to search for the sequence {@code target}
+     * @param target the array to search for as a sub-sequence of {@code array}
+     * @param fromIndex the index to start the search from in {@code array}
+     */
+    public static int indexOf(byte[] array, byte[] target, int fromIndex) {
+
+        if (array == null || target == null) {
+            return -1;
+        }
+
+        // Target cannot be beyond array boundaries
+        if (fromIndex < 0 || (fromIndex > (array.length - target.length))) {
+            return -1;
+        }
+
+        // Empty is assumed to be at the fromIndex of any non-null array (after
+        // boundary check)
+        if (target.length == 0) {
+            return fromIndex;
+        }
+
+        firstbyte:
... 309198 lines suppressed ...