apiVersion: api/v1
kind: Plan
name: binlog-acceptance-test
schedule: "@daily"
failFast: false
tags:
- binlog
testbed:
  generateName: binlog-basic-testbed
  resourcePool: brie
  reclaimPolicy:
    gcStrategy:
      onFailure:
        artifact:
          monitor: true
          log: true
        reserveEnv:
          durationOnWorkingHour: "{{meta.parameters.onFailureReserveDurationOnWorkingHour}}"
        notification:
          feishu: >-
            https://open.feishu.cn/open-apis/bot/v2/hook/54a44124-87d9-4104-8f6d-176f09706ca3
      onSuccess:
        notification:
          feishu: >-
            https://open.feishu.cn/open-apis/bot/v2/hook/54a44124-87d9-4104-8f6d-176f09706ca3
  items:
  - name: downstream
    type: TIDB_CLUSTER
    spec:
      imagePullPolicy: Always
      pd:
        replicas: 1
        requests:
          cpu: 1000m
          memory: 4Gi
        limits:
          cpu: 1000m
          memory: 4Gi
        baseImage: '{{meta.parameters.pd_base_image}}'
        version: '{{meta.parameters.pd_component_version}}'
      tikv:
        replicas: 1
        requests:
          cpu: 4000m
          memory: 16Gi
        limits:
          cpu: 4000m
          memory: 16Gi
        baseImage: '{{meta.parameters.tikv_base_image}}'
        version: '{{meta.parameters.tikv_component_version}}'
      tidb:
        replicas: 1
        requests:
          cpu: 4000m
          memory: 8Gi
        limits:
          cpu: 4000m
          memory: 8Gi
        baseImage: '{{meta.parameters.tidb_base_image}}'
        version: '{{meta.parameters.tidb_component_version}}'
      version: '{{meta.parameters.base_image_version}}'
  - name: upstream
    type: TIDB_CLUSTER
    spec:
      imagePullPolicy: Always
      pd:
        replicas: 1
        requests:
          cpu: 1000m
          memory: 4Gi
        limits:
          cpu: 1000m
          memory: 4Gi
        baseImage: '{{meta.parameters.pd_base_image}}'
        version: '{{meta.parameters.pd_component_version}}'
      tikv:
        replicas: 1
        requests:
          cpu: 4000m
          memory: 16Gi
        limits:
          cpu: 4000m
          memory: 16Gi
        baseImage: '{{meta.parameters.tikv_base_image}}'
        version: '{{meta.parameters.tikv_component_version}}'
      tidb:
        replicas: 1
        requests:
          cpu: 4000m
          memory: 8Gi
        limits:
          cpu: 4000m
          memory: 8Gi
        baseImage: '{{meta.parameters.tidb_base_image}}'
        version: '{{meta.parameters.tidb_component_version}}'
      pump:
        baseImage: "{{meta.parameters.binlog_base_image}}"
        replicas: 1
        requests:
          storage: 30Gi
        config: |
          addr = "0.0.0.0:8250"
          gc = 7
          heartbeat-interval = 2
        version: '{{meta.parameters.binlog_component_version}}'
      version: '{{meta.parameters.base_image_version}}'
  - name: upstreamdrainer
    type: TIDB_DRAINER
    spec:
      clusterName: upstream
      clusterVersion: "{{meta.parameters.binlog_component_version}}"
      baseImage: "{{meta.parameters.binlog_base_image}}"
      storage: 10Gi
      initialCommitTs: "-1"
      resources:
        requests:
          cpu: 2000m
          memory: 4Gi
      config: |
        detect-interval = 10
        [syncer]
        worker-count = 16
        txn-batch = 20
        disable-dispatch = false
        ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"
        safe-mode = false
        db-type = "tidb"
        [syncer.to]
        host = "downstream-tidb"
        user = "root"
        password = ""
        port = 4000
  - name: workload
    type: WORKLOAD_NODE
    spec:
      container:
        name: sysbench
        image: "{{meta.parameters.bench_toolset_image}}"
        command:
        - tail
        - "-f"
        - /dev/null
        resources:
          requests:
            memory: 4Gi
            cpu: 4000m
  - name: mysqldownstream
    type: MYSQL_NODE
    spec:
      image: "{{meta.parameters.mysql_image}}"
      port: 3306
      env:
        MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
        MYSQL_ROOT_HOST: "%"
      resources:
        requests:
          memory: 4Gi
          cpu: 4000m
          storage: 500Gi
      volumeMount:
        mountPath: "/var/lib/mysql"         # mountPath of "storage" request
  - name: mysqldrainer
    type: TIDB_DRAINER
    spec:
      clusterName: upstream
      clusterVersion: "{{meta.parameters.binlog_component_version}}"
      baseImage: "{{meta.parameters.binlog_base_image}}"
      storage: 10Gi
      initialCommitTs: "-1"
      resources:
        requests:
          cpu: "2000m"
          memory: "4Gi"
      config: |
        detect-interval = 10
        [syncer]
        worker-count = 16
        txn-batch = 20
        disable-dispatch = false
        ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"
        safe-mode = false
        db-type = "mysql"
        [syncer.to]
        host = "mysqldownstream"
        user = "root"
        password = ""
        port = 3306
  - name: lightning
    type: TIDB_LIGHTNING
    spec:
      image: "{{meta.parameters.lightning_image}}"
      resources:
        requests:
          cpu: 8000m
          memory: 16Gi
          storage: 500Gi
      volumeMount:
        mountPath: "/tmp/sorted-kv-dir"
      storageClassName: fast-disks
      artifact:
        artifactPaths:
        - /tmp/lightning.log*
steps:
- name: binlog-basic
  caseName: binlog_basic
  arguments:
  - name: upstream
    value: "{{testbed.upstream}}"
  - name: downstream
    value: "{{testbed.downstream}}"
  - name: upstreamdrainer
    value: "{{testbed.upstreamdrainer}}"
  - name: workload
    value: "{{testbed.workload}}"
- name: binlog-clustered-index
  caseName: binlog_clustered_index
  arguments:
  - name: upstream
    value: "{{testbed.upstream}}"
  - name: downstream
    value: "{{testbed.downstream}}"
  - name: upstreamdrainer
    value: "{{testbed.upstreamdrainer}}"
  - name: workload
    value: "{{testbed.workload}}"
  - name: lightning
    value: "{{testbed.lightning}}"
- name: binlog-mysql-basic
  caseName: binlog_mysql_basic
  arguments:
  - name: upstream
    value: "{{testbed.upstream}}"
  - name: downstream
    value: "{{testbed.mysqldownstream}}"
  - name: upstreamdrainer
    value: "{{testbed.mysqldrainer}}"
  - name: workload
    value: "{{testbed.workload}}"
- name: binlog-ddl-compatibility
  caseName: binlog_ddl_compatibility
  arguments:
  - name: upstream
    value: "{{testbed.upstream}}"
  - name: downstream
    value: "{{testbed.downstream}}"
  - name: upstreamdrainer
    value: "{{testbed.upstreamdrainer}}"
  - name: workload
    value: "{{testbed.workload}}"
