Mengotomatiskan percobaan ulang tugas

Halaman ini menjelaskan cara mencoba ulang tugas secara otomatis setelah semua atau beberapa kegagalan.

Tugas Batch gagal jika setidaknya salah satu tugasnya gagal, yang dapat terjadi karena berbagai alasan. Secara default, setiap tugas dalam tugas hanya berjalan sekali; jika tugas gagal, tugas tidak akan dicoba lagi. Namun, beberapa masalah yang menyebabkan tugas gagal dapat dengan mudah diselesaikan hanya dengan mencoba kembali tugas tersebut. Dalam kasus ini, mengonfigurasi tugas untuk mencoba kembali tugas secara otomatis dapat sangat membantu mengurangi hambatan pemecahan masalah dan waktu berjalannya tugas secara keseluruhan.

Percobaan ulang otomatis sangat cocok untuk tugas-tugas yang dikaitkan secara longgar (independen) dan dapat membantu mengatasi berbagai masalah. Misalnya, percobaan ulang tugas otomatis dapat menyelesaikan masalah yang sensitif terhadap waktu seperti berikut:

Anda dapat mengonfigurasi percobaan ulang tugas otomatis untuk setiap tugas saat membuat tugas. Secara khusus, untuk setiap tugas, Anda dapat menggunakan salah satu opsi konfigurasi berikut:

  • Secara default, setiap tugas tidak dicoba lagi jika gagal.
  • Coba lagi tugas untuk semua kegagalan: Anda dapat mengonfigurasi waktu maksimum untuk mencoba kembali tugas yang gagal secara otomatis. Anda dapat menentukan antara 0 (default) dan 10 percobaan ulang.
  • Mencoba ulang tugas untuk beberapa kegagalan: Anda dapat mengonfigurasi tindakan tugas yang berbeda—percobaan ulang otomatis atau gagal tanpa percobaan ulang—untuk kegagalan tertentu. Tindakan yang berlawanan akan dilakukan untuk semua kegagalan yang tidak ditentukan. Kegagalan tertentu masing-masing dapat diidentifikasi melalui kode keluar yang ditentukan oleh aplikasi atau Batch Anda.

Sebelum memulai

Coba lagi tugas untuk semua kegagalan

Anda dapat menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount) untuk tugas yang gagal pada tugas menggunakan gcloud CLI atau Batch API.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas dan kolom maxRetryCount.

    Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat file JSON dengan konten berikut:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ],
            
            "maxRetryCount": MAX_RETRY_COUNT
            
          },
          "taskCount": 3
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ganti MAX_RETRY_COUNT dengan jumlah percobaan ulang maksimum untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba lagi tugas apa pun.

  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama pekerjaan.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menentukan kolom maxRetryCount.

Misalnya, untuk membuat tugas skrip dasar yang menentukan percobaan ulang maksimum untuk tugas yang gagal, buat permintaan berikut:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ],
        
        "maxRetryCount": MAX_RETRY_COUNT
        
      },
      "taskCount": 3
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ganti kode berikut:

  • PROJECT_ID: project ID project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama pekerjaan.

  • MAX_RETRY_COUNT: Jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba lagi tugas apa pun.

Coba lagi tugas untuk beberapa kegagalan

Anda dapat menentukan cara tugas menangani berbagai kegagalan tugas menggunakan kebijakan siklus proses (kolom lifecyclePolicies[]).

Kebijakan siklus proses terdiri dari tindakan (kolom action), kondisi tindakan (kolom actionCondition), dan kode keluar (kolom exitCodes[]). Tindakan yang ditentukan diambil setiap kali kondisi tindakan—kode keluar tertentu—terjadi. Anda dapat menentukan salah satu tindakan berikut:

  • RETRY_TASK: mencoba ulang tugas yang gagal dengan kode keluar yang ditentukan di kolom exitCodes[]. Tugas yang gagal dengan exit code yang tidak ditentukan tidak akan dicoba ulang.
  • FAIL_TASK: jangan mencoba lagi tugas yang gagal dengan kode keluar yang ditentukan di kolom exitCodes[]. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan dicoba ulang.

Secara khusus, tugas apa pun yang gagal dengan exit code yang tidak ditentukan akan mengambil tindakan yang berlawanan—beberapa exit code dicoba ulang, dan beberapa lainnya gagal. Dengan demikian, agar kebijakan siklus proses berfungsi seperti yang diharapkan, Anda juga perlu menentukan jumlah maksimum percobaan ulang otomatis (kolom maxRetryCount) agar tugas dapat otomatis mencoba kembali tugas yang gagal minimal sekali.

Setiap kode keluar mewakili kegagalan tertentu yang ditentukan oleh aplikasi Anda atau Batch. Kode keluar dari 50001 hingga 59999 dicadangkan dan ditentukan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.

Anda dapat menentukan tugas untuk mencoba ulang atau menggagalkan tugas setelah kegagalan tertentu menggunakan gcloud CLI atau Batch API.

gcloud

  1. Buat file JSON yang menentukan detail konfigurasi tugas, kolom maxRetryCount, dan subkolom lifecyclePolicies[].

    Untuk membuat tugas skrip dasar yang mencoba ulang tugas yang gagal hanya untuk beberapa exit code, buat file JSON dengan konten berikut:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ],
            
            "maxRetryCount": MAX_RETRY_COUNT,
            "lifecyclePolicies": [
              {
                "action": "ACTION",
                "actionCondition": {
                   "exitCodes": [EXIT_CODES]
                }
              }
            ]
          }
        }
      ],
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    

    Ganti kode berikut:

    • MAX_RETRY_COUNT: jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba lagi tugas apa pun.

    • ACTION: tindakan, baik RETRY_TASK maupun FAIL_TASK, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lainnya.

    • EXIT_CODES: daftar yang dipisahkan koma yang berisi satu atau beberapa exit code yang Anda inginkan untuk memicu tindakan yang ditentukan—misalnya, 50001, 50002.

      Setiap exit code dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari 50001 hingga 59999 dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.

    Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption VM Spot.

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "sleep 30"
                }
              }
            ],
            "maxRetryCount": 3,
            "lifecyclePolicies": [
              {
                 "action": "RETRY_TASK",
                 "actionCondition": {
                   "exitCodes": [50001]
                }
              }
            ]
          }
        }
      ],
      "allocationPolicy": {
        "instances": [
          {
            "policy": {
              "machineType": "e2-standard-4",
              "provisioningModel": "SPOT"
            }
          }
        ]
      }
    }
    
  2. Untuk membuat dan menjalankan tugas, gunakan perintah gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Ganti kode berikut:

    • JOB_NAME: nama pekerjaan.

    • LOCATION: lokasi tugas.

    • JSON_CONFIGURATION_FILE: jalur untuk file JSON dengan detail konfigurasi tugas.

API

Buat permintaan POST ke metode jobs.create yang menentukan kolom maxRetryCount dan subkolom lifecyclePolicies[].

Untuk membuat tugas skrip dasar yang mencoba ulang tugas yang gagal hanya untuk beberapa exit code, buat permintaan berikut:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ],
        
        "maxRetryCount": MAX_RETRY_COUNT,
        "lifecyclePolicies": [
          {
            "action": "ACTION",
            "actionCondition": {
                "exitCodes": [EXIT_CODES]
            }
          }
        ]
      }
    }
  ],
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Ganti kode berikut:

  • PROJECT_ID: project ID project Anda.

  • LOCATION: lokasi tugas.

  • JOB_NAME: nama pekerjaan.

  • MAX_RETRY_COUNT: jumlah maksimum percobaan ulang untuk setiap tugas. Agar tugas dapat mencoba kembali tugas yang gagal, nilai ini harus disetel ke bilangan bulat antara 1 dan 10. Jika kolom maxRetryCount tidak ditentukan, nilai defaultnya adalah 0, yang berarti tidak mencoba lagi tugas apa pun.

  • ACTION: tindakan, baik RETRY_TASK maupun FAIL_TASK, yang Anda inginkan untuk tugas yang gagal dengan kode keluar yang ditentukan. Tugas yang gagal dengan kode keluar yang tidak ditentukan akan mengambil tindakan lainnya.

  • EXIT_CODES: daftar yang dipisahkan koma yang berisi satu atau beberapa exit code yang Anda inginkan untuk memicu tindakan yang ditentukan—misalnya, 50001, 50002.

    Setiap exit code dapat ditentukan oleh aplikasi atau Batch Anda. Kode keluar dari 50001 hingga 59999 dicadangkan oleh Batch. Untuk mengetahui informasi selengkapnya tentang kode keluar yang dipesan, lihat Pemecahan masalah.

Misalnya, tugas berikut hanya mencoba ulang tugas yang gagal karena preemption VM Spot.

POST https://batch.googleapis.com/v1/projects/example-project/locations/us-central1/jobs?job_id=example-job

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "sleep 30"
            }
          }
        ],
        "maxRetryCount": 3,
        "lifecyclePolicies": [
          {
             "action": "RETRY_TASK",
             "actionCondition": {
               "exitCodes": [50001]
            }
          }
        ]
      }
    }
  ],
  "allocationPolicy": {
    "instances": [
      {
        "policy": {
          "machineType": "e2-standard-4",
          "provisioningModel": "SPOT"
        }
      }
    ]
  }
}

Langkah selanjutnya