Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update do servidor sem downtime e sem interromper partidas #183

Closed
Tracked by #38
chesterbr opened this issue Jul 22, 2023 · 1 comment
Closed
Tracked by #38

Update do servidor sem downtime e sem interromper partidas #183

chesterbr opened this issue Jul 22, 2023 · 1 comment

Comments

@chesterbr
Copy link
Owner

A gente poderia fazer um deploy com soft rollover, +/- da seguinte forma:

  • Criar um novo modulo "launcher", java app
  • Esse módulo só vai ter uma classe com método main.
  • O main desse módulo vai ter um loop do que:
    • abre um child com java -jar <caminho>server.jar
    • monitora o server.jar por mudanças (1). Se ele mudou
      • pede pro server.jar parar (2) assincronamente
      • repete o loop
  • Quando o server.app receber o pedido pra parar, ele:
    • para de aceitar novas conexões
    • aguarda todos os jogadores desconectarem (alternativa: não deixa iniciar nova partida, aguarda todas as partidas encerrarem)
    • encerra
  • Alterar a configuração do supervisor pra:
    • chamar o launcher ao inves do server.jar
    • usar menos memoria (3)
    • fechar o processo como grupo (o que vai fechar qualquer server.jar rodando)

(1) como? o replace é atômico?
(2) como? (stopfile, signal, etc)
(3) precisa?

@chesterbr chesterbr mentioned this issue Jul 22, 2023
52 tasks
@chesterbr
Copy link
Owner Author

chesterbr commented Jul 23, 2023

#184 implementou um MVP disso (usando um script bash ao invés de outro módulo Java).

Ficaram faltando:

  • Ao receber o sinal, servidor tem que desconectar jogadores à medida em que eles terminam suas partidas (de repente setar um boolean static no JogadorConectado, aí as próprias instâncias se desconectam)
  • Ao receber o sinal, servidor tem que avisar jogadores que houve atualização e eles serão desconectados ao final da partida atual (ou imediatamente se não estiverem em jogo); melhor fazer depois que implementarmos esse tipo de notificação; os próprios JogadorConectado poderiam fazer isso com a flag sugerida acima
  • Se algo der errado no envio do sigusr e o launcher cair, o servidor vai continuar rodando e escutando (impedindo novas instâncias de subirem); de repente pensar em algum cleanup ou timeout pra isso (talvez no startup do launcher mandar o sigusr1 pra qualquer processo que se pareça com um servidor desgarrado)? Foi pra Verificar/limpar servidores órfãos #186

@chesterbr chesterbr changed the title Rollover no deploy Update do servidor sem downtime e sem interromper partidas Jul 23, 2023
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

No branches or pull requests

1 participant