Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

create_tidb_serverless_task.py 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import time
  2. import click
  3. import app
  4. from configs import dify_config
  5. from core.rag.datasource.vdb.tidb_on_qdrant.tidb_service import TidbService
  6. from extensions.ext_database import db
  7. from models.dataset import TidbAuthBinding
  8. @app.celery.task(queue="dataset")
  9. def create_tidb_serverless_task():
  10. click.echo(click.style("Start create tidb serverless task.", fg="green"))
  11. if not dify_config.CREATE_TIDB_SERVICE_JOB_ENABLED:
  12. return
  13. tidb_serverless_number = dify_config.TIDB_SERVERLESS_NUMBER
  14. start_at = time.perf_counter()
  15. while True:
  16. try:
  17. # check the number of idle tidb serverless
  18. idle_tidb_serverless_number = (
  19. db.session.query(TidbAuthBinding).filter(TidbAuthBinding.active == False).count()
  20. )
  21. if idle_tidb_serverless_number >= tidb_serverless_number:
  22. break
  23. # create tidb serverless
  24. iterations_per_thread = 20
  25. create_clusters(iterations_per_thread)
  26. except Exception as e:
  27. click.echo(click.style(f"Error: {e}", fg="red"))
  28. break
  29. end_at = time.perf_counter()
  30. click.echo(click.style("Create tidb serverless task success latency: {}".format(end_at - start_at), fg="green"))
  31. def create_clusters(batch_size):
  32. try:
  33. # TODO: maybe we can set the default value for the following parameters in the config file
  34. new_clusters = TidbService.batch_create_tidb_serverless_cluster(
  35. batch_size=batch_size,
  36. project_id=dify_config.TIDB_PROJECT_ID or "",
  37. api_url=dify_config.TIDB_API_URL or "",
  38. iam_url=dify_config.TIDB_IAM_API_URL or "",
  39. public_key=dify_config.TIDB_PUBLIC_KEY or "",
  40. private_key=dify_config.TIDB_PRIVATE_KEY or "",
  41. region=dify_config.TIDB_REGION or "",
  42. )
  43. for new_cluster in new_clusters:
  44. tidb_auth_binding = TidbAuthBinding(
  45. cluster_id=new_cluster["cluster_id"],
  46. cluster_name=new_cluster["cluster_name"],
  47. account=new_cluster["account"],
  48. password=new_cluster["password"],
  49. )
  50. db.session.add(tidb_auth_binding)
  51. db.session.commit()
  52. except Exception as e:
  53. click.echo(click.style(f"Error: {e}", fg="red"))