Hot patch de RPO sem restart do AppServer

Tecnicas pra atualizar codigo em producao sem derrubar AppServer. UpdRPOData, recompile, troca seamless de RpoCustom.

Reiniciar AppServer derruba todos os usuarios conectados. Em produca o, e dor. Existem 3 abordagens para atualizar codigo "ao vivo":

Abordagem 1: Recompile + UpdRPOData (mais simples)

Voce compila uma User Function direto no AppServer. Apos compile, o codigo novo passa a valer pra novas chamadas — sessoes antigas ainda usam o velho ate desconectarem.

# Via TDS-VSCode ou /advpl-compile
/advpl-compile MinhaFunc.prw

# Apos compile, em uma sessao Protheus:
UpdRPOData()   # recarrega metadados — opcional, normalmente automatico

Abordagem 2: Hot swap de RpoCustom (controlado)

Em RPOs separados (cliente.rpo, patches.rpo), voce pode trocar o arquivo do patch sem mexer no tttp.rpo principal.

# 1. Gerar novo patch via TDS-VSCode "Build Patch"
# 2. Copiar pra servidor via SCP
scp patch_v123.rpo root@srv:/protheus_data/apo/

# 3. Atualizar config no appserver.ini (sem restart!)
# Algumas releases aceitam SETAPSCONFIG dinamico:
SetAppConfig("General", "RpoPatches", "patch_v123.rpo")

# 4. Forcar reload
UpdRPOData()

Abordagem 3: Cluster com rolling update (zero downtime real)

Em ambientes com balanceador (HAProxy, Nginx) na frente de 2+ AppServers:

  1. Drena AppServer A (load balancer para de enviar sessoes novas)
  2. Espera sessoes ativas terminarem (ou forca apos timeout)
  3. Atualiza RPO em A + restart
  4. Volta A no LB, drena B
  5. Atualiza B + restart
  6. Zero downtime para o usuario

Pegadinhas de hot patch

Quando pode hot patch (e quando NAO)

Tipo de mudancaHot patch ok?
User Function isolada✅ Sim
Ponto de Entrada✅ Sim (testa em homolog antes)
Static Function✅ Sim
Mudanca em SX3 (campo)⚠ Com cuidado — restart usuarios
Mudanca em SX2 (tabela)❌ Nao — exige restart
Mudanca em LIB framework❌ Nao — restart obrigatorio
Upgrade Protheus completo❌ Nao — agendar janela

Workflow recomendado de deploy em producao

  1. Build: gerar patch RPO em ambiente de build
  2. Homolog: subir em homolog, testar com /advpl-validate + /advpl-find-issues
  3. Producao escalada: subir em horario de menor uso (madrugada)
  4. Comunicar usuarios: mesmo hot patch, avise se for grande
  5. Plano de rollback: copia do RPO anterior pronto
  6. Monitor: assista console.log nos primeiros 30 min

Rollback rapido

# Se algo der errado:
# 1. Restaurar RPO anterior
cp /protheus_backup/patch_anterior.rpo /protheus_data/apo/patch.rpo

# 2. Forcar reload
# (em sessao Protheus admin)
UpdRPOData()

# 3. Se nao resolver, restart agendado
systemctl restart appserver-protheus

Ferramentas que ajudam

Veja também