Operações de aplicações em fila
As APIs CICD que devem obter o bloqueio/mutex de toda a instância de atualização para executar as operações solicitadas são enfileiradas em vez de serem rejeitadas quando o bloqueio/mutex de toda a instância de atualização é ocupado por outras operações.
A partir de Tóquio, as APIs CICD que exigem a obtenção do bloqueio/mutex de toda a instância de atualização para executar as operações solicitadas serão enfileiradas em vez de serem rejeitadas quando o bloqueio/mutex de toda a instância de atualização for ocupado por outras operações. Quando uma solicitação CICD é recebida, o serviço CICD correspondente constrói uma mensagem NowMQ de operação de aplicação (Now Message Queue) e insere a mensagem na fila usando APIs NowMQ. As mensagens enfileiradas são pesquisadas pelo trabalho programado e tratadas uma a uma ou em paralelo se o processamento paralelo estiver habilitado e a operação atender aos critérios necessários.
Mensagem do NowMQ da operação da aplicação
As mensagens do NowMQ de operação da aplicação têm um assunto comum que é "sys.applifecycle.operation". O corpo da mensagem da operação da aplicação NowMQ contém um objeto JSON que inclui o sys_id do Rastreador de execução (também conhecido como o ID de andamento retornado na resposta da API CICD), o tipo de operação que pode ser um dos seguintes: app_install, plugin_activation, batch_install, rollback, import_app e apply_changes. Ele também contém informações como ID do plug-in para ativação do plug-in, ID do app ou escopo para instalação do aplicativo.
Rastreador de execução para operação da aplicação
Quando a mensagem do NowMQ de operação da aplicação é construída e inserida, o registro do rastreador de execução para a solicitação CICD correspondente é criado e seu sys_id é adicionado ao corpo da mensagem do NowMQ. O Rastreador de execução está no estado Pendente inicialmente. A coluna "Detalhes" do rastreador de execução contém as informações sobre o tipo de operação e os parâmetros de entrada importantes para a solicitação CICD. Sua coluna "Mensagem" contém as informações sobre a posição da fila. Quando a fila é pausada, a mensagem é prefixada com "[A fila de operação da aplicação está pausada]".
Rastreadores de execução de operações da aplicação de amostra quando a fila está em execução.
Rastreadores de execução de operação da aplicação de amostra quando a fila está pausada.
Gerenciar fila de operações da aplicação
Embora a instalação manual de produtos de Todos os aplicativos seja enfileirada, a instalação manual de um aplicativo da IU como Todos os Aplicativos ou Gerenciador de aplicativos não é enfileirada.
Às vezes, a instância pode estar recebendo, enfileirando e manipulando muitas solicitações CICD, o que pode fazer com que a instalação manual da IU esteja faminta para atualizar o bloqueio/mutex em toda a instância. Quando isso acontece, o administrador pode pausar temporariamente a Fila de operações da aplicação.
O administrador pode gerenciar a Fila de operação da aplicação por meio da página de IU da Fila de operação da aplicação Diagnóstico do sistema->. No painel "Status da fila de operação", o administrador pode pausar ou retomar a fila. O administrador também pode cancelar o rastreador de execução pendente. Isso removerá a mensagem enfileirada correspondente do NowMQ pelo trabalho do App Operation Queue Health Monitor.
Página de IU da Fila de operações da aplicação
Página de IU de fila de operação da aplicação de amostra. O administrador pode clicar no botão em "Status da fila de operação" para pausar ou retomar a fila.
Clique no item da lista "Rastreadores de execução de operações de aplicações" para abrir o formulário Rastreador de execução. Se a mensagem enfileirada estiver pendente na fila, atualize o estado do rastreador de execução para "Cancelado" e salvar a mudança cancelará a solicitação CICD enfileirada correspondente. Observação: se o estado do rastreador de execução for "Em execução", a solicitação CICD não poderá ser cancelada.
Fila de operações da aplicação e janela de atualização
Por padrão, 2 horas (pode ser personalizado por meio da propriedade do sistema "com.glide.update_operation.queue_upgrade_window") antes da atualização programada, a Fila de operações da aplicação para de processar mensagens enfileiradas.
O status da Fila de operações da aplicação é alterado para "Atualização pausada". Durante essa janela de atualização, novas solicitações de CICD continuam na fila.
Quando a atualização for concluída, a Fila de operação da aplicação retomará o processamento das mensagens enfileiradas automaticamente.
Impacto no pipeline de CICD
Os contratos de solicitação/resposta existentes para as APIs CICD não são alterados. A falha na operação devido à atualização de conflitos de bloqueio/mutex em toda a instância que são observados em uma versão anterior à Tokyo não será vista. A solicitação é enfileirada e atendida uma a uma ou em paralelo, dependendo do tipo de trabalho.
APIs CICD que oferecem suporte ao enfileiramento
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/app_repo/rollback
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/rollback
- api/sn_cicd/sc/apply_changes
- api/sn_cicd/v1/sc/apply_changes
- api/sn_cicd/v2/sc/apply_changes
- api/sn_cicd/app/lote/instalação
- api/sn_cicd/sc/importar
- api/sn_cicd/plugin/{plugin_id}/ativar
- api/sn_cicd/plug-in/{plug-in_id}/rollback
Paralelizar instalações de aplicações e ativações de plug-in
- api/sn_cicd/app_repo/install
- api/sn_cicd/v1/app_repo/install
- api/sn_cicd/v2/app_repo/install
- api/sn_cicd/plugin/{plugin_id}/ativar
Todo o processamento de fila usa um bloqueio/mutex de toda a instância e mantém esse mutex até que qualquer operação na fila seja concluída. Esse bloqueio é chamado UpdateMutexe seu status pode ser exibido na tabela sys_mutex. Durante esse tempo, as operações que usam esse mesmo bloqueio (instalações de app, ativações de plug-in, operações de controle de código-fonte) não podem ser executadas por meio da IU. A fila ainda pode ser pausada por meio da página Fila de operação da aplicação para liberar o bloqueio após a conclusão dos trabalhos em execução no momento.
A paralelização está habilitada por padrão. Ele pode ser desativado usando a propriedade com.glide.update_operation.parallel_operation_enablede todas as operações serão executadas sequencialmente na fila, como nas versões anteriores.
Limites na paralelização
O processador da fila determina se um trabalho enfileirado pode ser executado. Se um trabalho puder ser executado, ele será programado para ser selecionado por um nó de instância na primeira disponibilidade. Caso contrário, ele será retornado à fila e o processador avaliará o próximo trabalho na fila para processamento.
Há um limite para o número máximo de trabalhos que podem ser executados em paralelo, cujo padrão é 2. Esta propriedade pode ser alternada em glide.update.app_operation_queue.parallel.max, mas lembre-se de que há um limite superior de threads disponíveis para executar a instalação e o aumento da paralelização consome memória adicional que pode tornar a instância mais lenta para usuários ativos.
Obtenção de Bloqueios de Recursos
- Quaisquer duas operações que compartilham o mesmo escopo, incluindo personalizações.
- Quaisquer duas operações que causam mudanças de esquema.
- Quaisquer duas operações que contenham scripts de correção.
O processamento da fila determina se esses critérios são atendidos para operações enfileiradas e adia trabalhos não processáveis, se necessário. O ID de andamento do trabalho será atualizado para refletir se a operação estiver aguardando a obtenção dos bloqueios de recursos apropriados. Uma operação em execução mantém uma lista dos recursos (escopos, esquema, scripts de correção presentes) na tabela sys_padlock, e a inserção e a liberação desses bloqueios podem ser observadas nesta tabela pelo ID de andamento. Se um trabalho enfileirado for adiado devido à incapacidade de obter os bloqueios necessários nos recursos, ele será colocado em um esfriamento para permitir o processamento de outras mensagens. O período de esfriamento pode ser modificado com a propriedade com.glide.update_operation.job_cancel_timeout_minutes. O trabalho ainda está na fila e visível na página Fila de operação da aplicação.
com.glide.update_operation.max_failure_count.