Skip to content

feat: implement graceful shutdown support in core and console providers - #515

Merged
regyssilveira merged 1 commit into
HashLoad:masterfrom
regyssilveira:feature/graceful-shutdown
Jul 10, 2026
Merged

feat: implement graceful shutdown support in core and console providers#515
regyssilveira merged 1 commit into
HashLoad:masterfrom
regyssilveira:feature/graceful-shutdown

Conversation

@regyssilveira

Copy link
Copy Markdown
Contributor

Descrição

Este PR introduz o suporte nativo a Desligamento Suave (Graceful Shutdown) no framework Horse. Ele permite que o servidor interrompa imediatamente a aceitação de novas conexões físicas no socket assim que o desligamento é acionado, enquanto aguarda de forma thread-safe que todas as requisições concorrentes ativas em andamento sejam concluídas e enviadas com sucesso antes de desligar o servidor por completo.

Principais Alterações

  1. Telemetria do Core e Thread-Safety (src/Horse.Core.pas):
    • Adicionado controle thread-safe global para os contadores ActiveRequests e IsShuttingDown utilizando operações atômicas da CPU (sem locks bloqueantes).
    • Expostas essas propriedades estáticas na facade principal (src/Horse.pas), facilitando o desenvolvimento de Probes de Liveness/Readiness e endpoints de monitoramento.
  2. Ciclo de Vida do Provedor (src/Horse.Provider.Abstract.pas):
    • Centralizado o incremento e decremento das conexões ativas no método Execute do provedor abstrato, protegido por blocos try..finally para evitar vazamentos de contagem.
  3. Mecanismo de Desligamento no Console (src/Horse.Provider.Console.pas):
    • Sobrescrito o método StopListenGraceful.
    • Desativa a escuta do socket físico do Indy (StopListening) e executa um laço cooperativo que monitora tanto a contagem lógica (ActiveRequests = 0) quanto os contextos ativos de conexões físicas (Contexts.Count = 0) antes de desligar o servidor de vez.
  4. Testes de Integração (tests/src/tests/Tests.Integration.GracefulShutdown.pas):
    • Criada suíte de testes de integração robusta utilizando o cliente HTTP nativo do Delphi (System.Net.HttpClient), simulando requisições paralelas lentas sob carga e garantindo o escoamento sem quebras físicas de rede.
  5. Exemplos Didáticos:
    • Desenvolvidos exemplos didáticos em Delphi (samples/delphi/console_graceful_shutdown) e Lazarus/FPC (samples/lazarus/console_graceful_shutdown).
  6. Documentação:
    • Escritos guias oficiais completos bilíngues (doc/graceful-shutdown.md e doc/graceful-shutdown.pt-BR.md) detalhando a arquitetura de escoamento e regras de Readiness Probe para orquestradores (Kubernetes).

Matriz de Validação

Os testes foram executados com 100% de sucesso (PASSOU) sob 24 matrizes de execução (Compiladores × Provedores × Roteadores) no Windows:

  • Compiladores: Delphi 10 Seattle até o Delphi 13 Florence.
  • Provedores: Indy (Default), HttpSys e IOCP.
  • Roteadores: Roteador padrão (Tree) e roteador de alta performance (Radix).
  • Portabilidade FPC/Linux: Validada no Free Pascal Compiler utilizando a emulação de System.Net.HttpClient fornecida pelas dependências do Boss.

Checklist

  • O código compila sem erros em todos os compiladores suportados.
  • A suíte completa de testes passou sem regressões.
  • Documentação bilíngue criada (Inglês e Português).
  • Exemplos práticos executáveis criados para Delphi e Lazarus.

@regyssilveira
regyssilveira merged commit 6242a0b into HashLoad:master Jul 10, 2026
@regyssilveira
regyssilveira deleted the feature/graceful-shutdown branch July 10, 2026 17:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant