未验证 提交 0961c046 编写于 作者: D del-zhenwu 提交者: GitHub

add cluster test (#4426)

* add cluster test
Signed-off-by: Nzw <zw@milvus.io>

* add cluster test
Signed-off-by: Nzw <zw@milvus.io>

* update helm install
Signed-off-by: Nzw <zw@milvus.io>

* update log name
Signed-off-by: Nzw <zw@milvus.io>

* remove cluster helm release
Signed-off-by: Nzw <zw@milvus.io>

* add delay in nginx
Signed-off-by: Nzw <zw@milvus.io>

* add delay in nginx
Signed-off-by: Nzw <zw@milvus.io>

* fix delay in nginx
Signed-off-by: Nzw <zw@milvus.io>

* remove resources limits
Signed-off-by: Nzw <zw@milvus.io>

* remove resources limits
Signed-off-by: Nzw <zw@milvus.io>

* fix case
Signed-off-by: Nzw <zw@milvus.io>

* remove collections after test executed
Signed-off-by: Nzw <zw@milvus.io>
Co-authored-by: Nzw <zw@milvus.io>
上级 debc22a6
retry(3) {
def helmResult = sh script: "helm status -n milvus ${env.CLUSTER_HELM_RELEASE_NAME}", returnStatus: true
if (!helmResult) {
sh "helm uninstall -n milvus ${env.CLUSTER_HELM_RELEASE_NAME}"
}
}
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
if (isTimeTriggeredBuild || "${params.IS_MANUAL_TRIGGER_TYPE}" == "True") {
retry(3) {
def helmResult = sh script: "helm status -n milvus ${env.SHARDS_HELM_RELEASE_NAME}", returnStatus: true
if (!helmResult) {
sh "helm uninstall -n milvus ${env.SHARDS_HELM_RELEASE_NAME}"
}
}
}
timeout(time: 150, unit: 'MINUTES') {
sh "mkdir -p ${env.DEV_TEST_ARTIFACTS}"
def helmCMD = "helm install --wait --timeout 300s \
--set image.repository=registry.zilliz.com/milvus/engine \
--set image.tag=${DOCKER_VERSION} \
--set image.pullPolicy=Always \
--set service.type=ClusterIP \
-f ci/filebeat/values.yaml \
-f test.yaml \
--namespace milvus"
def helmStatusCMD = "helm get manifest --namespace milvus ${env.CLUSTER_HELM_RELEASE_NAME} | kubectl describe -n milvus -f - && \
kubectl logs --namespace milvus -l \"app.kubernetes.io/name=milvus,app.kubernetes.io/instance=${env.CLUSTER_HELM_RELEASE_NAME},component=writable\" -c milvus && \
kubectl logs --namespace milvus -l \"app.kubernetes.io/name=milvus,app.kubernetes.io/instance=${env.CLUSTER_HELM_RELEASE_NAME},component=nginx\" && \
helm status -n milvus ${env.CLUSTER_HELM_RELEASE_NAME}"
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
dir ('milvus-helm') {
sh "helm version"
sh "helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts"
sh "helm repo update"
def MILVUS_HELM_URL = "https://github.com/milvus-io/milvus-helm.git"
def REF_SPEC = "+refs/heads/${env.HELM_BRANCH}:refs/remotes/origin/${env.HELM_BRANCH}"
checkout([$class: 'GitSCM', branches: [[name: "${env.HELM_BRANCH}"]], userRemoteConfigs: [[url: "${MILVUS_HELM_URL}", name: 'origin', refspec: "${REF_SPEC}"]]])
retry(3) {
// test cluster without read nodes
try {
dir ('charts/milvus') {
writeFile file: 'test.yaml', text: "extraConfiguration:\n engine:\n build_index_threshold: 1000\n max_partition_num: 256"
def helmCMD_mysql = "${helmCMD}" + " --set cluster.enabled=true --set readonly.replicas=1 --set nginx.image.repository=threaddao/nginx-delay --set nginx.image.tag=v1 --set nginx.delay.enabled=true --set nginx.delay.time=1000ms --set persistence.enabled=true -f ci/db_backend/mysql_${BINARY_VERSION}_values.yaml ${env.CLUSTER_HELM_RELEASE_NAME} ."
sh "${helmCMD_mysql}"
}
} catch (exc) {
sh script: helmStatusCMD, returnStatus: true
sh script: "helm uninstall -n milvus ${env.CLUSTER_HELM_RELEASE_NAME} && sleep 1m", returnStatus: true
throw exc
}
}
}
dir ("tests/milvus_python_test") {
sh 'python3 -m pip install -r requirements.txt'
def TESTCASE_LEVEL = 1
if (isTimeTriggeredBuild) {
TESTCASE_LEVEL = 2
}
def pytestCMD_mysql = "pytest . \
--level=${TESTCASE_LEVEL} \
-n 4 \
--alluredir=\"test_out/dev/cluster/mysql\" \
--ip ${env.CLUSTER_HELM_RELEASE_NAME}.milvus.svc.cluster.local \
--service ${env.CLUSTER_HELM_RELEASE_NAME} >> \
${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_mysql_cluster_dev_test.log"
sh "${pytestCMD_mysql}"
}
}
def isTimeTriggeredBuild = currentBuild.getBuildCauses('hudson.triggers.TimerTrigger$TimerTriggerCause').size() != 0
if (isTimeTriggeredBuild || "${params.IS_MANUAL_TRIGGER_TYPE}" == "True") {
timeout(time: 180, unit: 'MINUTES') {
sh "mkdir -p ${env.DEV_TEST_ARTIFACTS}"
dir ('milvus-helm') {
sh 'helm version'
sh 'helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts'
sh 'helm repo update'
checkout([$class: 'GitSCM', branches: [[name: "${env.HELM_BRANCH}"]], userRemoteConfigs: [[url: "https://github.com/milvus-io/milvus-helm.git", name: 'origin', refspec: "+refs/heads/${env.HELM_BRANCH}:refs/remotes/origin/${env.HELM_BRANCH}"]]])
// sh 'helm dep update'
retry(3) {
try {
dir ('charts/milvus') {
if ("${BINARY_VERSION}" == "CPU") {
sh "helm install --wait --timeout 300s --set cluster.enabled=true --set persistence.enabled=true --set image.repository=registry.zilliz.com/milvus/engine --set mishards.image.tag=test --set mishards.image.pullPolicy=Always --set image.tag=${DOCKER_VERSION} --set image.pullPolicy=Always --set service.type=ClusterIP --set image.resources.requests.memory=8Gi --set image.resources.requests.cpu=2.0 --set image.resources.limits.memory=12Gi --set image.resources.limits.cpu=4.0 -f ci/db_backend/mysql_${BINARY_VERSION}_values.yaml --namespace milvus ${env.SHARDS_HELM_RELEASE_NAME} ."
} else {
sh "helm install --wait --timeout 300s --set cluster.enabled=true --set persistence.enabled=true --set image.repository=registry.zilliz.com/milvus/engine --set mishards.image.tag=test --set mishards.image.pullPolicy=Always --set gpu.enabled=true --set readonly.gpu.enabled=true --set image.tag=${DOCKER_VERSION} --set image.pullPolicy=Always --set service.type=ClusterIP -f ci/db_backend/mysql_${BINARY_VERSION}_values.yaml --namespace milvus ${env.SHARDS_HELM_RELEASE_NAME} ."
}
}
} catch (exc) {
def helmStatusCMD = "helm get manifest --namespace milvus ${env.SHARDS_HELM_RELEASE_NAME} | kubectl describe -n milvus -f - && \
kubectl logs --namespace milvus -l \"app.kubernetes.io/name=milvus,app.kubernetes.io/instance=${env.SHARDS_HELM_RELEASE_NAME},component=writable\" -c milvus && \
kubectl logs --namespace milvus -l \"app.kubernetes.io/name=milvus,app.kubernetes.io/instance=${env.SHARDS_HELM_RELEASE_NAME},component=readonly\" -c milvus && \
kubectl logs --namespace milvus -l \"app.kubernetes.io/name=milvus,app.kubernetes.io/instance=${env.SHARDS_HELM_RELEASE_NAME},component=mishards\" && \
helm status -n milvus ${env.SHARDS_HELM_RELEASE_NAME}"
sh script: helmStatusCMD, returnStatus: true
sh script: "helm uninstall -n milvus ${env.SHARDS_HELM_RELEASE_NAME} && sleep 1m", returnStatus: true
throw exc
}
}
}
dir ("tests/milvus_python_test") {
sh 'python3 -m pip install -r requirements.txt'
sh "pytest . --level=2 --alluredir=\"test_out/dev/shards/\" --ip ${env.SHARDS_HELM_RELEASE_NAME}.milvus.svc.cluster.local >> ${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_shards_dev_test.log"
}
}
}
......@@ -56,7 +56,7 @@ timeout(time: 150, unit: 'MINUTES') {
--alluredir=\"test_out/dev/single/mysql\" \
--ip ${env.HELM_RELEASE_NAME}.milvus.svc.cluster.local \
--service ${env.HELM_RELEASE_NAME} >> \
${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_mysql_dev_test.log"
${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_mysql_single_dev_test.log"
sh "${pytestCMD_mysql}"
}
......@@ -83,7 +83,7 @@ timeout(time: 150, unit: 'MINUTES') {
--alluredir=\"test_out/dev/single/sqlite\" \
--ip ${env.HELM_RELEASE_NAME}.milvus.svc.cluster.local \
--service ${env.HELM_RELEASE_NAME} >> \
${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_sqlite_dev_test.log"
${WORKSPACE}/${env.DEV_TEST_ARTIFACTS}/milvus_${BINARY_VERSION}_sqlite_single_dev_test.log"
sh "${pytestCMD_sqlite}"
}
}
......
......@@ -28,7 +28,7 @@ pipeline {
LOWER_BUILD_TYPE = params.BUILD_TYPE.toLowerCase()
SEMVER = "${BRANCH_NAME.contains('/') ? BRANCH_NAME.substring(BRANCH_NAME.lastIndexOf('/') + 1) : BRANCH_NAME}"
PIPELINE_NAME = "milvus-ci"
HELM_BRANCH = "0.11.0"
HELM_BRANCH = "0.11.1"
}
stages {
stage ('Milvus Build and Unittest') {
......@@ -140,7 +140,7 @@ pipeline {
FROMAT_SEMVER = "${env.SEMVER}".replaceAll("\\.", "-").replaceAll("_", "-")
FORMAT_OS_NAME = "${OS_NAME}".replaceAll("\\.", "-").replaceAll("_", "-")
HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-single-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
SHARDS_HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-shards-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
CLUSTER_HELM_RELEASE_NAME = "${env.PIPELINE_NAME}-${env.FROMAT_SEMVER}-${env.BUILD_NUMBER}-cluster-${FORMAT_OS_NAME}-${BINARY_VERSION}".toLowerCase()
DEV_TEST_ARTIFACTS = "_artifacts/${FORMAT_OS_NAME}/${BINARY_VERSION}"
}
agent {
......@@ -155,7 +155,7 @@ pipeline {
steps {
container('milvus-test-env') {
MPLModule('Single Node DevTest')
// MPLModule('Mishards DevTest')
MPLModule('Cluster DevTest')
}
}
}
......@@ -165,7 +165,7 @@ pipeline {
container('milvus-test-env') {
archiveArtifacts artifacts: "${env.DEV_TEST_ARTIFACTS}/**", allowEmptyArchive: true
MPLModule('Cleanup Single Node DevTest')
// MPLModule('Cleanup Mishards DevTest')
MPLModule('Cleanup Cluster DevTest')
}
}
}
......
......@@ -238,15 +238,16 @@ class TestDeleteBase:
delete_ids = [ids[0], ids[-1]]
status = connect.delete_entity_by_id(collection, delete_ids)
assert status
connect.flush([collection])
query = copy.deepcopy(default_single_query)
query["bool"]["must"][0]["vector"][field_name]["query"] =\
[default_entity[-1]["values"][0], default_entities[-1]["values"][0], default_entities[-1]["values"][-1]]
[default_entity[-1]["values"][0], default_entities[-1]["values"][1], default_entities[-1]["values"][-1]]
res = connect.search(collection, query)
logging.getLogger().debug(res)
assert len(res) == len(query["bool"]["must"][0]["vector"][field_name]["query"])
assert res[0]._distances[0] > epsilon
assert res[1]._distances[0] < epsilon
assert res[2]._distances[0] < epsilon
assert res[2]._distances[0] > epsilon
def test_create_index_after_delete(self, connect, collection, get_simple_index):
'''
......@@ -292,14 +293,14 @@ class TestDeleteBase:
res_get = connect.get_entity_by_id(collection, delete_ids)
assert res_get[0] is None
# TODO: disable
@pytest.mark.level(2)
def test_index_insert_single_delete_get(self, connect, id_collection, get_simple_index):
def _test_index_insert_single_delete_get(self, connect, id_collection):
'''
method: create index, insert entities, and delete
method: insert entities, and delete
expected: entities deleted
'''
ids = [i for i in range(default_nb)]
connect.create_index(id_collection, field_name, get_simple_index)
for i in range(default_nb):
connect.bulk_insert(id_collection, default_entity, [ids[i]])
connect.flush([id_collection])
......
......@@ -298,9 +298,9 @@ class TestInsertBinary:
assert len(ids) == default_nb
assert connect.has_partition(binary_collection, default_tag)
# TODO
# TODO: disable
@pytest.mark.level(2)
def test_insert_binary_multi_times(self, connect, binary_collection):
def _test_insert_binary_multi_times(self, connect, binary_collection):
'''
target: test insert entities multi times and final flush
method: create collection and insert binary entity multi and final flush
......
......@@ -369,6 +369,7 @@ class TestCompactBase:
connect.delete_entity_by_id(collection_list[i], ids[:nb//2])
status = connect.compact(collection_list[i])
assert status.OK()
connect.drop_collection(collection_list[i])
@pytest.mark.timeout(COMPACT_TIMEOUT)
def test_add_entity_after_compact(self, connect, collection):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册