diff --git a/.github/workflows/expose_service_ports.sh b/.github/workflows/expose_service_ports.sh index 10d95cb736..01772ccf9f 100755 --- a/.github/workflows/expose_service_ports.sh +++ b/.github/workflows/expose_service_ports.sh @@ -10,6 +10,7 @@ yq eval '.services["elasticsearch"].ports += ["9200:9200"]' -i docker/docker-com yq eval '.services.couchbase-server.ports += ["8091-8096:8091-8096"]' -i docker/docker-compose.yaml yq eval '.services.couchbase-server.ports += ["11210:11210"]' -i docker/docker-compose.yaml yq eval '.services.tidb.ports += ["4000:4000"]' -i docker/tidb/docker-compose.yaml +yq eval '.services.oceanbase.ports += ["2881:2881"]' -i docker/docker-compose.yaml yq eval '.services.opengauss.ports += ["6600:6600"]' -i docker/docker-compose.yaml echo "Ports exposed for sandbox, weaviate, tidb, qdrant, chroma, milvus, pgvector, pgvecto-rs, elasticsearch, couchbase, opengauss" diff --git a/.github/workflows/vdb-tests.yml b/.github/workflows/vdb-tests.yml index c784817e72..4c32a1728a 100644 --- a/.github/workflows/vdb-tests.yml +++ b/.github/workflows/vdb-tests.yml @@ -51,8 +51,16 @@ jobs: - name: Expose Service Ports run: sh .github/workflows/expose_service_ports.sh + - name: Set up Vector Stores (ob) + uses: hoverkraft-tech/compose-action@v2.0.2.0.2 + with: + compose-file: | + docker/docker-compose.yaml + services: | + oceanbase + - name: Set up Vector Store (TiDB) - uses: hoverkraft-tech/compose-action@v2.0.2 + uses: hoverkraft-tech/compose-action@v2.0.2.0.2 with: compose-file: docker/tidb/docker-compose.yaml services: | @@ -60,7 +68,7 @@ jobs: tiflash - name: Set up Vector Stores (Weaviate, Qdrant, PGVector, Milvus, PgVecto-RS, Chroma, MyScale, ElasticSearch, Couchbase) - uses: hoverkraft-tech/compose-action@v2.0.2 + uses: hoverkraft-tech/compose-action@v2.0.2.0.2 with: compose-file: | docker/docker-compose.yaml @@ -76,8 +84,10 @@ jobs: chroma elasticsearch - - name: Check TiDB Ready - run: uv run --project api python api/tests/integration_tests/vdb/tidb_vector/check_tiflash_ready.py + - name: Check TiDB, Oceanbase Ready + run: | + uv run --project api python api/tests/integration_tests/vdb/tidb_vector/check_tiflash_ready.py + uv run --project api python api/tests/integration_tests/vdb/oceanbase/check_oceanbase_ready.py - name: Test Vector Stores run: uv run --project api bash dev/pytest/pytest_vdb.sh diff --git a/api/tests/integration_tests/vdb/oceanbase/check_oceanbase_ready.py b/api/tests/integration_tests/vdb/oceanbase/check_oceanbase_ready.py new file mode 100644 index 0000000000..0f8356cfd9 --- /dev/null +++ b/api/tests/integration_tests/vdb/oceanbase/check_oceanbase_ready.py @@ -0,0 +1,69 @@ +import logging +import time + +import pymysql + + +def check_ocean_ready() -> bool: + try: + connection = pymysql.connect( + host="localhost", + port=2881, + user="root", + password="difyai123456", + connect_timeout=15, + read_timeout=20, + autocommit=True, + ) + connection.ping(reconnect=True) + a = connection.query("select 1") + print(f"Oceanbase query result: {a}") + if a == 1: + return True + else: + return False + + # with connection.cursor() as cursor: + # # SELECT 1; + # # """ + # # cursor.execute(select_query) + # # result = cursor.fetchall() + # # return result is not None and len(result) > 0 + # cursor.execute("SELECT 1") + # return cursor.fetchone() is not None + + except Exception as e: + logging.exception("Error checking OceanBase readiness") + print(f"Oceanbase is not ready. Exception: {e}") + return False + finally: + if connection: + connection.close() + + +def main(): + max_attempts = 50 + retry_interval_seconds = 2 + is_oceanbase_ready = False + for attempt in range(max_attempts): + try: + is_oceanbase_ready = check_ocean_ready() + except Exception as e: + print(f"Oceanbase is not ready. Exception: {e}") + is_oceanbase_ready = False + + if is_oceanbase_ready: + break + else: + print(f"Attempt {attempt + 1} failed, retry in {retry_interval_seconds} seconds...") + time.sleep(retry_interval_seconds) + + if is_oceanbase_ready: + print("Oceanbase is ready.") + else: + print(f"Oceanbase is not ready after {max_attempts} attempting checks.") + exit(1) + + +if __name__ == "__main__": + main() diff --git a/api/tests/integration_tests/vdb/oceanbase/test_oceanbase.py b/api/tests/integration_tests/vdb/oceanbase/test_oceanbase.py index 86c1202d74..8fbbbe61b8 100644 --- a/api/tests/integration_tests/vdb/oceanbase/test_oceanbase.py +++ b/api/tests/integration_tests/vdb/oceanbase/test_oceanbase.py @@ -6,7 +6,6 @@ from core.rag.datasource.vdb.oceanbase.oceanbase_vector import ( ) from tests.integration_tests.vdb.test_vector_store import ( AbstractVectorTest, - get_example_text, setup_mock_redis, ) diff --git a/docker/docker-compose-template.yaml b/docker/docker-compose-template.yaml index c97d24ba79..35bca16f40 100644 --- a/docker/docker-compose-template.yaml +++ b/docker/docker-compose-template.yaml @@ -449,9 +449,7 @@ services: OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} OB_SERVER_IP: 127.0.0.1 - MODE: MINI - ports: - - "${OCEANBASE_VECTOR_PORT:-2881}:2881" + MODE: mini # Oracle vector database oracle: diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index eda0a40f6d..78fd18ac61 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -955,9 +955,7 @@ services: OB_TENANT_PASSWORD: ${OCEANBASE_VECTOR_PASSWORD:-difyai123456} OB_CLUSTER_NAME: ${OCEANBASE_CLUSTER_NAME:-difyai} OB_SERVER_IP: 127.0.0.1 - MODE: MINI - ports: - - "${OCEANBASE_VECTOR_PORT:-2881}:2881" + MODE: mini # Oracle vector database oracle: