Relatório
Arquivos Utilizados:
Para este trabalho os arquivos do projeto anterior foram reutilizados, por isso a seguir estão listados os arquivos chave utilizados na última etapa do trabalho- main.c: Arquivo contendo a função main, é responsável pela validação de entrada, bem como a inicialização de todos os nodos e do ambliente de simulação, além da execução do fluxo de tempo enquanto ainda houverem eventos a serem executados ou diagnosticados.
- handlers.c: Arquivo contendo 3 funções principais, uma para executar as ações necessárias quando um nodo falha (faultHandler), uma para quando um nodo recupera (repairHandler), e uma para quando um nodo testa os outros (testHandler). Além disso contém todas as funções auxiliares para a execução dessas tarefas.
- scheduler.c: Arquivo com a função "scheduler", a qual lê o arquivo de configuração e agenda todos os eventos desse arquivo, além de agendar o primeiro teste que todos os nodos irão executar.
- scheduler.cfg: Arquivo de configuração usado por scheduler.c. Contém uma lista de possíveis eventos a serem agendados, cada possível agendamento tem um id e a linha seguinte descreve todos os eventos que ocorrem neste agendamento, com os eventos sendo listados sequenciamente no formato (tipo_evento), (tempo), (nodo_afetado).
- loggers.c: É o arquivo contendo todas as funções de log.
Modificações:
O arquivo handlers.c foi modificado acrecentando mais uma função chave (broadcastHandler) que executa todas as ações necessárias quando um nodo executa um broadcast. Além desta modificação, conforme orientado pelo professor o nodo não mais se utiliza de um vetor global para determinar quais serão seus testes, utilizando agora o seu vetor state.Funcionamento:
A função broadcastHandler é acionada quando há um broadcast agendado por meio da função schedule e funciona de forma recursiva. Esta função recebe dois parâmetros um é o id do nodo que irá enviar as mensagens e o outro é o número de mensagens que ele irá enviar (variável smax). Para cada cluster de 1 até smax o nodo calcula o seu C(i,s) e manda a mensagem para o primeiro nodo sem-falha deste conjunto, em seguida a função executa uma chamada recursiva para esse nodo como origem em que smax será igual a s - 1, assim fazendo com que ele envie para todos os nodos de cluster 1 até s - 1. Caso o nodo seja folha s - 1 irá valer zero e nenhuma mensagem será enviada a partir dele.Resultados Obtidos:
A partir dos resultados obtidos em múltiplas execuções com número variado de nodos, múltiplas origens e combinações diferentes de nodos falhos, o algoritmo realiza a difusão da mensagem conforme o proposto na especificação do trabalho