This is an automated email from the ASF dual-hosted git repository.
xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/kylin5 by this push:
new 259d0ca533 KYLIN-5269 add local debug mode for kylin5 (#1982)
259d0ca533 is described below
commit 259d0ca533b0227741bb1f19158cdf44a6578d1e
Author: Tengting Xu <[email protected]>
AuthorDate: Wed Sep 21 15:35:06 2022 +0800
KYLIN-5269 add local debug mode for kylin5 (#1982)
* KYLIN-5269 add local debug mode for kylin5
* KYLIN-5266 minor fix ut
* KYLIN-5269 minor fix
* KYLIN-5269 minor fix
---
dev-support/local/README.md | 67 ++++++++++
dev-support/local/docker-compose.yml | 17 +++
dev-support/local/images/docker_container.png | Bin 0 -> 78475 bytes
dev-support/local/images/docker_resources.png | Bin 0 -> 138867 bytes
dev-support/local/images/executing_result.png | Bin 0 -> 33520 bytes
dev-support/local/images/idea_configuration.png | Bin 0 -> 126310 bytes
dev-support/local/images/kylin_ui.png | Bin 0 -> 106723 bytes
.../local/images/run_configuration_replace.png | Bin 0 -> 50906 bytes
dev-support/local/images/sparder.png | Bin 0 -> 57787 bytes
dev-support/local/local.sh | 140 +++++++++++++++++++++
.../runConfigurations/BootstrapServer_local.xml | 28 +++++
.../BootstrapServer_local_community.xml | 23 ++++
.../apache/kylin/rest/KylinPrepareEnvListener.java | 13 ++
.../apache/kylin/common/PropertiesDelegate.java | 9 +-
.../kylin/job/execution/NExecutableManager.java | 3 +-
.../job/impl/threadpool/NDefaultSchedulerTest.java | 1 +
.../test_case_data/localmeta/kylin.properties | 5 +-
.../apache/kylin/rest/service/JobServiceTest.java | 8 +-
.../tool/security/KylinPasswordResetCLITest.java | 1 +
19 files changed, 307 insertions(+), 8 deletions(-)
diff --git a/dev-support/local/README.md b/dev-support/local/README.md
new file mode 100644
index 0000000000..b28a3123d4
--- /dev/null
+++ b/dev-support/local/README.md
@@ -0,0 +1,67 @@
+### Requirements
+
+1. JDK 1.8 + version, Docker 3.8 version and above
+
+2. Executing `mvn clean install -DskipTests` manually and make sure that
compiler is ok.
+
+3. Install Docker Desktop on local machine and configure the Docker resource,
as follows is the lowest requirement:
+
+ 
+
+
+### Usage
+
+1) Executing `./dev-support/local/local.sh init` to initialize env.
+
+- Current step will download the spark to local, and if download failed will
notify user to download by the scripts.
+
+ > Note: If the spark already exists, the spark will delete and re-download
it.
+
+- Current step will load the `run configuration` automatically to IDEA.
+
+- Current step will install frontend env.
+
+*Executing Result*
+
+
+
+* Run Configuration for IDEA Debug*
+
+
+
+
+3) Executing `./dev-support/local/local.sh up` to download images and start
the container。
+
+*Container started successfully*
+
+
+
+
+4) After start IDEA Debug and access to `http://localhost:8080/` to check
Kylin started successfully.
+
+* Run into Kylin web and enjoy.
+
+
+
+* Access to `http://localhost:4041/` to check sparder started successfully.
+
+
+
+
+### Other Usage
+
+1) `./dev-support/local/local.sh stop` : Stop the running containers
+
+2) `./dev-support/local/local.sh start` : Start all stopped containers
+
+3) `./dev-support/local/local.sh ps` : List all containers
+
+4) `./dev-support/local/local.sh down` : Stop all containers and delete
them
+
+5) `./dev-support/local/local.sh interactive` : Enter in specific container
+
+### FAQ
+
+1) After executing `local.sh init` and runConfiguration has nothing change.
Then replace `type="SpringBootApplicationConfigurationType" factoryName="Spring
Boot"` to `type="Application" factoryName="Application"` in
`.idea/runconfigurations/BootstrapServer_local.xml`.
+
+
diff --git a/dev-support/local/docker-compose.yml
b/dev-support/local/docker-compose.yml
new file mode 100644
index 0000000000..7edb6d87bb
--- /dev/null
+++ b/dev-support/local/docker-compose.yml
@@ -0,0 +1,17 @@
+version: "3.8"
+
+services:
+
+ zookeeper:
+ image: zookeeper:3.6
+ container_name: zookeeper
+ hostname: zookeeper
+ networks:
+ - local
+ ports:
+ - 2181:2181
+
+
+# 2181 -> zk
+networks:
+ local:
diff --git a/dev-support/local/images/docker_container.png
b/dev-support/local/images/docker_container.png
new file mode 100644
index 0000000000..622cb664d6
Binary files /dev/null and b/dev-support/local/images/docker_container.png
differ
diff --git a/dev-support/local/images/docker_resources.png
b/dev-support/local/images/docker_resources.png
new file mode 100644
index 0000000000..a902f4aba2
Binary files /dev/null and b/dev-support/local/images/docker_resources.png
differ
diff --git a/dev-support/local/images/executing_result.png
b/dev-support/local/images/executing_result.png
new file mode 100644
index 0000000000..3ae088de5b
Binary files /dev/null and b/dev-support/local/images/executing_result.png
differ
diff --git a/dev-support/local/images/idea_configuration.png
b/dev-support/local/images/idea_configuration.png
new file mode 100644
index 0000000000..6ea6db11d3
Binary files /dev/null and b/dev-support/local/images/idea_configuration.png
differ
diff --git a/dev-support/local/images/kylin_ui.png
b/dev-support/local/images/kylin_ui.png
new file mode 100644
index 0000000000..35ebb2aa0e
Binary files /dev/null and b/dev-support/local/images/kylin_ui.png differ
diff --git a/dev-support/local/images/run_configuration_replace.png
b/dev-support/local/images/run_configuration_replace.png
new file mode 100644
index 0000000000..3470717a19
Binary files /dev/null and
b/dev-support/local/images/run_configuration_replace.png differ
diff --git a/dev-support/local/images/sparder.png
b/dev-support/local/images/sparder.png
new file mode 100644
index 0000000000..16340a6f7d
Binary files /dev/null and b/dev-support/local/images/sparder.png differ
diff --git a/dev-support/local/local.sh b/dev-support/local/local.sh
new file mode 100755
index 0000000000..5e46a9763b
--- /dev/null
+++ b/dev-support/local/local.sh
@@ -0,0 +1,140 @@
+#!/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.
+#
+
+
+set -o pipefail
+
+function help() {
+ echo "Usage: local.sh <COMMAND>"
+ echo
+ echo "Commands:"
+ echo " init Install spark and set idea run configurations and
install dependencies"
+ echo " up Download image and start the container(NOTE: current
only need zookeeper)."
+ echo " down Stop the container and remove it"
+ echo " start Start the container"
+ echo " stop Stop the container"
+ echo " sample Load sample data"
+ echo " ps List containers"
+ echo " interactive Enter the container and get interactive prompts"
+ exit 1
+}
+
+function info() {
+ echo -e "\033[32m$@\033[0m"
+}
+
+function warn() {
+ echo -e "\033[33m$@\033[0m"
+}
+
+function error() {
+ echo -e "\033[31m$@\033[0m"
+}
+
+PROJECT_DIR=$(cd -P -- "$(dirname -- "$0")/../.." && pwd -P)
+WORKDIR=$(cd -P -- "${PROJECT_DIR}/dev-support/local" && pwd -P)
+FRONTEND_DIR=$(cd -P -- "${PROJECT_DIR}/kystudio" && pwd -P)
+
+KYLIN_HOME="${PROJECT_DIR}"
+warn "# KYLIN_HOME=${KYLIN_HOME}"
+
+SPARK_HOME="${PROJECT_DIR}/build/spark"
+warn "# SPARK_HOME=${SPARK_HOME}"
+
+
+function main() {
+ if [[ $# == 0 ]]; then
+ help
+ fi
+
+ case $1 in
+ "init" )
+ if [[ ! -d "${PROJECT_DIR}/src/server/target" ]]; then
+ error "* Please execute 'mvn clean install -DskipTests' first!"
+ exit 1
+ fi
+
+ if [[ -d "${SPARK_HOME}" ]]; then
+ warn "* Spark already exists, will be deleted and re-downloaded"
+ rm -rf ${SPARK_HOME}
+ fi
+
+ info "* Downloading spark..."
+ ${PROJECT_DIR}/build/release/download-spark.sh
+ if [[ $? != 0 ]]; then
+ warn " Download spark failed, please manually execute
'download-spark.sh'"
+ fi
+
+ info "* Setting IDEA run configurations..."
+ if [[ ! -d "${PROJECT_DIR}/.idea/runConfigurations" ]]; then
+ mkdir "${PROJECT_DIR}/.idea/runConfigurations"
+ fi
+ DEFAULT_CONFIGURATION_VERSION=
+ if [[ -z ${DEFAULT_CONFIGURATION_VERSION} ]]; then
+ DEFAULT_CONFIGURATION_VERSION="community"
+ fi
+ warn "# IDEA run configuration version is
${DEFAULT_CONFIGURATION_VERSION}..."
+ eval "cat <<EOF
+
$(<"${WORKDIR}/runConfigurations/BootstrapServer_local_community.xml")
+EOF"
>"${PROJECT_DIR}/.idea/runConfigurations/BootstrapServer_local_community.xml"
+
+ info "* Build Frontend..."
+ cd ${FRONTEND_DIR}
+ npm install >>/dev/null 2>&1
+
+ info "* Init Done!"
+ ;;
+ "up" )
+ info "* Starting container..."
+ docker compose -f "${WORKDIR}/docker-compose.yml" up -d
+ if [[ $? != 0 ]]; then
+ error "* Start container failed;"
+ exit 1
+ fi
+ info "* Up Done!"
+ ;;
+ "down" )
+ docker compose -f "${WORKDIR}/docker-compose.yml" down
+ ;;
+ "start" )
+ shift
+ docker compose -f "${WORKDIR}/docker-compose.yml" start $@
+ ;;
+ "stop" )
+ shift
+ docker compose -f "${WORKDIR}/docker-compose.yml" stop $@
+ ;;
+ "ps" )
+ shift
+ docker compose -f "${WORKDIR}/docker-compose.yml" ps $@
+ ;;
+ "interactive" )
+ if [[ -z $2 ]]; then
+ help
+ fi
+ docker compose -f "${WORKDIR}/docker-compose.yml" exec $2 bash
+ ;;
+ *)
+ help
+ ;;
+ esac
+}
+
+main $@
+
diff --git a/dev-support/local/runConfigurations/BootstrapServer_local.xml
b/dev-support/local/runConfigurations/BootstrapServer_local.xml
new file mode 100644
index 0000000000..e0407591f7
--- /dev/null
+++ b/dev-support/local/runConfigurations/BootstrapServer_local.xml
@@ -0,0 +1,28 @@
+<component name="ProjectRunConfigurationManager">
+ <configuration name="BootstrapServer[Local]"
type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
+ <module name="kylin-server" />
+ <extension name="net.ashald.envfile">
+ <option name="IS_ENABLED" value="false" />
+ <option name="IS_SUBST" value="false" />
+ <option name="IS_PATH_MACRO_SUPPORTED" value="false" />
+ <option name="IS_IGNORE_MISSING_FILES" value="false" />
+ <option name="IS_ENABLE_EXPERIMENTAL_INTEGRATIONS" value="false" />
+ <ENTRIES>
+ <ENTRY IS_ENABLED="true" PARSER="runconfig" />
+ </ENTRIES>
+ </extension>
+ <option name="SPRING_BOOT_MAIN_CLASS"
value="org.apache.kylin.rest.BootstrapServer" />
+ <option name="VM_PARAMETERS" value="-Xms1g -Xmx6g -Dspark.local=true
-Dcalcite.debug=true" />
+ <option name="PROGRAM_PARAMETERS"
value="--kylin.env.zookeeper-connect-string=localhost:2181
--kylin.server.mode=all" />
+ <option name="WORKING_DIRECTORY" value="file://%MODULE_WORKING_DIR%" />
+ <option name="ALTERNATIVE_JRE_PATH" />
+ <option name="SHORTEN_COMMAND_LINE" value="NONE" />
+ <envs>
+ <env name="KYLIN_HOME" value="$PROJECT_DIR" />
+ <env name="SPARK_HOME" value="$PROJECT_DIR/build/spark" />
+ </envs>
+ <method v="2">
+ <option name="Make" enabled="true" />
+ </method>
+ </configuration>
+</component>
diff --git
a/dev-support/local/runConfigurations/BootstrapServer_local_community.xml
b/dev-support/local/runConfigurations/BootstrapServer_local_community.xml
new file mode 100644
index 0000000000..ea711f31be
--- /dev/null
+++ b/dev-support/local/runConfigurations/BootstrapServer_local_community.xml
@@ -0,0 +1,23 @@
+<component name="ProjectRunConfigurationManager">
+ <configuration name="BootstrapServer[Local]" type="Application"
factoryName="Application">
+ <module name="kylin-server" />
+ <extension name="coverage">
+ <pattern>
+ <option name="PATTERN" value="org.apache.kylin.rest.*" />
+ <option name="ENABLED" value="true" />
+ </pattern>
+ </extension>
+ <option name="INCLUDE_PROVIDED_SCOPE" value="true" />
+ <option name="MAIN_CLASS_NAME"
value="org.apache.kylin.rest.BootstrapServer" />
+ <option name="VM_PARAMETERS" value="-Xms1g -Xmx6g -Dspark.local=true
-Dcalcite.debug=true" />
+ <option name="PROGRAM_PARAMETERS"
value="--kylin.env.zookeeper-connect-string=localhost:2181
--kylin.server.mode=all" />
+ <option name="WORKING_DIRECTORY" value="file://%MODULE_WORKING_DIR%" />
+ <envs>
+ <env name="KYLIN_HOME" value="$PROJECT_DIR" />
+ <env name="SPARK_HOME" value="$PROJECT_DIR/build/spark" />
+ </envs>
+ <method v="2">
+ <option name="Make" enabled="true" />
+ </method>
+ </configuration>
+</component>
diff --git
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
index 0a30035b81..06bc583e13 100644
---
a/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
+++
b/src/common-service/src/main/java/org/apache/kylin/rest/KylinPrepareEnvListener.java
@@ -18,6 +18,9 @@
package org.apache.kylin.rest;
import java.io.File;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
import org.apache.commons.lang.StringUtils;
import org.apache.kylin.common.KylinConfig;
@@ -25,6 +28,7 @@ import org.apache.kylin.common.util.ClassUtil;
import org.apache.kylin.common.util.TimeZoneUtils;
import org.apache.kylin.common.util.TempMetadataBuilder;
import org.apache.kylin.common.util.Unsafe;
+import org.apache.kylin.source.jdbc.H2Database;
import org.apache.kylin.tool.kerberos.KerberosLoginTask;
import org.springframework.boot.SpringApplication;
import
org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
@@ -130,5 +134,14 @@ public class KylinPrepareEnvListener implements
EnvironmentPostProcessor, Ordere
Unsafe.setProperty("kylin.query.pushdown.jdbc.driver",
"org.h2.Driver");
Unsafe.setProperty("kylin.query.pushdown.jdbc.username", "sa");
Unsafe.setProperty("kylin.query.pushdown.jdbc.password", "");
+
+ // Load H2 Tables (inner join) for pushdown to rdbms in local debug
mode
+ try {
+ Connection h2Connection =
DriverManager.getConnection("jdbc:h2:mem:db_default;DB_CLOSE_DELAY=-1", "sa",
"");
+ H2Database h2DB = new H2Database(h2Connection,
KylinConfig.getInstanceFromEnv(), "default");
+ h2DB.loadAllTables();
+ } catch (SQLException ex) {
+ log.error(ex.getMessage(), ex);
+ }
}
}
diff --git
a/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
b/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
index 671a20d0b1..fd24fbd98b 100644
---
a/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
+++
b/src/core-common/src/main/java/org/apache/kylin/common/PropertiesDelegate.java
@@ -96,7 +96,14 @@ public class PropertiesDelegate extends Properties {
private ConcurrentMap<Object, Object> getAllProperties() {
// When KylinExternalConfigLoader is enabled, properties is static
- if (configLoader == null ||
configLoader.getClass().equals(KylinExternalConfigLoader.class)) {
+ if (configLoader == null ||
configLoader.getClass().equals(KylinExternalConfigLoader.class)
+ ||
configLoader.getClass().getSimpleName().equals("TestExternalConfigLoader")) {
+ /**
+ * Return properties directly
+ * 1. if configloader is null
+ * 2. if configloadder is KylinExternalConfigLoader.class
+ * 3. if running UT
+ */
return properties;
} else if
(configLoader.getClass().equals(NacosExternalConfigLoader.class)) {
// When NacosExternalConfigLoader enabled, fetch config entries
from remote for each call
diff --git
a/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
b/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
index 40cf03d671..206851cca1 100644
---
a/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
+++
b/src/core-job/src/main/java/org/apache/kylin/job/execution/NExecutableManager.java
@@ -205,11 +205,12 @@ public class NExecutableManager {
if (KylinConfig.getInstanceFromEnv().isUTEnv()) {
EventBusFactory.getInstance().postAsync(new
JobReadyNotifier(project));
EventBusFactory.getInstance().postAsync(new
JobAddedNotifier(project, jobType));
- } else
+ } else {
UnitOfWork.get().doAfterUnit(() -> {
EventBusFactory.getInstance().postAsync(new
JobReadyNotifier(project));
EventBusFactory.getInstance().postAsync(new
JobAddedNotifier(project, jobType));
});
+ }
}
private void addJobOutput(ExecutablePO executable) {
diff --git
a/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
b/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
index e934b98505..6faaf5d379 100644
---
a/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
+++
b/src/core-job/src/test/java/org/apache/kylin/job/impl/threadpool/NDefaultSchedulerTest.java
@@ -1953,6 +1953,7 @@ public class NDefaultSchedulerTest extends
BaseSchedulerTest {
}
@Test
+ @Ignore("TODO: move it")
public void testStorageQuotaLimitReached() {
try {
// case READY
diff --git a/src/examples/test_case_data/localmeta/kylin.properties
b/src/examples/test_case_data/localmeta/kylin.properties
index 762d85c875..a8e324a447 100755
--- a/src/examples/test_case_data/localmeta/kylin.properties
+++ b/src/examples/test_case_data/localmeta/kylin.properties
@@ -146,7 +146,7 @@
kylin.storage.columnar.spark-conf.spark.sql.warehouse.dir=${kylin.env.hdfs-worki
kylin.storage.columnar.spark-conf.spark.hadoop.javax.jdo.option.ConnectionURL=jdbc:derby:memory:db;create=true
kylin.engine.spark-conf.spark.master=local[8]
-kylin.metadata.random-admin-password.enabled=true
+kylin.metadata.random-admin-password.enabled=false
kylin.monitor.enabled=false
kylin.engine.spark-conf.spark.driver.cores=2
@@ -156,7 +156,7 @@ kylin.engine.spark-conf.spark.executor.cores=2
kylin.engine.spark-conf.spark.executor.instances=1
kylin.engine.spark-conf.spark.executor.memory=512m
kylin.engine.spark-conf.spark.executor.memoryOverhead=512m
-
+kylin.engine.spark-conf.spark.sql.hive.metastore.jars=../../build/spark/hive_1_2_2/*
kylin.storage.columnar.spark-conf.spark.driver.cores=1
kylin.storage.columnar.spark-conf.spark.driver.memory=512m
@@ -165,3 +165,4 @@ kylin.storage.columnar.spark-conf.spark.executor.cores=1
kylin.storage.columnar.spark-conf.spark.executor.instances=1
kylin.storage.columnar.spark-conf.spark.executor.memory=512m
kylin.storage.columnar.spark-conf.spark.executor.memoryOverhead=512m
+kylin.storage.columnar.spark-conf.spark.sql.hive.metastore.jars=../../build/spark/hive_1_2_2/*
diff --git
a/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
b/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
index abd26300ce..4edc0075d5 100644
---
a/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
+++
b/src/job-service/src/test/java/org/apache/kylin/rest/service/JobServiceTest.java
@@ -313,16 +313,16 @@ public class JobServiceTest extends
NLocalFileMetadataTestCase {
Mockito.when(executableDao.getJobs(Mockito.anyLong(),
Mockito.anyLong())).thenReturn(mockJobs);
{
List<String> jobNames = Lists.newArrayList();
- JobFilter jobFilter = new JobFilter(Lists.newArrayList(),
jobNames, 0, "", "", "default", "total_duration",
+ JobFilter jobFilter = new JobFilter(Lists.newArrayList(),
jobNames, 0, "", "", "default", "duration",
true);
List<ExecutableResponse> jobs = jobService.listJobs(jobFilter);
- val totalDurationArrays =
jobs.stream().map(ExecutableResponse::getTotalDuration)
+ val durationArrays =
jobs.stream().map(ExecutableResponse::getTotalDuration)
.collect(Collectors.toList());
- List<Long> copyDurationList = new ArrayList<>(totalDurationArrays);
+ List<Long> copyDurationList = new ArrayList<>(durationArrays);
copyDurationList.sort(Collections.reverseOrder());
Assert.assertEquals(3, copyDurationList.size());
- Assert.assertEquals(totalDurationArrays, copyDurationList);
+ Assert.assertEquals(durationArrays, copyDurationList);
}
for (int i = 0; i < 3; i++) {
diff --git
a/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
b/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
index 6aaf5a5e65..e8ca0ae812 100644
---
a/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
+++
b/src/tool/src/test/java/org/apache/kylin/tool/security/KylinPasswordResetCLITest.java
@@ -65,6 +65,7 @@ public class KylinPasswordResetCLITest extends
LogOutputTestCase {
@Test
public void testResetAdminPassword() throws Exception {
+ overwriteSystemProp("kylin.metadata.random-admin-password.enabled",
"true");
val pwdEncoder = new BCryptPasswordEncoder();
overwriteSystemProp("kylin.security.user-password-encoder",
pwdEncoder.getClass().getName());
val user = new ManagedUser("ADMIN", "KYLIN", true,
Constant.ROLE_ADMIN, Constant.GROUP_ALL_USERS);