You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tubemq.apache.org by yu...@apache.org on 2021/03/01 09:07:40 UTC

[incubator-tubemq] 26/29: [TUBEMQ-559] Update the LICENSE file according to the 0.8.0-RC2 review (#427)

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

yuanbo pushed a commit to branch TUBEMQ-469
in repository https://gitbox.apache.org/repos/asf/incubator-tubemq.git

commit 5967037702d800569e21874305cdc28cf9de55a7
Author: gosonzhang <46...@qq.com>
AuthorDate: Sun Feb 14 09:50:22 2021 +0800

    [TUBEMQ-559] Update the LICENSE file according to the 0.8.0-RC2 review (#427)
    
    Co-authored-by: gosonzhang <go...@tencent.com>
---
 LICENSE                                            | 255 +++++++++++++++----
 pom.xml                                            |   1 -
 tubemq-connectors/tubemq-connector-flume/pom.xml   |   2 +-
 tubemq-manager/READMe.md                           |  51 ----
 tubemq-manager/bin/start-manager.sh                |  66 -----
 tubemq-manager/bin/stop-manager.sh                 |  37 ---
 tubemq-manager/conf/logback.xml                    |  67 -----
 tubemq-manager/pom.xml                             | 130 ----------
 tubemq-manager/src/main/assembly/assembly.xml      |  64 -----
 .../org/apache/tubemq/manager/TubeMQManager.java   |  59 -----
 .../controller/ManagerControllerAdvice.java        |  41 ----
 .../tubemq/manager/controller/TubeResult.java      |  27 --
 .../controller/cluster/ClusterController.java      | 128 ----------
 .../manager/controller/topic/TopicController.java  | 126 ----------
 .../org/apache/tubemq/manager/entry/NodeEntry.java |  51 ----
 .../apache/tubemq/manager/entry/TopicEntry.java    | 137 -----------
 .../apache/tubemq/manager/entry/TopicStatus.java   |  33 ---
 .../manager/exceptions/TubeMQManagerException.java |  28 ---
 .../tubemq/manager/repository/NodeRepository.java  |  28 ---
 .../tubemq/manager/repository/TopicRepository.java |  43 ----
 .../apache/tubemq/manager/service/NodeService.java | 272 ---------------------
 .../tubemq/manager/service/TopicBackendWorker.java | 137 -----------
 .../apache/tubemq/manager/service/TopicFuture.java |  58 -----
 .../tubemq/manager/service/TubeHttpConst.java      |  30 ---
 .../service/tube/TubeHttpBrokerInfoList.java       | 135 ----------
 .../manager/service/tube/TubeHttpResponse.java     |  30 ---
 .../service/tube/TubeHttpTopicInfoList.java        |  97 --------
 .../src/main/resources/application.properties      |  17 --
 .../manager/controller/TestBusinessController.java |  99 --------
 .../manager/controller/TestClusterController.java  | 150 ------------
 .../manager/repository/TestBusinessRepository.java |  67 -----
 .../service/tube/TestTubeHttpBrokerResponse.java   |  48 ----
 .../service/tube/TestTubeHttpTopicInfoList.java    |  52 ----
 33 files changed, 207 insertions(+), 2359 deletions(-)

diff --git a/LICENSE b/LICENSE
index 744f075..7ef57fd 100644
--- a/LICENSE
+++ b/LICENSE
@@ -208,11 +208,11 @@
 1. Third party MIT license licenses
 =========
 
-The following components are provided under the MIT license.
+1.1 The following modified/copied source files are provided under the MIT license.
 
 ----
 
-1.1 resources/assets/lib/jquery.min.js
+1.1.1 resources/assets/lib/jquery.min.js
  Source  : jquery 1.11.3
  License : https://github.com/jquery/jquery/blob/1.11.3/MIT-LICENSE.txt
 
@@ -240,7 +240,7 @@ The following components are provided under the MIT license.
 
 ----
 
-1.2 resources/assets/lib/DataTables/*
+1.1.2 resources/assets/lib/DataTables/*
  Source  : datatables  1.10.7
  License : https://github.com/DataTables/DataTables/blob/1.10.7/license.txt
 
@@ -265,18 +265,33 @@ The following components are provided under the MIT license.
 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 | THE SOFTWARE.
 
+------------------
+
+1.2 The following binary dependency packages are provided under the MIT license.
+
 ----
 
+1.2.1 org.slf4j:slf4j-api
+      org.slf4j:slf4j-log4j12
+ Version : 1.6.2
+ License : For details, see https://github.com/qos-ch/slf4j/blob/master/LICENSE.txt
+
+1.2.1 org.mockito:mockito-all:1.9.0
+      org.mockito:mockito-core:2.18.0
+ License : For details, see https://github.com/mockito/mockito/blob/release/1.x/LICENSE
+                            https://github.com/mockito/mockito/blob/release/2.x/LICENSE
+
+
 =========
 2. Third party BSD 3-Clause license
 =========
 
-The following components are provided under the BSD 3-Clause license.
+2.1 The following modified/copied source files are provided under the BSD 3-Clause license.
 
 ----
 
-2.1 tubemq-client-twins/tubemq-client-cpp/src/any.h
-    tubemq-client-twins/tubemq-client-cpp/src/buffer.h
+2.1.1 tubemq-client-twins/tubemq-client-cpp/src/any.h
+      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
@@ -311,67 +326,208 @@ The following components are provided under the BSD 3-Clause license.
 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+------------------
+
+2.2 The following binary dependency packages are provided under the BSD 3-Clause license.
+
 ----
 
+2.2.1 com.google.protobuf:protobuf-java
+ Version : 2.5.0
+ License : For details, see https://github.com/protocolbuffers/protobuf/blob/v2.5.0/COPYING.txt
+
+2.2.2 com.googlecode.protobuf-java-format:protobuf-java-format
+ Version : 1.4
+ License : For details, see https://github.com/bivas/protobuf-java-format/blob/master/LICENSE.txt
+
+
 =========
 3. Third party Apache 2.0 Licenses
 =========
 
-The following components are provided under the Apache 2.0 License.
+3.1 The following modified/copied source files are provided under the Apache 2.0 License.
 
 ----
 
-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
+3.1.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
  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
 
-3.2 tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MapBackedSet.java
-    tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/ConcurrentHashSet.java
+3.1.2 tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/MapBackedSet.java
+      tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/ConcurrentHashSet.java
  Source  : mina 2.0.12
  License : https://github.com/apache/mina/blob/2.0.12/LICENSE.txt
 
-3.3 bin/broker.sh
-    bin/master.sh
+3.1.3 bin/broker.sh
+      bin/master.sh
  Source  : Metamorphosis  metamorphosis-all-1.4.4 (Please note that the software have been modified.)
  License : https://github.com/killme2008/Metamorphosis/blob/metamorphosis-all-1.4.4/COPYING.txt
 
-3.4 tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferInputStream.java
-    tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferOutputStream.java
+3.1.4 tubemq-core/src/main/java/org/apache/tubemq/corerpc/netty/ByteBufferInputStream.java
+      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
 
-3.5 tubemq-client-twins/tubemq-client-cpp/src/future.h
+3.1.5 tubemq-client-twins/tubemq-client-cpp/src/future.h
  Source  : Apache Pulsar
  License : https://github.com/apache/pulsar/blob/master/LICENSE
 
+------------------
+
+3.2 The following binary dependency packages are provided under the Apache 2.0 License.
+
+----
+
+3.2.1 io.netty:netty
+ Version : 3.8.0.Final
+ License : For details, see https://github.com/netty/netty/blob/netty-3.8.0.Final/LICENSE.txt
+
+3.2.2 commons-cli:commons-cli
+ Version : 1.4
+ License : For details, see https://github.com/apache/commons-cli/blob/master/LICENSE.txt
+
+3.2.3 commons-codec:commons-codec
+ Version : 1.10
+ License : For details, see https://github.com/apache/commons-codec/blob/1.10/LICENSE.txt
+
+3.2.4 com.google.code.gson:gson
+ Version : 2.8.5
+ License : For details, see https://github.com/google/gson/blob/master/LICENSE
+
+3.2.5 commons-lang:commons-lang
+ Version : 2.6
+ License : For details, see https://github.com/apache/commons-lang/blob/master/LICENSE.txt
+
+3.2.6 org.apache.commons:commons-lang3
+ Version :
+ License : For details, see https://github.com/apache/commons-lang/blob/master/LICENSE.txt
+
+3.2.7 org.apache.httpcomponents:httpclient
+ Version : 4.5.2
+ License : For details, see https://github.com/apache/httpcomponents-client/blob/master/LICENSE.txt
+
+3.2.8 commons-io:commons-io
+ Version : 2.1
+ License : For details, see https://github.com/apache/commons-io/blob/master/LICENSE.txt
+
+3.2.9 org.apache.zookeeper:zookeeper
+ Version : 3.4.3
+ License : For details, see https://github.com/apache/zookeeper/blob/master/LICENSE.txt
+
+3.2.10 com.google.guava:guava
+ Version : 13.0
+ License : For details, see https://github.com/google/guava/blob/master/COPYING
+
+3.2.11 org.apache.velocity:velocity:1.7
+       org.apache.velocity:velocity-tools:2.0
+ License : For details, see https://github.com/apache/velocity-master/blob/master/pom/pom.xml
+                            https://github.com/apache/velocity-tools/blob/2.0/LICENSE
+
+3.2.12 org.springframework:spring-core
+       org.springframework:spring-context
+       org.springframework:spring-jdbc
+       org.springframework:spring-orm
+ Version : 4.1.6.RELEASE
+ License : For details, see https://github.com/spring-projects/spring-framework/tree/v4.1.6.RELEASE#license
+
+3.2.13 org.mortbay.jetty:jetty
+ Version : 6.1.26
+ License : For details, see https://github.com/jetty-project/codehaus-jetty6
+
+3.2.14 org.ini4j:ini4j
+ Version : 0.5.1
+ License : For details, see https://github.com/facebookarchive/ini4j/blob/master/LICENSE.txt
+
+3.2.15 org.easymock:easymock
+       org.easymock:easymockclassextension
+ Version : 2.5.2
+ License : For details, see https://github.com/easymock/easymock/blob/master/header.txt
+
+3.2.16 org.eclipse.jetty:jetty-server
+       org.eclipse.jetty:jetty-servlet
+ Version : 9.4.31.v20200723
+ License : For details, see https://github.com/eclipse/jetty.project/blob/jetty-9.4.x/LICENSE
+
+3.2.17 org.powermock:powermock-module-junit4
+       org.powermock:powermock-api-mockito2
+ Version : 2.0.4
+ License : For details, see https://github.com/powermock/powermock/blob/release/2.x/LICENSE.txt
+
+3.2.18 org.apache.flink:flink-core
+       org.apache.flink:flink-table-common
+       org.apache.flink:flink-runtime_2.11
+       org.apache.flink:flink-streaming-java_2.11
+       org.apache.flink:flink-table-api-java-bridge_2.11
+ Version : 1.9.2
+ License : For details, see https://github.com/apache/flink/blob/release-1.9/LICENSE
+
+3.2.19 org.apache.flume:flume-ng-core
+ Version : 1.9.0
+ License : For details, see https://github.com/apache/flume/blob/flume-1.9/LICENSE
+
+3.2.20 org.awaitility:awaitility
+ Version : 4.0.3
+ License : For details, see https://github.com/awaitility/awaitility/blob/master/LICENSE
+
+3.2.21 org.apache.spark:spark-core_2.11
+       org.apache.spark:spark-sql_2.11
+       org.apache.spark:spark-streaming_2.11
+ Version : 2.4.4
+ License : For details, see https://github.com/apache/spark/blob/branch-2.4/LICENSE
+
 
 =========
-4. Third party category X Licenses
+4. Third party Eclipse Public License 1.0 Licenses
 =========
 
+4.1 The following binary dependency packages are provided under Eclipse Public License 1.0 Licenses.
+
 ----
 
-NOTICE:
-The project does not contain the LICENSE file, but analyzed from
-the project’s pom.xml content and the file header of the source code file,
-the following components are provided under the Apache 2.0 License.
+4.1.1 junit:junit
+ Version : 4.11
+ License : For details, see https://github.com/junit-team/junit4/blob/main/LICENSE-junit.txt
+
+
+=========
+5. Third party CDDL + GPLv2 with classpath exception Licenses
+=========
 
-4.1 tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/TStringUtils.java
+5.1 The following binary dependency packages are provided under CDDL + GPLv2 with classpath exception Licenses.
+
+----
+
+5.1.1 javax.servlet:javax.servlet-api
+ Version : 4.0.1
+ License : For details, see https://github.com/javaee/servlet-spec/blob/master/LICENSE
+
+
+=========
+6. Third party category X Licenses
+=========
+
+6.1 The following modified/copied source files are provided under category X Licenses.
+
+----
+
+6.1.1 tubemq-core/src/main/java/org/apache/tubemq/corebase/utils/TStringUtils.java
  Source  : citrus r3.1.4 (Please note that the software have been modified.)
            https://github.com/webx/citrus/blob/r3.1.4/common/util/src/main/java/com/alibaba/citrus/util/StringUtil.java
- License: https://github.com/webx/citrus/blob/r3.1.4/pom.xml
+ License: The project does not contain the LICENSE file, but analyzed from
+          the project’s pom.xml content and the file header of the source code file,
+          the following components are provided under the Apache 2.0 License.
 
- pom.xml includes:
+ pom.xml includes: see https://github.com/webx/citrus/blob/r3.1.4/pom.xml
  |    <licenses>
  |        <license>
  |            <name>The Apache Software License, Version 2.0</name>
@@ -400,14 +556,11 @@ the following components are provided under the Apache 2.0 License.
 
 ----
 
-NOTICE:
-
-According to the content of the project’s README.markdown and LICENSE.markdown,
-the following components are provided under the slightly modified MIT License.
-
-4.2 resources/assets/public/css/style.css
-    resources/assets/public/css/ie.css
+6.1.2 resources/assets/public/css/style.css
+      resources/assets/public/css/ie.css
  Source  : Compass
+ License : According to the content of the project’s README.markdown and LICENSE.markdown,
+           the following components are provided under the slightly modified MIT License.
 
  README.markdown includes:(https://github.com/Compass/compass/blob/stable/README.markdown)
  | License
@@ -428,19 +581,22 @@ the following components are provided under the slightly modified MIT License.
  |
  | Contributors to this project agree to grant all rights to the copyright holder of the primary product. Attribution is maintained in the source control history of the product.
 
-----
-
-NOTICE:
+------------------
 
-We found that different versions of berkeleydb-je use different authorization protocols.
-The 7.3.7 version we choose uses the Apache V2 LICENSE, we choose to use this component
-based on Apache V2 LICENSE.
+6.2 The following binary dependency packages are provided under category X Licenses.
 
-If users modify the berkeleydb-je version, please pay attention to this issue.
-The following is the content of the LICENSE file in the component source package:
+----
 
-4.3 berkeleydb-je
+6.2.1 berkeleydb-je
+ Version : 7.3.7
  Source  : Oracle
+ License :We found that different versions of Berkeley DB JE (Java Edition) use different authorization protocols.
+           The 7.3.7 version we choose uses the Apache V2 LICENSE, we choose to use this component based on Apache V2 LICENSE.
+
+           If you modify the version of Berkeley DB JE (Java Edition), please ** pay attention ** to this issue,
+           please the appropriate version with Apache V2 LICENSE.
+
+           The following is the content of the LICENSE file in the component source package:
 
  LICENSE information notice in webpage: https://www.oracle.com/database/technologies/related/berkeleydb-downloads.html
  | Oracle Berkeley DB Licensing Information
@@ -528,6 +684,7 @@ The following is the content of the LICENSE file in the component source package
  |  * THE POSSIBILITY OF SUCH DAMAGE.
  |  */
 
+----
 
 
 
diff --git a/pom.xml b/pom.xml
index 3ca5c29..bca1abf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -85,7 +85,6 @@
         <dockerfile-maven.version>1.4.13</dockerfile-maven.version>
         <spring.boot.version>2.3.3.RELEASE</spring.boot.version>
         <mysql.java.version>8.0.21</mysql.java.version>
-        <junit.platform.version>1.6.2</junit.platform.version>
     </properties>
 
     <repositories>
diff --git a/tubemq-connectors/tubemq-connector-flume/pom.xml b/tubemq-connectors/tubemq-connector-flume/pom.xml
index c2b2f0a..cd78a97 100644
--- a/tubemq-connectors/tubemq-connector-flume/pom.xml
+++ b/tubemq-connectors/tubemq-connector-flume/pom.xml
@@ -31,7 +31,7 @@
     <properties>
         <flume.version>1.9.0</flume.version>
         <mockito.version>1.9.0</mockito.version>
-        <junit.version>4.10</junit.version>
+        <junit.version>4.11</junit.version>
         <awaitility.version>4.0.3</awaitility.version>
     </properties>
 
diff --git a/tubemq-manager/READMe.md b/tubemq-manager/READMe.md
deleted file mode 100644
index 29f5fdc..0000000
--- a/tubemq-manager/READMe.md
+++ /dev/null
@@ -1,51 +0,0 @@
-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.
-
-# introduction
-tubemq-manager is used to manage multiple tubemq cluster. It works with tubemq-web project. 
-tubemq-manager provide restful api and tubemq-web use them to provide front-end web pages.
-This page is going to introduce how to set up tubemq-manager environment.
-
-
-# build
-```shell script
-mvn clean package
-```
-
-
-# distribution
-env requirements:
-  1. mysql
-  2. java(1.8+)
-
-In the dist directory, you can find a installable file called `tubemq-manager-bin.zip`. Unzip it
-and add mysql address configuration in `conf/application.properties`
-
-```properties
-spring.jpa.hibernate.ddl-auto=update
-# configuration for manager
-spring.datasource.url=jdbc:mysql://x.x.x.x:3306/tubemanager
-spring.datasource.username=xx
-spring.datasource.password=xxx
-```
-Then setup mysql database called `tubemanager`, start this project by this command
-```shell script
-bin/start-manager.sh
-```
diff --git a/tubemq-manager/bin/start-manager.sh b/tubemq-manager/bin/start-manager.sh
deleted file mode 100755
index a81953d..0000000
--- a/tubemq-manager/bin/start-manager.sh
+++ /dev/null
@@ -1,66 +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.
-#
-
-base_dir=$(dirname $0)
-
-DAEMON_NAME=${DAEMON_NAME:-"tubemq-manager"}
-LOG_DIR=${LOG_DIR:-"$base_dir/../logs"}
-CONF_DIR=${CONF_DIR:-"$base_dir/../conf"}
-LIB_DIR=${LIB_DIR:-"$base_dir/../lib"}
-CONSOLE_OUTPUT_FILE=$LOG_DIR/$DAEMON_NAME.out
-MANAGER_HEAP_OPTS="-Xmx16G -Xms16G"
-MANAGER_GC_OPTS="-XX:+UseG1GC -verbose:gc -verbose:sizes -Xloggc:${LOG_DIR}/gc.log.`date +%Y-%m-%d-%H-%M-%S` -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution"
-
-# create logs directory
-if [ ! -d "$LOG_DIR" ]; then
-  mkdir -p "$LOG_DIR"
-fi
-
-# Exclude jars not necessary for running commands.
-regex="(-(test|test-sources|src|scaladoc|javadoc)\.jar|jar.asc)$"
-should_include_file() {
-  if [ "$INCLUDE_TEST_JARS" = true ]; then
-    return 0
-  fi
-  file=$1
-  if [ -z "$(echo "$file" | egrep "$regex")" ] ; then
-    return 0
-  else
-    return 1
-  fi
-}
-
-for file in ${LIB_DIR}/*.jar;
-do
-  if should_include_file "$file"; then
-    CLASSPATH="$CLASSPATH":"$file"
-  fi
-done
-
-CLASSPATH="${CONF_DIR}":$CLASSPATH
-export MANAGER_JVM_OPTS="${MANAGER_HEAP_OPTS} ${MANAGER_GC_OPTS} -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${LOG_DIR}"
-
-# Which java to use
-if [ -z "$JAVA_HOME" ]; then
-  JAVA="java"
-else
-  JAVA="$JAVA_HOME/bin/java"
-fi
-
-nohup "$JAVA" $MANAGER_JVM_OPTS -cp "$CLASSPATH" org.apache.tubemq.manager.TubeMQManager "$@" > "$CONSOLE_OUTPUT_FILE" 2>&1 < /dev/null &
diff --git a/tubemq-manager/bin/stop-manager.sh b/tubemq-manager/bin/stop-manager.sh
deleted file mode 100755
index e26d999..0000000
--- a/tubemq-manager/bin/stop-manager.sh
+++ /dev/null
@@ -1,37 +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.
-#
-
-SIGNAL=${SIGNAL:-TERM}
-
-if [[ $(uname -s) == "OS/390" ]]; then
-    if [ -z $JOBNAME ]; then
-        JOBNAME="TubeMQManager"
-    fi
-    PIDS=$(ps -A -o pid,jobname,comm | grep -i $JOBNAME | grep java | grep -v grep | awk '{print $1}')
-else
-    PIDS=$(jcmd  | grep -i 'TubeMQManager'  | awk '{print $1}')
-fi
-
-if [ -z "$PIDS" ]; then
-  echo "No tubemq manager server to stop"
-  exit 1
-else
-  kill -s $SIGNAL $PIDS
-  echo "stop tubemq manager .... $PIDS"
-fi
diff --git a/tubemq-manager/conf/logback.xml b/tubemq-manager/conf/logback.xml
deleted file mode 100644
index 97130b2..0000000
--- a/tubemq-manager/conf/logback.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?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.
--->
-<configuration>
-    <property name="FILE_ERROR_PATTERN"
-        value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} %file:%line: %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
-    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
-    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
-        <filter class="ch.qos.logback.classic.filter.LevelFilter">
-            <level>INFO</level>
-        </filter>
-        <encoder>
-            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>../logs/tubemq-manager.info.%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
-            <maxHistory>10</maxHistory>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-        </rollingPolicy>
-        <encoder>
-            <pattern>${FILE_LOG_PATTERN}</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
-            <FileNamePattern>../logs/tubemq-manager.error.%d{yyyy-MM-dd}.part_%i.log</FileNamePattern>
-            <maxHistory>10</maxHistory>
-            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
-                <maxFileSize>100MB</maxFileSize>
-            </timeBasedFileNamingAndTriggeringPolicy>
-        </rollingPolicy>
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>Error</level>
-        </filter>
-        <encoder>
-            <pattern>${FILE_ERROR_PATTERN}</pattern>
-            <charset>UTF-8</charset>
-        </encoder>
-    </appender>
-
-    <root level="info">
-        <appender-ref ref="FILE_INFO"/>
-        <appender-ref ref="FILE_ERROR"/>
-    </root>
-</configuration>
diff --git a/tubemq-manager/pom.xml b/tubemq-manager/pom.xml
deleted file mode 100644
index 16339e0..0000000
--- a/tubemq-manager/pom.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?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="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.3.3.RELEASE</version>
-    </parent>
-    <modelVersion>4.0.0</modelVersion>
-    <artifactId>tubemq-manager</artifactId>
-
-    <name>Apache TubeMQ - Manager</name>
-
-    <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.httpcomponents</groupId>
-            <artifactId>httpclient</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-lang3</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-rest</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-validation</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.code.gson</groupId>
-            <artifactId>gson</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-jpa</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.projectlombok</groupId>
-            <artifactId>lombok</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>mysql</groupId>
-            <artifactId>mysql-connector-java</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>com.h2database</groupId>
-            <artifactId>h2</artifactId>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.assertj</groupId>
-            <artifactId>assertj-core</artifactId>
-            <version>3.4.1</version>
-            <scope>test</scope>
-        </dependency>
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-assembly-plugin</artifactId>
-                <version>3.3.0</version>
-                <configuration>
-                    <descriptors>
-                        <descriptor>src/main/assembly/assembly.xml</descriptor>
-                    </descriptors>
-                    <archive>
-                        <manifest>
-                            <mainClass>com.cyy.MvnPackageApplication</mainClass>
-                        </manifest>
-                    </archive>
-                </configuration>
-                <executions>
-                    <execution>
-                        <id>make-assembly</id>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>single</goal>
-                        </goals>
-                        <configuration>
-                            <finalName>${project.artifactId}</finalName>
-                            <descriptors>
-                                <descriptor>src/main/assembly/assembly.xml</descriptor>
-                            </descriptors>
-                            <outputDirectory>./dist/</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>
\ No newline at end of file
diff --git a/tubemq-manager/src/main/assembly/assembly.xml b/tubemq-manager/src/main/assembly/assembly.xml
deleted file mode 100644
index d1ca6ee..0000000
--- a/tubemq-manager/src/main/assembly/assembly.xml
+++ /dev/null
@@ -1,64 +0,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.
--->
-<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.1.0"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.1.0 http://maven.apache.org/xsd/assembly-2.1.0.xsd">
-    <id>bin</id>
-    <formats>
-        <format>zip</format>
-    </formats>
-    <dependencySets>
-        <dependencySet>
-            <useProjectArtifact>false</useProjectArtifact>
-            <outputDirectory>lib</outputDirectory>
-        </dependencySet>
-    </dependencySets>
-    <fileSets>
-        <fileSet>
-            <directory>bin</directory>
-            <outputDirectory>/bin</outputDirectory>
-            <includes>
-                <include>*.sh</include>
-                <include>*.bat</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>conf</directory>
-            <outputDirectory>/conf</outputDirectory>
-            <includes>
-                <include>*.xml</include>
-                <include>*.properties</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>src/main/resources</directory>
-            <outputDirectory>/conf</outputDirectory>
-            <includes>
-                <include>*.xml</include>
-                <include>*.properties</include>
-            </includes>
-        </fileSet>
-        <fileSet>
-            <directory>target</directory>
-            <includes>
-                <include>tubemq-manager-*.jar</include>
-            </includes>
-            <outputDirectory>/lib</outputDirectory>
-        </fileSet>
-
-    </fileSets>
-</assembly>
\ No newline at end of file
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/TubeMQManager.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/TubeMQManager.java
deleted file mode 100644
index 114c0bc..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/TubeMQManager.java
+++ /dev/null
@@ -1,59 +0,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
- * <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.
- */
-package org.apache.tubemq.manager;
-
-import java.util.concurrent.Executor;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.Bean;
-import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
-import org.springframework.scheduling.annotation.EnableAsync;
-import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
-
-@SpringBootApplication
-@EnableJpaAuditing
-@EnableAsync
-public class TubeMQManager {
-
-    @Value("${manager.async.core.pool.size:2}")
-    private int asyncCorePoolSize;
-
-    @Value("${manager.async.max.pool.size:20}")
-    private int asyncMaxPoolSize;
-
-    @Value("${manager.async.queue.capacity:100}")
-    private int asyncQueueCapacity;
-
-    @Value("${manager.async.thread.prefix:AsyncThread-}")
-    private String threadPrefix;
-
-    public static void main(String[] args) {
-        SpringApplication.run(TubeMQManager.class);
-    }
-
-    @Bean(name = "asyncExecutor")
-    public Executor asyncExecutor() {
-        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
-        executor.setCorePoolSize(asyncCorePoolSize);
-        executor.setMaxPoolSize(asyncMaxPoolSize);
-        executor.setQueueCapacity(asyncQueueCapacity);
-        executor.setThreadNamePrefix(threadPrefix);
-        executor.initialize();
-        return executor;
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/ManagerControllerAdvice.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/ManagerControllerAdvice.java
deleted file mode 100644
index 5053834..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/ManagerControllerAdvice.java
+++ /dev/null
@@ -1,41 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.controller;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-/**
- * Controller advice for handling exceptions
- */
-@RestControllerAdvice
-public class ManagerControllerAdvice {
-
-    /**
-     * handling exception, and return json format string.
-     *
-     * @param ex
-     * @return
-     */
-    @ExceptionHandler(Exception.class)
-    public TubeResult handlingParameterException(Exception ex) {
-        TubeResult result = new TubeResult();
-        result.setErrMsg(ex.getClass().getName() + " " + ex.getMessage());
-        result.setErrCode(-1);
-        return result;
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/TubeResult.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/TubeResult.java
deleted file mode 100644
index 144d975..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/TubeResult.java
+++ /dev/null
@@ -1,27 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.controller;
-
-import lombok.Data;
-
-@Data
-public class TubeResult {
-    private String errMsg;
-    private int errCode = 0;
-    private boolean result = true;
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
deleted file mode 100644
index 58fe8f9..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/cluster/ClusterController.java
+++ /dev/null
@@ -1,128 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.controller.cluster;
-
-import static java.nio.charset.StandardCharsets.UTF_8;
-import static org.apache.tubemq.manager.service.TubeHttpConst.SCHEMA;
-
-import com.google.gson.Gson;
-import java.net.URLEncoder;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.util.EntityUtils;
-import org.apache.tubemq.manager.controller.TubeResult;
-import org.apache.tubemq.manager.entry.NodeEntry;
-import org.apache.tubemq.manager.repository.NodeRepository;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping(path = "/v1/cluster")
-@Slf4j
-public class ClusterController {
-
-    private final CloseableHttpClient httpclient = HttpClients.createDefault();
-    private final Gson gson = new Gson();
-
-    private static final String TUBE_REQUEST_PATH = "webapi.htm";
-
-    @Autowired
-    private NodeRepository nodeRepository;
-
-
-    private String covertMapToQueryString(Map<String, String> requestMap) throws Exception {
-        List<String> queryList = new ArrayList<>();
-
-        for (Map.Entry<String, String> entry : requestMap.entrySet()) {
-            queryList.add(entry.getKey() + "=" + URLEncoder.encode(
-                    entry.getValue(), UTF_8.toString()));
-        }
-        return StringUtils.join(queryList, "&");
-    }
-
-    private String queryMaster(String url) {
-        log.info("start to request {}", url);
-        HttpGet httpGet = new HttpGet(url);
-        TubeResult defaultResult = new TubeResult();
-        try (CloseableHttpResponse response = httpclient.execute(httpGet)) {
-            // return result json to response
-            return EntityUtils.toString(response.getEntity());
-        } catch (Exception ex) {
-            log.error("exception caught while requesting broker status", ex);
-            defaultResult.setErrCode(-1);
-            defaultResult.setResult(false);
-            defaultResult.setErrMsg(ex.getMessage());
-        }
-        return gson.toJson(defaultResult);
-    }
-
-    @RequestMapping(value = "/query", method = RequestMethod.GET,
-            produces = MediaType.APPLICATION_JSON_VALUE)
-    public @ResponseBody String queryInfo(
-            @RequestParam Map<String, String> queryBody) throws Exception {
-        int clusterId = Integer.parseInt(queryBody.get("clusterId"));
-        queryBody.remove("clusterId");
-        NodeEntry nodeEntry =
-                nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(clusterId);
-        String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort()
-                + "/" + TUBE_REQUEST_PATH + "?" + covertMapToQueryString(queryBody);
-        return queryMaster(url);
-    }
-
-    /**
-     * modify cluster info, need to check token and
-     * make sure user has authorization to modify it.
-     */
-    @RequestMapping(value = "/modify", method = RequestMethod.POST,
-            produces = MediaType.APPLICATION_JSON_VALUE)
-    public @ResponseBody String modifyClusterInfo(
-            @RequestBody Map<String, String> requestBody) throws Exception {
-        String token = requestBody.get("confModAuthToken");
-        log.info("token is {}, request body size is {}", token, requestBody.keySet());
-        int clusterId = Integer.parseInt(requestBody.get("clusterId"));
-        if (StringUtils.isNotBlank(token)) {
-            requestBody.remove("clusterId");
-            NodeEntry nodeEntry = nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(
-                    clusterId);
-            String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort()
-                    + "/" + TUBE_REQUEST_PATH + "?" + covertMapToQueryString(requestBody);
-            return queryMaster(url);
-        } else {
-            TubeResult result = new TubeResult();
-            result.setErrCode(-1);
-            result.setResult(false);
-            result.setErrMsg("token is not correct");
-            return gson.toJson(result);
-        }
-    }
-
-
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/topic/TopicController.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/topic/TopicController.java
deleted file mode 100644
index fdeac4e..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/controller/topic/TopicController.java
+++ /dev/null
@@ -1,126 +0,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
- * <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.
- */
-package org.apache.tubemq.manager.controller.topic;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.concurrent.CompletableFuture;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.tubemq.manager.controller.TubeResult;
-import org.apache.tubemq.manager.entry.TopicEntry;
-import org.apache.tubemq.manager.entry.TopicStatus;
-import org.apache.tubemq.manager.exceptions.TubeMQManagerException;
-import org.apache.tubemq.manager.repository.TopicRepository;
-import org.apache.tubemq.manager.service.TopicBackendWorker;
-import org.apache.tubemq.manager.service.TopicFuture;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping(path = "/business")
-@Slf4j
-public class TopicController {
-
-    @Autowired
-    private TopicRepository topicRepository;
-
-    @Autowired
-    private TopicBackendWorker topicBackendWorker;
-
-    /**
-     * add new topic.
-     *
-     * @return - businessResult
-     * @throws Exception - exception
-     */
-    @PostMapping("/add")
-    public TubeResult addTopic(@RequestBody TopicEntry entry) {
-        // entry in adding status
-        entry.setStatus(TopicStatus.ADDING.value());
-        topicRepository.saveAndFlush(entry);
-        CompletableFuture<TopicEntry> future = new CompletableFuture<>();
-        topicBackendWorker.addTopicFuture(new TopicFuture(entry, future));
-        future.whenComplete((entry1, throwable) -> {
-            entry1.setStatus(TopicStatus.SUCCESS.value());
-            if (throwable != null) {
-                // if throwable is not success, mark it as failed.
-                entry1.setStatus(TopicStatus.FAILED.value());
-                log.error("exception caught", throwable);
-            }
-            topicRepository.saveAndFlush(entry1);
-        });
-        return new TubeResult();
-    }
-
-    /**
-     * update topic
-     *
-     * @return
-     * @throws Exception
-     */
-    @PostMapping("/update")
-    public TubeResult updateTopic(@RequestBody TopicEntry entry) {
-        return new TubeResult();
-    }
-
-    /**
-     * Check topic status by business name.
-     *
-     * @return
-     * @throws Exception
-     */
-    @GetMapping("/check")
-    public TubeResult checkTopicByBusinessName(
-            @RequestParam String businessName) {
-        List<TopicEntry> result = topicRepository.findAllByBusinessName(businessName);
-        return new TubeResult();
-    }
-
-    /**
-     * get topic by id.
-     *
-     * @param id business id
-     * @return BusinessResult
-     * @throws Exception
-     */
-    @GetMapping("/get/{id}")
-    public TubeResult getBusinessByID(
-            @PathVariable Long id) {
-        Optional<TopicEntry> businessEntry = topicRepository.findById(id);
-        TubeResult result = new TubeResult();
-        if (!businessEntry.isPresent()) {
-            result.setErrCode(-1);
-            result.setErrMsg("business not found");
-        }
-        return result;
-    }
-
-    /**
-     * test for exception situation.
-     * @return
-     */
-    @GetMapping("/throwException")
-    public TubeResult throwException() {
-        throw new TubeMQManagerException("exception for test");
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/NodeEntry.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/NodeEntry.java
deleted file mode 100644
index 54c4236..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/NodeEntry.java
+++ /dev/null
@@ -1,51 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.entry;
-
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import lombok.Data;
-
-/**
- * node machine for tube cluster. broker/master/standby
- */
-@Entity
-@Table(name = "node")
-@Data
-public class NodeEntry {
-    @Id
-    @GeneratedValue(strategy= GenerationType.AUTO)
-    private long brokerId;
-
-    private boolean master;
-
-    private boolean standby;
-
-    private boolean broker;
-
-    private String ip;
-
-    private int port;
-
-    private int webPort;
-
-    private int clusterId;
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicEntry.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicEntry.java
deleted file mode 100644
index 17b7711..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicEntry.java
+++ /dev/null
@@ -1,137 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.entry;
-
-import java.sql.Date;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EntityListeners;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Size;
-import lombok.Data;
-import org.hibernate.annotations.CreationTimestamp;
-import org.springframework.data.jpa.domain.support.AuditingEntityListener;
-
-@Entity
-@Table(name = "topic")
-@Data
-@EntityListeners(AuditingEntityListener.class) // support CreationTimestamp annotation
-public class TopicEntry {
-    @Id
-    @GeneratedValue(strategy=GenerationType.AUTO)
-    private long businessId;
-
-    @Size(max = 30)
-    @NotNull
-    private String businessName;
-
-    @Size(max = 64)
-    private String messageType;
-
-    @Size(max = 256)
-    private String businessCnName;
-
-    @Size(max = 256)
-    private String description;
-
-    private String bg;
-
-    @Size(max = 240)
-    @NotNull
-    private String schemaName;
-
-    @Size(max = 32)
-    @NotNull
-    private String username;
-
-    @Size(max = 64)
-    @NotNull
-    private String passwd;
-
-    @Size(max = 64)
-    @NotNull
-    private String topic;
-
-    @Size(max = 10)
-    private String fieldSplitter;
-
-    @Size(max = 256)
-    private String predefinedFields;
-
-    private int isHybridDataSource = 0;
-
-    @Size(max = 64)
-    @NotNull
-    private String encodingType;
-
-    private int isSubSort = 0;
-
-    private String topologyName;
-
-    private String targetServer;
-
-    private String targetServerPort;
-
-    private String netTarget;
-
-    private int status;
-
-    private String category;
-
-    private int clusterId;
-
-    private String inCharge;
-
-    private String sourceServer;
-
-    private String baseDir;
-
-    @CreationTimestamp
-    private Date createTime;
-
-    private String importType;
-
-    private String exampleData;
-
-    private String tdwAppgroup;
-
-    @Column(name = "SN")
-    private int sn;
-
-    @Size(max = 32)
-    private String issueMethod;
-
-
-    public TopicEntry(String businessName, String schemaName,
-            String username, String passwd, String topic, String encodingType) {
-        this.businessName = businessName;
-        this.schemaName = schemaName;
-        this.username = username;
-        this.passwd = passwd;
-        this.topic = topic;
-        this.encodingType = encodingType;
-    }
-
-    public TopicEntry() {
-
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicStatus.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicStatus.java
deleted file mode 100644
index e5796af..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/entry/TopicStatus.java
+++ /dev/null
@@ -1,33 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.entry;
-
-public enum TopicStatus {
-
-    ADDING(0), SUCCESS(1), FAILED(2), RETRY(3);
-
-    private int value = 0;
-
-    private TopicStatus(int value) {
-        this.value = value;
-    }
-
-    public int value() {
-        return this.value;
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/exceptions/TubeMQManagerException.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/exceptions/TubeMQManagerException.java
deleted file mode 100644
index 46c888c..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/exceptions/TubeMQManagerException.java
+++ /dev/null
@@ -1,28 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.exceptions;
-
-/**
- * TubeMQ runtime exception.
- */
-public class TubeMQManagerException extends RuntimeException {
-
-    public TubeMQManagerException(final String message) {
-        super(message);
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/NodeRepository.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/NodeRepository.java
deleted file mode 100644
index 4bf6ec7..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/NodeRepository.java
+++ /dev/null
@@ -1,28 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.repository;
-
-import org.apache.tubemq.manager.entry.NodeEntry;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface NodeRepository extends JpaRepository<NodeEntry, Long> {
-
-    NodeEntry findNodeEntryByClusterIdIsAndMasterIsTrue(int clusterId);
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/TopicRepository.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/TopicRepository.java
deleted file mode 100644
index 4c88949..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/repository/TopicRepository.java
+++ /dev/null
@@ -1,43 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.repository;
-
-import java.util.List;
-import org.apache.tubemq.manager.entry.TopicEntry;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.stereotype.Repository;
-
-@Repository
-public interface TopicRepository extends JpaRepository<TopicEntry, Long> {
-
-   /**
-    * get all topicEntry list by business name
-    * @param businessName
-    * @return
-    */
-   List<TopicEntry> findAllByBusinessName(String businessName);
-
-   /**
-    * get one topicEntry by business name
-    * @param businessName
-    * @return
-    */
-   TopicEntry findByBusinessName(String businessName);
-
-}
-
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/NodeService.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/NodeService.java
deleted file mode 100644
index 4e0db3e..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/NodeService.java
+++ /dev/null
@@ -1,272 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service;
-
-
-import static org.apache.tubemq.manager.service.TubeHttpConst.ADD_TUBE_TOPIC;
-import static org.apache.tubemq.manager.service.TubeHttpConst.BROKER_RUN_STATUS;
-import static org.apache.tubemq.manager.service.TubeHttpConst.RELOAD_BROKER;
-import static org.apache.tubemq.manager.service.TubeHttpConst.SCHEMA;
-import static org.apache.tubemq.manager.service.TubeHttpConst.TOPIC_CONFIG_INFO;
-
-import com.google.gson.Gson;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.client.methods.CloseableHttpResponse;
-import org.apache.http.client.methods.HttpGet;
-import org.apache.http.impl.client.CloseableHttpClient;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.tubemq.manager.entry.NodeEntry;
-import org.apache.tubemq.manager.repository.NodeRepository;
-import org.apache.tubemq.manager.service.tube.TubeHttpBrokerInfoList;
-import org.apache.tubemq.manager.service.tube.TubeHttpResponse;
-import org.apache.tubemq.manager.service.tube.TubeHttpTopicInfoList;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-
-/**
- * node service to query broker/master/standby status of tube cluster.
- */
-@Slf4j
-public class NodeService {
-
-    private final CloseableHttpClient httpclient = HttpClients.createDefault();
-    private final Gson gson = new Gson();
-
-    @Value("${manager.max.configurable.broker.size:50}")
-    private int maxConfigurableBrokerSize;
-
-    @Value("${manager.max.retry.adding.topic:10}")
-    private int maxRetryAddingTopic;
-
-    private final TopicBackendWorker worker;
-
-    @Autowired
-    private NodeRepository nodeRepository;
-
-    public NodeService(TopicBackendWorker worker) {
-        this.worker = worker;
-    }
-
-    /**
-     * request node status via http.
-     *
-     * @param nodeEntry - node entry
-     * @return
-     * @throws IOException
-     */
-    private TubeHttpBrokerInfoList requestClusterNodeStatus(NodeEntry nodeEntry) throws IOException {
-        String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort() + BROKER_RUN_STATUS;
-        HttpGet httpget = new HttpGet(url);
-        try (CloseableHttpResponse response = httpclient.execute(httpget)) {
-            TubeHttpBrokerInfoList brokerInfoList =
-                    gson.fromJson(new InputStreamReader(response.getEntity().getContent()),
-                            TubeHttpBrokerInfoList.class);
-            // request return normal.
-            if (brokerInfoList.getCode() == 0) {
-                // divide by state.
-                brokerInfoList.divideBrokerListByState();
-                return brokerInfoList;
-            }
-        } catch (Exception ex) {
-            log.error("exception caught while requesting broker status", ex);
-        }
-        return null;
-    }
-
-
-    private TubeHttpTopicInfoList requestTopicConfigInfo(NodeEntry nodeEntry, String topic) {
-        String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort()
-                + TOPIC_CONFIG_INFO + "&topicName=" + topic;
-        HttpGet httpget = new HttpGet(url);
-        try (CloseableHttpResponse response = httpclient.execute(httpget)) {
-            TubeHttpTopicInfoList topicInfoList =
-                    gson.fromJson(new InputStreamReader(response.getEntity().getContent()),
-                            TubeHttpTopicInfoList.class);
-            if (topicInfoList.getErrCode() == 0) {
-                return topicInfoList;
-            }
-        } catch (Exception ex) {
-            log.error("exception caught while requesting broker status", ex);
-        }
-        return null;
-    }
-
-
-    private boolean configBrokersForTopics(NodeEntry nodeEntry,
-            Set<String> topics, List<Integer> brokerList, int maxBrokers) {
-        List<Integer> finalBrokerList = brokerList.subList(0, maxBrokers);
-        String brokerStr = StringUtils.join(finalBrokerList, ",");
-        String topicStr = StringUtils.join(topics, ",");
-        String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort()
-                + ADD_TUBE_TOPIC  + "&topicName=" + topicStr + "&brokerId=" + brokerStr;
-        HttpGet httpget = new HttpGet(url);
-        try (CloseableHttpResponse response = httpclient.execute(httpget)) {
-            TubeHttpResponse result =
-                    gson.fromJson(new InputStreamReader(response.getEntity().getContent()),
-                            TubeHttpResponse.class);
-            return result.getCode() == 0 && result.getErrCode() == 0;
-        } catch (Exception ex) {
-            log.error("exception caught while requesting broker status", ex);
-        }
-        return false;
-    }
-
-    /**
-     * handle result, if success, complete it,
-     * if not success, add back to queue without exceeding max retry,
-     * otherwise complete it with exception.
-     *
-     * @param isSuccess
-     * @param topics
-     * @param pendingTopic
-     */
-    private void handleAddingResult(boolean isSuccess, Set<String> topics,
-            Map<String, TopicFuture> pendingTopic) {
-        for (String topic : topics) {
-            TopicFuture future = pendingTopic.get(topic);
-            if (future != null) {
-                if (isSuccess) {
-                    future.complete();
-                } else {
-                    future.increaseRetryTime();
-                    if (future.getRetryTime() > maxRetryAddingTopic) {
-                        future.completeExceptional();
-                    } else {
-                        // add back to queue.
-                        worker.addTopicFuture(future);
-                    }
-                }
-            }
-        }
-    }
-
-
-    /**
-     * Adding topic is an async operation, so this method should
-     * 1. check whether pendingTopic contains topic that has failed/succeeded to be added.
-     * 2. async add topic to tubemq cluster
-     *
-     * @param brokerInfoList - broker list
-     * @param pendingTopic - topicMap
-     */
-    private void handleAddingTopic(NodeEntry nodeEntry,
-            TubeHttpBrokerInfoList brokerInfoList,
-            Map<String, TopicFuture> pendingTopic) {
-        // 1. check tubemq cluster by topic name, remove pending topic if has added.
-        Set<String> brandNewTopics = new HashSet<>();
-        for (String topic : pendingTopic.keySet()) {
-            TubeHttpTopicInfoList topicInfoList = requestTopicConfigInfo(nodeEntry, topic);
-            if (topicInfoList != null) {
-                // get broker list by topic request
-                List<Integer> topicBrokerList = topicInfoList.getTopicBrokerIdList();
-                if (topicBrokerList.isEmpty()) {
-                    brandNewTopics.add(topic);
-                } else {
-                    // remove brokers which have been added.
-                    List<Integer> configurableBrokerIdList =
-                            brokerInfoList.getConfigurableBrokerIdList();
-                    configurableBrokerIdList.removeAll(topicBrokerList);
-                    // add topic to satisfy max broker number.
-                    Set<String> singleTopic = new HashSet<>();
-                    singleTopic.add(topic);
-                    int maxBrokers = maxConfigurableBrokerSize - topicBrokerList.size();
-                    boolean isSuccess = configBrokersForTopics(nodeEntry, singleTopic,
-                            configurableBrokerIdList, maxBrokers);
-                    handleAddingResult(isSuccess, singleTopic, pendingTopic);
-                }
-            }
-        }
-        // 2. add new topics to cluster
-        List<Integer> configurableBrokerIdList = brokerInfoList.getConfigurableBrokerIdList();
-        int maxBrokers = Math.min(maxConfigurableBrokerSize, configurableBrokerIdList.size());
-        boolean isSuccess = configBrokersForTopics(nodeEntry, brandNewTopics,
-                configurableBrokerIdList, maxBrokers);
-        handleAddingResult(isSuccess, brandNewTopics, pendingTopic);
-    }
-
-    /**
-     * reload broker list, cannot exceed maxConfigurableBrokerSize each time.
-     *
-     * @param nodeEntry
-     * @param needReloadList
-     */
-    private void handleReloadBroker(NodeEntry nodeEntry, List<Integer> needReloadList) {
-        // reload without exceed max broker.
-        int begin = 0;
-        int end = 0;
-        do {
-            end = Math.min(maxConfigurableBrokerSize + begin, needReloadList.size());
-            List<Integer> brokerIdList = needReloadList.subList(begin, end);
-            String brokerStr = StringUtils.join(brokerIdList, ",");
-            String url = SCHEMA + nodeEntry.getIp() + ":" + nodeEntry.getWebPort()
-                    + RELOAD_BROKER + "&brokerId=" + brokerStr;
-            HttpGet httpget = new HttpGet(url);
-            try (CloseableHttpResponse response = httpclient.execute(httpget)) {
-                TubeHttpResponse result =
-                        gson.fromJson(new InputStreamReader(response.getEntity().getContent()),
-                                TubeHttpResponse.class);
-                if (result.getErrCode() == 0 && result.getCode() == 0) {
-                    log.info("reload tube broker cgi: " +
-                            url + " ; return value : " + result.getCode());
-                }
-            } catch (Exception ex) {
-                log.error("exception caught while requesting broker status", ex);
-            }
-            begin = end;
-        } while (end >= needReloadList.size());
-    }
-
-
-
-    /**
-     * update broker status
-     */
-    public void updateBrokerStatus(int clusterId, Map<String, TopicFuture> pendingTopic) {
-        NodeEntry nodeEntry = nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(clusterId);
-        if (nodeEntry != null) {
-            try {
-                TubeHttpBrokerInfoList brokerInfoList = requestClusterNodeStatus(nodeEntry);
-                if (brokerInfoList != null) {
-                    handleAddingTopic(nodeEntry, brokerInfoList, pendingTopic);
-                }
-
-                // refresh broker list
-                brokerInfoList = requestClusterNodeStatus(nodeEntry);
-                if (brokerInfoList != null) {
-                    handleReloadBroker(nodeEntry, brokerInfoList.getNeedReloadList());
-                }
-
-            } catch (Exception ex) {
-                log.error("exception caught while requesting broker status", ex);
-            }
-        } else {
-            log.error("cannot get master ip by clusterId {}, please check it", clusterId);
-        }
-    }
-
-    public void close() throws IOException {
-        httpclient.close();
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicBackendWorker.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicBackendWorker.java
deleted file mode 100644
index 86b72d5..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicBackendWorker.java
+++ /dev/null
@@ -1,137 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.BlockingQueue;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.tubemq.manager.repository.TopicRepository;
-import org.springframework.beans.factory.DisposableBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-
-/**
- * Topic backend thread worker.
- */
-@Component
-@Slf4j
-public class TopicBackendWorker implements DisposableBean, Runnable  {
-    private final AtomicBoolean runFlag = new AtomicBoolean(true);
-    private final ConcurrentHashMap<Integer, BlockingQueue<TopicFuture>> pendingTopics =
-            new ConcurrentHashMap<>();
-    private final AtomicInteger notSatisfiedCount = new AtomicInteger(0);
-    private final NodeService nodeService;
-
-    @Autowired
-    private TopicRepository topicRepository;
-
-    @Value("${manager.topic.queue.warning.size:100}")
-    private int queueWarningSize;
-
-    // value in seconds
-    @Value("${manager.topic.queue.thread.interval:10}")
-    private int queueThreadInterval;
-
-    @Value("${manager.topic.queue.max.wait:3}")
-    private int queueMaxWait;
-
-    @Value("${manager.topic.queue.max.running.size:20}")
-    private int queueMaxRunningSize;
-
-    TopicBackendWorker() {
-        Thread thread = new Thread(this);
-        // daemon thread
-        thread.setDaemon(true);
-        thread.start();
-        nodeService = new NodeService(this);
-    }
-
-    /**
-     * add topic future to pending executing queue.
-     * @param future - TopicFuture.
-     */
-    public void addTopicFuture(TopicFuture future) {
-        BlockingQueue<TopicFuture> tmpQueue = new LinkedBlockingQueue<>();
-        BlockingQueue<TopicFuture> queue = pendingTopics.putIfAbsent(
-                future.getEntry().getClusterId(), tmpQueue);
-        if (queue == null) {
-            queue = tmpQueue;
-        }
-        queue.add(future);
-        if (queue.size() > queueWarningSize) {
-            log.warn("queue size exceed {}, please check it", queueWarningSize);
-        }
-    }
-
-    /**
-     * batch executing adding topic, wait util max n seconds or max size satisfied.
-     */
-    private void batchAddTopic() {
-        pendingTopics.forEach((clusterId, queue) -> {
-            Map<String, TopicFuture> pendingTopicList = new HashMap<>();
-            if (notSatisfiedCount.get() > queueMaxWait || queue.size() > queueMaxRunningSize) {
-                notSatisfiedCount.set(0);
-                List<TopicFuture> tmpTopicList = new ArrayList<>();
-                queue.drainTo(tmpTopicList, queueMaxRunningSize);
-                for (TopicFuture topicFuture : tmpTopicList) {
-                    pendingTopicList.put(topicFuture.getEntry().getTopic(), topicFuture);
-                }
-            } else {
-                notSatisfiedCount.incrementAndGet();
-            }
-            // update broker status
-            nodeService.updateBrokerStatus(clusterId, pendingTopicList);
-        });
-
-    }
-
-    /**
-     * check topic from db
-     */
-    private void checkTopicFromDB() {
-    }
-
-    @Override
-    public void run() {
-        log.info("TopicBackendWorker has started");
-        while (runFlag.get()) {
-            try {
-                batchAddTopic();
-                checkTopicFromDB();
-                TimeUnit.SECONDS.sleep(queueThreadInterval);
-            } catch (Exception exception) {
-                log.warn("exception caught", exception);
-            }
-        }
-    }
-
-    @Override
-    public void destroy() throws Exception {
-        runFlag.set(false);
-        nodeService.close();
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicFuture.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicFuture.java
deleted file mode 100644
index 62b0e2d..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TopicFuture.java
+++ /dev/null
@@ -1,58 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service;
-
-import java.util.concurrent.CompletableFuture;
-import lombok.Getter;
-import org.apache.tubemq.manager.entry.TopicEntry;
-
-/**
- * topic business with future.
- */
-public class TopicFuture {
-    @Getter
-    private int retryTime = 0;
-    @Getter
-    private final TopicEntry entry;
-    @Getter
-    private final CompletableFuture<TopicEntry> future;
-
-    public TopicFuture(TopicEntry entry, CompletableFuture<TopicEntry> future) {
-        this.entry = entry;
-        this.future = future;
-    }
-
-    /**
-     * record retry time.
-     */
-    public void increaseRetryTime() {
-        retryTime += 1;
-    }
-
-    /**
-     * when topic operation finished, complete it.
-     */
-    public void complete() {
-        this.future.complete(this.entry);
-    }
-
-    public void completeExceptional() {
-        this.future.completeExceptionally(new RuntimeException("exceed max retry "
-                + retryTime +" adding"));
-    }
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TubeHttpConst.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TubeHttpConst.java
deleted file mode 100644
index 81a360e..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/TubeHttpConst.java
+++ /dev/null
@@ -1,30 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service;
-
-public class TubeHttpConst {
-    public static final String SCHEMA = "http://";
-    public static final String BROKER_RUN_STATUS =
-            "/webapi.htm?type=op_query&method=admin_query_broker_run_status";
-    public static final String TOPIC_CONFIG_INFO =
-            "/webapi.htm?type=op_query&method=admin_query_topic_info";
-    public static final String ADD_TUBE_TOPIC =
-            "/webapi.htm?type=op_modify&method=admin_add_new_topic_record";
-    public static final String RELOAD_BROKER =
-            "/webapi.htm?type=op_modify&method=admin_reload_broker_configure";
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpBrokerInfoList.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpBrokerInfoList.java
deleted file mode 100644
index c768aa1..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpBrokerInfoList.java
+++ /dev/null
@@ -1,135 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service.tube;
-
-import java.util.ArrayList;
-import java.util.List;
-import lombok.Data;
-
-/**
- * json class for broker info list from master http service.
- */
-@Data
-public class TubeHttpBrokerInfoList {
-
-    /**
-     * json class for broker info.
-     */
-    @Data
-    public static class BrokerInfo {
-        private int brokerId;
-        private String brokerIp;
-        private int brokerPort;
-        private String manageStatus;
-        private String runStatus;
-        private String subStatus;
-        private int stepOp;
-        private boolean isConfChanged;
-        private boolean isConfLoaded;
-        private boolean isBrokerOnline;
-        private String brokerVersion;
-        private boolean acceptPublish;
-        private boolean acceptSubscribe;
-
-        public boolean isIdle() {
-            return subStatus != null && subStatus.equals("idle");
-        }
-
-        public boolean isWorking() {
-            if (runStatus != null && manageStatus != null) {
-                return runStatus.equals("running") && (
-                        manageStatus.equals("online") ||
-                        manageStatus.equals("only-read") ||
-                        manageStatus.equals("only-write"));
-            }
-            return false;
-        }
-
-        public boolean isConfigurable() {
-            return stepOp == -2 || stepOp == 31 || stepOp == 32;
-        }
-
-        @Override
-        public int hashCode() {
-            return brokerId;
-        }
-
-        @Override
-        public boolean equals(Object o) {
-
-            if (o == this) return true;
-            if (!(o instanceof BrokerInfo)) {
-                return false;
-            }
-
-            BrokerInfo brokerInfo = (BrokerInfo) o;
-
-            return brokerId == brokerInfo.brokerId;
-        }
-    }
-
-    private int code;
-    private String errMsg;
-    // total broker info list of brokers.
-    private List<BrokerInfo> data;
-    // configurable list of brokers.
-    private List<BrokerInfo> configurableList;
-    // working state list of brokers
-    private List<BrokerInfo> workingList;
-    // idle broker list
-    private List<BrokerInfo> idleList;
-    // need reload broker list
-    private List<Integer> needReloadList;
-
-    /**
-     * divide broker list into different list by broker state.
-     */
-    public void divideBrokerListByState() {
-        if (data != null) {
-            configurableList = new ArrayList<>();
-            workingList = new ArrayList<>();
-            idleList = new ArrayList<>();
-            needReloadList = new ArrayList<>();
-            for (BrokerInfo brokerInfo : data) {
-                if (brokerInfo.isConfigurable()) {
-                    configurableList.add(brokerInfo);
-                }
-                if (brokerInfo.isWorking()) {
-                    workingList.add(brokerInfo);
-                }
-                if (brokerInfo.isIdle()) {
-                    idleList.add(brokerInfo);
-                }
-                if (brokerInfo.isConfChanged) {
-                    needReloadList.add(brokerInfo.getBrokerId());
-                }
-            }
-        }
-    }
-
-    public List<Integer> getConfigurableBrokerIdList() {
-        List<Integer> tmpBrokerIdList = new ArrayList<>();
-        if (configurableList != null) {
-            for (BrokerInfo brokerInfo : configurableList) {
-                tmpBrokerIdList.add(brokerInfo.getBrokerId());
-            }
-        }
-        return tmpBrokerIdList;
-    }
-
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpResponse.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpResponse.java
deleted file mode 100644
index bc30025..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpResponse.java
+++ /dev/null
@@ -1,30 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service.tube;
-
-import lombok.Data;
-
-/**
- * common response json str for tube htt request
- */
-@Data
-public class TubeHttpResponse {
-    private int code;
-    private String errMsg;
-    private int errCode;
-}
diff --git a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpTopicInfoList.java b/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpTopicInfoList.java
deleted file mode 100644
index 7131b83..0000000
--- a/tubemq-manager/src/main/java/org/apache/tubemq/manager/service/tube/TubeHttpTopicInfoList.java
+++ /dev/null
@@ -1,97 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service.tube;
-
-import java.util.ArrayList;
-import java.util.List;
-import lombok.Data;
-import org.apache.tubemq.manager.service.tube.TubeHttpTopicInfoList.TopicInfoList.TopicInfo;
-
-/**
- * json class for topic info list from master http service.
- */
-@Data
-public class TubeHttpTopicInfoList {
-    private boolean result;
-
-    private String errMsg;
-
-    private int errCode;
-
-    private List<TopicInfoList> data;
-
-    @Data
-    public static class TopicInfoList {
-
-        @Data
-        public static class TopicInfo {
-
-            @Data
-            public static class RunInfo {
-                private boolean acceptPublish;
-                private boolean acceptSubscribe;
-                private int numPartitions;
-                private int numTopicStores;
-                private String brokerManageStatus;
-            }
-
-
-            private String topicName;
-            private int topicStatusId;
-            private int brokerId;
-            private String brokerIp;
-            private int brokerPort;
-            private int numPartitions;
-            private int unflushThreshold;
-            private int unflushInterval;
-            private int unFlushDataHold;
-            private String deleteWhen;
-            private String deletePolicy;
-            private boolean acceptPublish;
-            private boolean acceptSubscribe;
-            private int numTopicStores;
-            private int memCacheMsgSizeInMB;
-            private int memCacheFlushIntvl;
-            private int memCacheMsgCntInK;
-            private String createUser;
-            private String createDate;
-            private String modifyUser;
-            private String modifyDate;
-            private RunInfo runInfo;
-
-        }
-
-        private String topicName;
-        private List<TopicInfo> topicInfo;
-    }
-
-
-    public List<Integer> getTopicBrokerIdList() {
-        List<Integer> tmpBrokerIdList = new ArrayList<>();
-        if (data != null) {
-            for (TopicInfoList topicInfoList : data) {
-                if (topicInfoList.getTopicInfo() != null) {
-                    for (TopicInfo topicInfo : topicInfoList.getTopicInfo()) {
-                        tmpBrokerIdList.add(topicInfo.getBrokerId());
-                    }
-                }
-            }
-        }
-        return tmpBrokerIdList;
-    }
-}
diff --git a/tubemq-manager/src/main/resources/application.properties b/tubemq-manager/src/main/resources/application.properties
deleted file mode 100644
index dee51b7..0000000
--- a/tubemq-manager/src/main/resources/application.properties
+++ /dev/null
@@ -1,17 +0,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
-# <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.
-
-spring.jpa.hibernate.ddl-auto=update
-# configuration for manager
diff --git a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestBusinessController.java b/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestBusinessController.java
deleted file mode 100644
index 9a497cf..0000000
--- a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestBusinessController.java
+++ /dev/null
@@ -1,99 +0,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
- * <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.
- */
-package org.apache.tubemq.manager.controller;
-
-import java.net.URI;
-import java.util.Objects;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.tubemq.manager.controller.topic.TopicController;
-import org.apache.tubemq.manager.entry.TopicEntry;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
-import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.ResponseEntity;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.RequestBuilder;
-import org.springframework.test.web.servlet.setup.MockMvcBuilders;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertTrue;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
-
-@RunWith(SpringRunner.class)
-@AutoConfigureMockMvc
-@SpringBootTest(webEnvironment= WebEnvironment.RANDOM_PORT)
-@Slf4j
-public class TestBusinessController {
-
-    @Autowired
-    private TestRestTemplate client;
-
-    @LocalServerPort
-    private int randomServerPort;
-
-    private MockMvc mvc;
-
-    @Before
-    public void setUp() {
-        mvc = MockMvcBuilders.standaloneSetup(new TopicController()).build();
-    }
-
-    @Test
-    public void test404Controller() throws Exception {
-        RequestBuilder request;
-        // get request, path not exists
-        request = get("/business");
-        mvc.perform(request)
-                .andExpect(status().isNotFound());
-    }
-
-    @Test
-    public void testAddBusiness() throws Exception {
-        final String baseUrl = "http://localhost:" + randomServerPort + "/business/add";
-        URI uri = new URI(baseUrl);
-        String demoName = "test";
-        TopicEntry entry = new TopicEntry(demoName, demoName, demoName,
-                demoName, demoName, demoName);
-
-        HttpHeaders headers = new HttpHeaders();
-        HttpEntity<TopicEntry> request = new HttpEntity<>(entry, headers);
-
-        ResponseEntity<TubeResult> responseEntity =
-                client.postForEntity(uri, request, TubeResult.class);
-        assertThat(responseEntity.getStatusCode().is2xxSuccessful()).isEqualTo(true);
-    }
-
-    @Test
-    public void testControllerException() throws Exception {
-        final String baseUrl = "http://localhost:" + randomServerPort + "/business/throwException";
-        URI uri = new URI(baseUrl);
-        ResponseEntity<TubeResult> responseEntity =
-                client.getForEntity(uri, TubeResult.class);
-        assertThat(Objects.requireNonNull(responseEntity.getBody()).getErrCode()).isEqualTo(-1);
-        assertTrue(responseEntity.getBody().getErrMsg().contains("exception for test"));
-    }
-}
diff --git a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java b/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
deleted file mode 100644
index efd1cb1..0000000
--- a/tubemq-manager/src/test/java/org/apache/tubemq/manager/controller/TestClusterController.java
+++ /dev/null
@@ -1,150 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.controller;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
-import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
-
-import com.google.gson.Gson;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.tubemq.manager.controller.cluster.ClusterController;
-import org.apache.tubemq.manager.entry.NodeEntry;
-import org.apache.tubemq.manager.repository.NodeRepository;
-import org.junit.Assert;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.InjectMocks;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.boot.test.mock.mockito.MockBean;
-import org.springframework.http.MediaType;
-import org.springframework.test.context.junit4.SpringRunner;
-import org.springframework.test.web.servlet.MockMvc;
-import org.springframework.test.web.servlet.MvcResult;
-import org.springframework.test.web.servlet.RequestBuilder;
-
-@Slf4j
-@RunWith(SpringRunner.class)
-@SpringBootTest
-@AutoConfigureMockMvc
-public class TestClusterController {
-
-    private final Gson gson = new Gson();
-
-    @MockBean
-    private NodeRepository nodeRepository;
-
-    @InjectMocks
-    private ClusterController clusterController;
-
-    @Autowired
-    private MockMvc mockMvc;
-
-    private NodeEntry getNodeEntry() {
-        NodeEntry nodeEntry = new NodeEntry();
-        nodeEntry.setMaster(true);
-        nodeEntry.setIp("127.0.0.1");
-        nodeEntry.setWebPort(8080);
-        return nodeEntry;
-    }
-
-    @Test
-    public void testExceptionQuery() throws Exception {
-        NodeEntry nodeEntry = getNodeEntry();
-        when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
-                .thenReturn(nodeEntry);
-        RequestBuilder request = get(
-                "/v1/cluster/query?method=admin_query_topic_info&type=op_query");
-        MvcResult result = mockMvc.perform(request).andReturn();
-        String resultStr = result.getResponse().getContentAsString();
-        TubeResult clusterResult = gson.fromJson(resultStr, TubeResult.class);
-        Assert.assertEquals(-1, clusterResult.getErrCode());
-        Assert.assertTrue(clusterResult.getErrMsg().contains("NumberFormatException"));
-    }
-
-    @Test
-    public void testTopicQuery() throws Exception {
-        NodeEntry nodeEntry = getNodeEntry();
-        when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
-                .thenReturn(nodeEntry);
-        RequestBuilder request = get(
-                "/v1/cluster/query?method=admin_query_topic_info&type=op_query&clusterId=1");
-        MvcResult result = mockMvc.perform(request).andReturn();
-        String resultStr = result.getResponse().getContentAsString();
-        log.info("result json string is {}, response type is {}", resultStr,
-                result.getResponse().getContentType());
-    }
-
-    @Test
-    public void testBrokerQuery() throws Exception {
-        NodeEntry nodeEntry = getNodeEntry();
-        when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
-                .thenReturn(nodeEntry);
-        RequestBuilder request = get(
-                "/v1/cluster/query?method=admin_query_broker_run_status&type=op_query&clusterId=1&brokerIp=");
-        MvcResult result = mockMvc.perform(request).andReturn();
-        String resultStr = result.getResponse().getContentAsString();
-        log.info("result json string is {}, response type is {}", resultStr,
-                result.getResponse().getContentType());
-    }
-
-    @Test
-    public void testTopicAndGroupQuery() throws Exception {
-        NodeEntry nodeEntry = getNodeEntry();
-        when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
-                .thenReturn(nodeEntry);
-        RequestBuilder request = get(
-                "/v1/cluster/query?method=admin_query_sub_info&type=op_query&clusterId=1&topicName=test&groupName=test");
-        MvcResult result = mockMvc.perform(request).andReturn();
-        String resultStr = result.getResponse().getContentAsString();
-        log.info("result json string is {}, response type is {}", resultStr,
-                result.getResponse().getContentType());
-    }
-
-    @Test
-    public void testTopicAdd() throws Exception {
-        String jsonStr = "{\n"
-                + "  \"type\": \"op_modify\",\n"
-                + "  \"method\": \"admin_add_new_topic_record\",\n"
-                + "  \"confModAuthToken\": \"test\",\n"
-                + "  \"clusterId\": 1,\n"
-                + "  \"createUser\": \"webapi\",\n"
-                + "  \"topicName\": \"test\",\n"
-                + "  \"deleteWhen\": \"0 0 0 0 0\",\n"
-                + "  \"unflushThreshold\": 1000,\n"
-                + "  \"acceptPublish\": true,\n"
-                + "  \"numPartitions\": 3,\n"
-                + "  \"deletePolicy\": \"\",\n"
-                + "  \"unflushInterval\": 1000,\n"
-                + "  \"acceptSubscribe\": true,\n"
-                + "  \"brokerId\": 12323\n"
-                + "}\n";
-        NodeEntry nodeEntry = getNodeEntry();
-        when(nodeRepository.findNodeEntryByClusterIdIsAndMasterIsTrue(any(Integer.class)))
-                .thenReturn(nodeEntry);
-        RequestBuilder request = post("/v1/cluster/modify")
-                .contentType(MediaType.APPLICATION_JSON).content(jsonStr);
-        MvcResult result = mockMvc.perform(request).andReturn();
-        String resultStr = result.getResponse().getContentAsString();
-        log.info("result json string is {}, response type is {}", resultStr,
-                result.getResponse().getContentType());
-    }
-}
diff --git a/tubemq-manager/src/test/java/org/apache/tubemq/manager/repository/TestBusinessRepository.java b/tubemq-manager/src/test/java/org/apache/tubemq/manager/repository/TestBusinessRepository.java
deleted file mode 100644
index 7bd8c73..0000000
--- a/tubemq-manager/src/test/java/org/apache/tubemq/manager/repository/TestBusinessRepository.java
+++ /dev/null
@@ -1,67 +0,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
- * <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.
- */
-package org.apache.tubemq.manager.repository;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import org.apache.tubemq.manager.entry.TopicEntry;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
-import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@DataJpaTest
-public class TestBusinessRepository {
-    @Autowired
-    private TestEntityManager entityManager;
-
-    @Autowired
-    private TopicRepository businessRepository;
-
-    @Test
-    public void whenFindByNameThenReturnBusiness() {
-        String demoName = "alex";
-        TopicEntry businessEntry = new TopicEntry(demoName, demoName,
-                demoName, demoName, demoName, demoName);
-        entityManager.persist(businessEntry);
-        entityManager.flush();
-
-        TopicEntry businessEntry1 = businessRepository.findByBusinessName("alex");
-        assertThat(businessEntry1.getBusinessName()).isEqualTo(businessEntry.getBusinessName());
-    }
-
-    @Test
-    public void checkValidation() throws Exception {
-        String demoName = "a";
-        TopicEntry businessEntry = new TopicEntry(demoName, demoName, demoName,
-                demoName, demoName, demoName);
-        StringBuilder builder = new StringBuilder();
-
-        for (int i = 0; i < 512; i ++) {
-            builder.append("a");
-        }
-        businessEntry.setBusinessName(builder.toString());
-        try {
-            entityManager.persist(businessEntry);
-            entityManager.flush();
-        } catch (Exception ex) {
-            assertThat(ex.getMessage()).contains("size must be between");
-        }
-    }
-}
diff --git a/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpBrokerResponse.java b/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpBrokerResponse.java
deleted file mode 100644
index 2d79f69..0000000
--- a/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpBrokerResponse.java
+++ /dev/null
@@ -1,48 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service.tube;
-
-import com.google.gson.Gson;
-import lombok.extern.slf4j.Slf4j;
-import org.junit.Assert;
-import org.junit.Test;
-
-@Slf4j
-public class TestTubeHttpBrokerResponse {
-
-    private final Gson gson = new Gson();
-
-    @Test
-    public void testJsonStr() {
-        String jsonStr = "{\"code\":0,\"errMsg\":\"OK\",\"data\":"
-                + "[{\"brokerId\":136,\"brokerIp\":\"127.0.0.1\","
-                + "\"brokerPort\":8123,\"manageStatus\":\"online\","
-                + "\"runStatus\":\"notRegister\",\"subStatus\":\"processing_event\","
-                + "\"stepOp\":32,\"isConfChanged\":\"true\",\"isConfLoaded\":\"false\","
-                + "\"isBrokerOnline\":\"false\",\"brokerVersion\":\"-\","
-                + "\"acceptPublish\":\"false\",\"acceptSubscribe\":\"false\"}]}";
-        TubeHttpBrokerInfoList brokerInfoList =
-                gson.fromJson(jsonStr, TubeHttpBrokerInfoList.class);
-        Assert.assertEquals(1, brokerInfoList.getData().size());
-        Assert.assertEquals(0, brokerInfoList.getCode());
-        Assert.assertEquals("OK", brokerInfoList.getErrMsg());
-        Assert.assertTrue(brokerInfoList.getData().get(0).isConfChanged());
-        Assert.assertFalse(brokerInfoList.getData().get(0).isAcceptPublish());
-        Assert.assertFalse(brokerInfoList.getData().get(0).isBrokerOnline());
-    }
-}
diff --git a/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpTopicInfoList.java b/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpTopicInfoList.java
deleted file mode 100644
index 82a9fda..0000000
--- a/tubemq-manager/src/test/java/org/apache/tubemq/manager/service/tube/TestTubeHttpTopicInfoList.java
+++ /dev/null
@@ -1,52 +0,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
- * <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.
- */
-
-package org.apache.tubemq.manager.service.tube;
-
-import com.google.gson.Gson;
-import org.junit.Assert;
-import org.junit.Test;
-
-public class TestTubeHttpTopicInfoList {
-
-    private final Gson gson = new Gson();
-
-    @Test
-    public void testJsonStr() {
-        String jsonStr = "{\"result\":true,\"errCode\":0,\"errMsg\":\"OK\",\""
-                + "data\":[{\"topicName\":\"test1\",\"topicInfo\":[{\"topicName\":\"test1\",\""
-                + "topicStatusId\":0,\"brokerId\":152509201,\"brokerIp\":\"127.0.0.1\",\""
-                + "brokerPort\":8123,\"numPartitions\":1,\"unflushThreshold\":1000,\""
-                + "unflushInterval\":10000,\"unFlushDataHold\":1000,\"deleteWhen\":\"\",\""
-                + "deletePolicy\":\"delete,32h\",\"acceptPublish\":true,"
-                + "\"acceptSubscribe\":true,\"numTopicStores\":1,\"memCacheMsgSizeInMB\":2,\""
-                + "memCacheFlushIntvl\":20000,\"memCacheMsgCntInK\":10,"
-                + "\"createUser\":\"Alice\",\"createDate\":\"20200917122645\","
-                + "\"modifyUser\":\"Alice\",\"modifyDate\":\"20200917122645\","
-                + "\"runInfo\":{\"acceptPublish\":true,\"acceptSubscribe\":true,"
-                + "\"numPartitions\":1,\"numTopicStores\":1,"
-                + "\"brokerManageStatus\":\"online\"}}]}]}";
-        TubeHttpTopicInfoList topicInfoList = gson.fromJson(jsonStr, TubeHttpTopicInfoList.class);
-        Assert.assertTrue(topicInfoList.isResult());
-        Assert.assertEquals(0, topicInfoList.getErrCode());
-        Assert.assertEquals(1, topicInfoList.getData().size());
-        Assert.assertEquals("Alice", topicInfoList.getData().get(0)
-                .getTopicInfo().get(0).getCreateUser());
-        Assert.assertEquals("online", topicInfoList.getData().get(0)
-                .getTopicInfo().get(0).getRunInfo().getBrokerManageStatus());
-    }
-}