apiVersion: api/v1
kind: Plan
name: cdc-kafka-mysql-sync-gcttl
schedule: "@daily"
tags: ["cdc"]
testbed:
  generateName: cdc-testbed-
  reclaimPolicy:
    gcStrategy:
      onFailure:
        artifact:
          monitor: true
          log: true
        reserveEnv:
          durationOnWorkingHour: "{{meta.parameters.onFailureReserveDurationOnWorkingHour}}"
        notification:
          feishu: https://open.feishu.cn/open-apis/bot/v2/hook/4f6c6406-c963-4d52-8641-cca17aa734e9
  items:
    - 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:
          storageClassName: fast-disks
          replicas: 1
          requests:
            cpu: 8000m
            memory: 16Gi
          limits:
            cpu: 8000m
            memory: 16Gi
          baseImage: '{{meta.parameters.tikv_base_image}}'
          version: '{{meta.parameters.tikv_component_version}}'
        tidb:
          replicas: 1
          config: |
            tikv_gc_life_time = 600
          requests:
            cpu: 8000m
            memory: 16Gi
          limits:
            cpu: 8000m
            memory: 16Gi
          baseImage: '{{meta.parameters.tidb_base_image}}'
          version: '{{meta.parameters.tidb_component_version}}'
        ticdc:
          replicas: 2
          requests:
            cpu: 8000m
            memory: 16Gi
          limits:
            cpu: 8000m
            memory: 16Gi
          baseImage: '{{meta.parameters.ticdc_base_image}}'
          version: '{{meta.parameters.ticdc_component_version}}'
        version: '{{meta.parameters.base_image_version}}'
    - name: downstream1
      type: MYSQL_NODE
      spec:
        storageClassName: fast-disks
        image: "{{meta.parameters.mysql_image}}"
        port: 3306
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
          MYSQL_ROOT_HOST: "%"
        resources:
          requests:
            memory: 4Gi
            cpu: 4000m
            storage: 100Gi
        volumeMount:
          mountPath: "/var/lib/mysql"         # mountPath of "storage" request
    - name: downstream2
      type: KAFKA_CLUSTER
      spec:
        zkspec:
          replicas: 1
          storageClassName: fast-disks
          image: "{{meta.parameters.zookeeper_image}}"
          resources:
            requests:
              memory: 4Gi
              cpu: 4000m
              storage: 10Gi
        kafkaspec:
          replicas: 1
          storageClassName: fast-disks
          imagePullPolicy: IfNotPresent
          image: "{{meta.parameters.kafka_server_image}}"
          command:
            - "sh"
            - "-c"
            - "kafka-server-start.sh /opt/bitnami/kafka/config/server.properties --override broker.id=${HOSTNAME##*-}\
              \ --override listeners=PLAINTEXT://:9092 --override zookeeper.connect=$ZK_CONNECT\
              \ --override log.dir=/var/lib/kafka "
          env:
            KAFKA_HEAP_OPTS: "-Xmx512M -Xms512M -XX:ParallelGCThreads=1"
            KAFKA_OPTS: "-Dlogging.level=INFO"
          resources:
            requests:
              memory: 4Gi
              cpu: 4000m
              storage: 20Gi
    - 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
          volumeMount:
            mountPath: "/var/lib/mysql"
steps:
- name: cdc-large-number-changefeed-multiple-downstream-gcttl
  caseName: cdc_large_number_changefeed_multiple_downstream_gcttl
  arguments:
  - name: upstream
    value: "{{testbed.upstream}}"
  - name: downstream1
    value: "{{testbed.downstream1}}"
  - name: downstream2
    value: "{{testbed.downstream2}}"
  - name: workload
    value: "{{testbed.workload}}"
