Automatizar novas tentativas de tarefas

Esta página descreve como repetir tarefas automaticamente ou algumas falhas.

Um job em lote falha quando pelo menos uma das tarefas falha, o que pode acontecer por vários motivos. Por padrão, cada tarefa em um job é executada apenas uma vez. se uma tarefa falhar, ela não será repetida. No entanto, alguns problemas que fazem com que uma tarefa pode ser facilmente resolvido ao repetir a tarefa. Nesses casos, a configuração do job para repetir tarefas automaticamente pode ajudar a reduzir substancialmente para solucionar problemas e o ambiente de execução geral dos jobs.

Novas tentativas automáticas são adequadas para Tarefas com acoplamento flexível (independentes) e pode ajudar com vários problemas. Por exemplo, novas tentativas automáticas de tarefas pode resolver problemas urgentes, como os seguintes:

Ao criar um job, você pode configurar novas tentativas automáticas para cada tarefa. Especificamente, para cada tarefa, você pode usar uma das seguintes opções: opções de configuração:

  • Por padrão, cada tarefa não é repetida em caso de falha.
  • Repetir tarefas para todas as falhas: é possível configurar o tempo máximo para repetir automaticamente tarefas com falha. Você pode especificar entre 0 (padrão) e 10 novas tentativas.
  • Repetir tarefas para algumas falhas: É possível configurar tarefas diferentes (repetição automática ou falha sem nova tentativa) por ou falhas específicas. A ação oposta é realizada para todas as falhas não especificadas. Cada falha específica pode ser identificada por um código de saída que é definido pelo aplicativo ou Batch.

Antes de começar

Repetir tarefas para todas as falhas

É possível definir número máximo de novas tentativas automáticas (campo maxRetryCount) para tarefas com falha de um job usando a CLI gcloud ou a API Batch.

gcloud

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job e as maxRetryCount.

    Por exemplo, para criar um job básico de script que especifique o máximo novas tentativas de tarefas com falha, crie um arquivo JSON com o seguinte conteúdo:

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

    Substitua MAX_RETRY_COUNT pelo número máximo. de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre 1 e 10. Se o campo maxRetryCount não for especificado, o valor padrão será 0. ou seja, não tentar realizar nenhuma tarefa novamente.

  2. Para criar e executar o job, use o Comando gcloud batch jobs submit:

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

    Substitua:

    • JOB_NAME: o nome do job.

    • LOCATION: o local do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um JSON. com os detalhes de configuração do job.

API

Faça uma solicitação POST ao Método jobs.create que especifica o campo maxRetryCount.

Por exemplo, para criar um job de script básico que especifique o máximo novas tentativas de tarefas com falha, faça a seguinte solicitação:

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"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: o local do trabalho.

  • JOB_NAME: o nome do job.

  • MAX_RETRY_COUNT: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre 1 e 10. Se o campo maxRetryCount não for especificado, o valor padrão será 0. ou seja, não tentar realizar nenhuma tarefa novamente.

Repetir tarefas para algumas falhas

Você pode definir como quer que um job lide com diferentes falhas de tarefas usando políticas de ciclo de vida (campo lifecyclePolicies[]).

Uma política de ciclo de vida consiste ação (campo action), condição de ação (campo actionCondition), e código de saída (campo exitCodes[]). A ação especificada é realizada sempre que o uma condição de ação específica (um código de saída específico). É possível especificar uma das seguintes ações:

  • RETRY_TASK: repete tarefas que falham com os códigos de saída especificados na exitCodes[]. As tarefas que falham com códigos de saída não especificados são não foi repetida.
  • FAIL_TASK: não tenta repetir tarefas que falham com os códigos de saída especificados na exitCodes[]. As tarefas que falham com códigos de saída não especificados são uma nova tentativa.

Notavelmente, todas as tarefas que falham com códigos de saída não especificados levam o ação oposta: alguns códigos de saída são repetidos e outros falharam. Consequentemente, para que a política de ciclo de vida funcione como esperado, você também precisa definir número máximo de novas tentativas automáticas (campo maxRetryCount) para permitir que o job repita automaticamente as tarefas com falha pelo menos uma vez.

Cada código de saída representa uma falha específica definida pelo seu aplicativo ou Batch. Os códigos de saída de 50001 a 59999 são reservados e definidos por em lote. Para obter mais informações sobre os códigos de saída reservados, consulte Solução de problemas.

É possível especificar que um job tente repetir ou falhar tarefas após falhas específicas. usando a CLI gcloud ou a API Batch.

gcloud

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job, os o campo maxRetryCount e os subcampos lifecyclePolicies[].

    Para criar um job básico de script que repita as tarefas com falha somente para alguns códigos de saída, crie um arquivo JSON com o seguinte conteúdo:

    {
      "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"
      }
    }
    

    Substitua:

    • MAX_RETRY_COUNT: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre 1 e 10. Se o campo maxRetryCount não for especificado, o valor padrão será 0. ou seja, não tentar realizar nenhuma tarefa novamente.

    • ACTION: a ação. RETRY_TASK ou FAIL_TASK, que você quer para tarefas que falham com os códigos de saída especificados. Tarefas que falham com saída não especificada os códigos realizam a outra ação.

    • EXIT_CODES: uma lista separada por vírgulas de um ou mais códigos de saída em que você quer acionar o evento ação, por exemplo, 50001, 50002.

      Cada código de saída pode ser definido pelo aplicativo ou em lote. Os códigos de saída de 50001 a 59999 são reservados pelo Batch. Para obter mais informações sobre os códigos de saída reservados, consulte Solução de problemas.

    Por exemplo, o job a seguir tenta repetir apenas tarefas que falham devido a para a preempção das VMs 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. Para criar e executar o job, use o Comando gcloud batch jobs submit:

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

    Substitua:

    • JOB_NAME: o nome do job.

    • LOCATION: o local do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um JSON. com os detalhes de configuração do job.

API

Faça uma solicitação POST ao Método jobs.create que especifica o campo maxRetryCount e os subcampos lifecyclePolicies[].

Para criar um job básico de script que repita as tarefas com falha somente para alguns códigos de saída, faça a seguinte solicitação:

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"
  }
}

Substitua:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: o local do trabalho.

  • JOB_NAME: o nome do job.

  • MAX_RETRY_COUNT: o número máximo de novas tentativas para cada tarefa. Para que um job possa repetir tarefas com falha, Esse valor precisa ser definido como um número inteiro entre 1 e 10. Se o campo maxRetryCount não for especificado, o valor padrão será 0. ou seja, não tentar realizar nenhuma tarefa novamente.

  • ACTION: a ação. RETRY_TASK ou FAIL_TASK, que você quer para tarefas que falham com os códigos de saída especificados. Tarefas que falham com saída não especificada os códigos realizam a outra ação.

  • EXIT_CODES: uma lista separada por vírgulas de um ou mais códigos de saída em que você quer acionar o evento ação, por exemplo, 50001, 50002.

    Cada código de saída pode ser definido pelo aplicativo ou em lote. Os códigos de saída de 50001 a 59999 são reservados pelo Batch. Para obter mais informações sobre os códigos de saída reservados, consulte Solução de problemas.

Por exemplo, o job a seguir tenta repetir apenas tarefas que falham devido a para a preempção das VMs 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"
        }
      }
    ]
  }
}

Modificar o comportamento da tarefa com base no número de novas tentativas

Opcionalmente, depois de ativar as tentativas automáticas para uma tarefa conforme descrito nas seções anteriores desta página, é possível atualize os executáveis para usar BATCH_TASK_RETRY_ATTEMPT variável de ambiente predefinida. A variável BATCH_TASK_RETRY_ATTEMPT descreve o número de vezes que essa tarefa já foi tentada. Use o a variável BATCH_TASK_RETRY_ATTEMPT nos executáveis se você quiser que uma tarefa se comporte de maneira diferente com base no número de novas tentativas. Por exemplo, quando uma tarefa está sendo repetida, confirmar quais comandos já foram executados na tentativa anterior. Para mais informações, consulte Variáveis de ambiente predefinidas.

A seguir