apiVersion: api/v1
kind: Plan
name: endless-upgrade-operator
#type: ONE_SHOT
schedule: "@daily"
tags: [upgrade]
testbed:
  generateName: testbed-upgrade-
  #resourcePool: sql-coverage
  reclaimPolicy:
    gcStrategy:
      onFailure:
        artifact:
          monitor: true
          log: true
        reserveEnv:
          durationOnWorkingHour: '{{meta.parameters.onFailureReserveDurationOnWorkingHour}}'
  items:
    - name: tc
      type: TIDB_CLUSTER
      spec:
        pd:
          replicas: 3
          baseImage: '{{meta.parameters.pd_base_image}}'
          version: '{{meta.parameters.upgrade_src_verion}}'
          requests:
            cpu: 1000m
            memory: 2Gi
          artifact:
            artifactPaths: # 测试结束后会打包的目录, 每个目录一个 tarball 传到 minio
              - /var/lib/pd/log/
        tidb:
          replicas: 2
          baseImage: '{{meta.parameters.tidb_base_image}}'
          version: '{{meta.parameters.upgrade_src_verion}}'
          artifact:
            artifactPaths: # 测试结束后会打包的目录, 每个目录一个 tarball 传到 minio
              - /var/lib/tidb/log/
          requests:
            cpu: 2000m
            memory: 3Gi
          config: |
            [security]
            auto-tls=true
            new_collations_enabled_on_first_bootstrap=true
        tikv:
          replicas: 4
          baseImage: '{{meta.parameters.tikv_base_image}}'
          version: '{{meta.parameters.upgrade_src_verion}}'
          requests:
            cpu: 1000m
            memory: 2Gi
        tiflash:
          replicas: 2
          baseImage: '{{meta.parameters.tiflash_base_image}}'
          version: '{{meta.parameters.upgrade_src_verion}}'
          artifact:
            artifactPaths: # 测试结束后会打包的目录, 每个目录一个 tarball 传到 minio
              - /var/lib/tiflash/log/
          requests:
            cpu: 2000m
            memory: 3Gi
          config: |
            ## 数据块元信息的内存 cache 大小限制，通常不需要修改
                      mark_cache_size = 5368709120
            ## 数据块 min-max 索引的内存 cache 大小限制，通常不需要修改
                      minmax_index_cache_size = 5368709120
                      [profiles.default]
            ## 存储引擎的 segment 分裂是否使用逻辑分裂。使用逻辑分裂可以减小写放大，提高写入速度，但是会造成一定程度的硬盘空间回收不及时。默认为 true
            ## 单次 coprocessor 查询过程中，对中间数据的内存限制，单位为 byte，默认为 0，表示不限制
                      max_memory_usage = 0
            ## 所有查询过程中，对中间数据的内存限制，单位为 byte，默认为 0，表示不限制
                      max_memory_usage_for_all_queries = 0
        ticdc:
          replicas: 1
          baseImage: '{{meta.parameters.ticdc_base_image}}'
          version: '{{meta.parameters.upgrade_src_verion}}'
          requests:
            cpu: 1000m
            memory: 2Gi
        version: '{{meta.parameters.upgrade_src_verion}}'

    - name: downstream
      type: TIDB_CLUSTER
      spec:
        pd:
          replicas: 1
          baseImage: '{{meta.parameters.pd_base_image}}'
          version: '{{meta.parameters.base_image_version}}'
          requests:
            cpu: 1000m
            memory: 2Gi
        tidb:
          replicas: 1
          baseImage: '{{meta.parameters.tidb_base_image}}'
          version: '{{meta.parameters.base_image_version}}'
          requests:
            cpu: 1000m
            memory: 2Gi
          config: |
            [security]
            auto-tls=true
        tikv:
          replicas: 1
          baseImage: '{{meta.parameters.tikv_base_image}}'
          version: '{{meta.parameters.base_image_version}}'
          requests:
            cpu: 2000m
            memory: 2Gi
        version: '{{meta.parameters.base_image_version}}'
    - name: wkload
      type: WORKLOAD_NODE
      spec:
        container:
          name: workload
          image: '{{meta.parameters.tiup_upgrade_workload_image}}'
          command:
            - tail
            - "-f"
            - "/dev/null"
          resources:
            requests:
              memory: 2Gi
              cpu: 1000m
    - name: mysql
      type: MYSQL_NODE
      spec:
        image: '{{meta.parameters.mysql_image}}'
        port: 3306
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
          MYSQL_ROOT_HOST: "%"
        resources:
          requests:
            memory: 2Gi
            cpu: 1000m
            storage: 100Gi

pipeline:
  - after: []
    arguments:
    - name: tc
      value: "{{testbed.tc}}"
    - name: wkload
      value: "{{testbed.wkload}}"
    - name: mysql
      value: "{{testbed.mysql}}"
    - name: downstream
      value: "{{testbed.downstream}}"
    caseName: upgrade-precheck-wkload
    name: upgrade-precheck-wkload

  - after:
    - upgrade-precheck-wkload.Succeeded || upgrade-precheck-wkload.Failed
    arguments:
    - name: tc
      value: "{{testbed.tc}}"
    - name: target_version
      value: "{{meta.parameters.base_image_version}}"
    - name: downstream
      value: "{{testbed.downstream}}"
    name: upgrade-with-operator
    caseName: upgrade-with-operator

  - after:
    - upgrade-with-operator.Succeeded
    name: upgrade-postcheck-wkload
    caseName: upgrade-postcheck-wkload
    arguments:
    - name: tc
      value: "{{testbed.tc}}"
    - name: wkload
      value: "{{testbed.wkload}}"
    - name: mysql
      value: "{{testbed.mysql}}"
    - name: downstream
      value: "{{testbed.downstream}}"

  - after:
    - upgrade-postcheck-wkload.Succeeded || upgrade-postcheck-wkload.Failed
    name: upgrade-postcheck-tiflash
    caseName: upgrade-postcheck-tiflash
    arguments:
    - name: tc
      value: "{{testbed.tc}}"
    - name: duration
      value: "20m"
    - name: replicas
      value: "2"
    - name: downstream
      value: "{{testbed.downstream}}"
    - name: prepare_rows
      value: "10000"
    - name: do_upgrade
      value: "false"
failFast: false