Translate

domingo, 10 de março de 2019

☕💥 A Jornada do Padawan COBOL – Parte 3 Desvendando o Universo dos CALLs no Mainframe

 

Bellacosa Mainframe apresenta o CALL em Cobol Pàrte III

☕💥 A Jornada do Padawan COBOL – Parte 3

Desvendando o Universo dos CALLs no Mainframe

RETURN-CODE, GOBACK, Dumps, CEEDUMP, IPCS e os Segredos Jedi do Troubleshooting

Ou como descobrir que um simples S0C4 pode transformar uma madrugada tranquila em uma aventura digna de um RPG de nível 99

Por Vagner Bellacosa – Bellacosa Mainframe


O momento em que o Padawan encontra seu primeiro ABEND

Todo desenvolvedor Mainframe possui uma história.

Normalmente começa assim:

Segunda-feira.

02h47.

Janela de produção.

Telefone toca.

Gerente pergunta:

O batch das contas correntes caiu.

Você responde:

Qual erro?

Resposta:

S0C4.

Silêncio.

Você pega café.

Abre SDSF.

Começa a aventura.


O universo do RETURN-CODE

Uma das coisas mais elegantes do COBOL é a comunicação entre programas.

Nem tudo precisa explodir com um ABEND.

Podemos retornar informações.

Exemplo:

Programa Chamador

CALL 'VALIDA'

USING WS-CLIENTE


IF RETURN-CODE NOT = 0

DISPLAY "ERRO"

END-IF

Subprograma

IF CPF-INVALIDO

MOVE 8 TO RETURN-CODE

GOBACK

END-IF

Convenção mais utilizada

RCSignificado
0Sucesso
4Aviso
8Erro
12Erro Grave
16Fatal

Exemplo elegante

Subprograma

EVALUATE TRUE


WHEN CLIENTE-INATIVO

MOVE 4 TO RETURN-CODE


WHEN CPF-INVALIDO

MOVE 8 TO RETURN-CODE


WHEN SALDO-NEGATIVO

MOVE 12 TO RETURN-CODE


WHEN OTHER

MOVE 0 TO RETURN-CODE


END-EVALUATE

Por que isso é importante?

Evita ABEND.

Permite tratamento.

Sistema continua vivo.


GOBACK vs EXIT PROGRAM

Padawan adora copiar.

Mestre entende diferença.


STOP RUN

STOP RUN

Finaliza tudo.

Acabou.

Batch morre.


GOBACK

GOBACK

Retorna.

Educado.

Seguro.


EXIT PROGRAM

Muito usado em subprogramas.

EXIT PROGRAM

Volta ao chamador.


O preferido da IBM

GOBACK

Sempre.


O grande vilão

S0C4

O Darth Vader dos ABENDS.


O que significa?

Violação de armazenamento.


Tentou acessar

memória inválida.


Exemplo

CALL 'ROTINA'

USING WS-NOME

ROTINA

espera

LK-NOME


LK-ID


LK-DATA

Recebe apenas um.

Kaboom.


Como ocorre

CPU acessa

endereço inexistente.


Exemplo

00000000

ou

FFFFFFFF

Crash.


S0C7

Outro inimigo.


Exemplo

Campo contém

ABC

Programa espera

999

Código

ADD 1 TO WS-VALOR

ABEND.


S806

Muito comum.

Programa não encontrado.


Verificar

STEPLIB

JOBLIB

LNKLST

APF


U4038

Erro do LE.

Language Environment.


Normalmente

problemas de parâmetros.

Heap.

Stack.

Storage.


O CEEDUMP

Ferramenta dos Mestres.

Poucos usam.

Deveriam usar.

Muito.


Compilar

TEST

ou

LIST

Executar

gera

CEEDUMP


Possui

Stack

Registers

Storage

Offsets

Variáveis

Call Stack


Exemplo

MAIN


↓

VALIDA


↓

CPFCHK


↓

FORMATA


↓

ABEND

Melhor que adivinhar.


IPCS

Ferramenta lendária.

Poucos dominam.


Permite

abrir dump.

Examinar memória.

Ver registradores.

Offsets.

TCB.

PSW.


O segredo do Offset

Mensagem

IGZ0035S


OFFSET X'01A2'

LISTING

0001A2 MOVE WS-ID

Achou erro.


Capturando problemas

Técnica Bellacosa 1

Log antes.

DISPLAY 'ENTRADA'


DISPLAY WS-ID


DISPLAY WS-NOME

Técnica 2

Log depois.

DISPLAY 'RETORNO'

Técnica 3

Interface versionada

05 LK-VERSAO.


PIC X(02).

Técnica 4

Validar ponteiros

IF PTR = NULL

DISPLAY 'ERRO'

END-IF

Técnica 5

Checksum

Estruturas críticas.


Técnica 6

Tamanho esperado

IF LENGTH OF LK-AREA


NOT = 256

Descobrindo loops

CALL

A

B

C

A

B

C


CPU

100%


Usar

SMF

RMF

Strobe

APA


Detectando corrupção

Antes

MOVE WS-BLOCO TO WS-BKP

Depois

Comparar.

IF WS-BKP


NOT = WS-BLOCO

Monitorando produção

SMF 30

SMF 110

RMF


Dica Bellacosa

Nunca faça:

MOVE 16 TO RETURN-CODE
CONTINUE

E ignore.


Faça

IF RETURN-CODE > 0

DISPLAY MSG


PERFORM LOG


END-IF

Easter Egg Mainframe

Existe em praticamente todos os bancos:

Programa

GENCALL

ou

UTIL0001

Possui:

7000 linhas.

300 CALLs.

120 IFs.

47 GO TO.

3 autores.

Última alteração:

Documentação:

Nenhuma.


Produção:

Executa há vinte anos.


Ninguém mexe.


É conhecido como:

O Boss Final do Mainframe™


Checklist Jedi de Troubleshooting

✅ Verificar RETURN-CODE

✅ Conferir parâmetros

✅ Conferir ordem

✅ Conferir tamanho

✅ Conferir LISTING

✅ Conferir CEEDUMP

✅ Conferir Offset

✅ Conferir STEPLIB

✅ Conferir Binder

✅ Conferir RENT

✅ Conferir Work-Storage

✅ Conferir Local-Storage

✅ Conferir ponteiros

✅ Conferir versão da interface

✅ Conferir quantidade de cafés consumidos


A Filosofia Jedi do CALL – Parte 3

O Padawan iniciante acredita:

"O programa caiu."

O desenvolvedor intermediário pensa:

"Preciso achar a linha."

O Mestre Mainframe sabe:

O programa nunca cai sozinho.

Ele deixa pistas.

Offsets.

PSW.

CEEDUMP.

Registers.

SMF.

IPCS.

RETURN-CODE.

Storage.

Call Stack.

E o verdadeiro Jedi do z/OS aprende que depurar um problema em produção não é apenas corrigir um bug.

É fazer arqueologia digital em sistemas que processam bilhões de transações por dia, compreender contratos invisíveis entre programas escritos ao longo de décadas e transformar um assustador S0C4 das 3 da manhã em apenas mais uma história para contar tomando um café no Bellacosa Mainframe.


Na Parte 4, o Padawan enfrentará o conteúdo avançado: Reentrância, RENT/NORENT, Thread Safety, HEAP, STACK, CICS, LE, AMODE 31/64, otimização extrema de CALLs, microbenchmarks e os segredos utilizados pelos arquitetos de sistemas IBM Z para executar milhões de chamadas por segundo com segurança.


Sem comentários:

Enviar um comentário