Vlnový algoritmus Echo

Užitečné odkazy

Separátní logy pro každý proces

Ve třídě Node implementujte separátní logger podobně jak je uvedeno níže.

1
2
3
4
5
6
self.logger = logging.getLogger(name_of_the_node)
hdlr = logging.FileHandler('/path/to/log/{}.log'.format(name), mode='w')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
self.logger.addHandler(hdlr)
self.logger.setLevel(logging.INFO)

Algoritmus Echo

Vlnový, centralizovaný algoritmus pro libovolnou topologii. Algoritmus je pro neorientované sítě, je tedy nutné mít obousměrné kanály, případně dvojci kanálů (náš případ).

Token může být například tuple s hodnotami (číslo, název uzlu z kterého byl poslán). Cílem je zjistit počet uzlů v topologii (decide v initiator).

Pseudokód procesu initiator:

1
2
3
4
5
6
7
8
for node in neighbors:
	send(token, node)

while rec < len(neighbors):
	recieve(token)
	rec += 1

decide()

Pseudokód ostatních procesů:

1
2
3
4
5
6
7
8
9
10
11
12
13
token, source = recieve_any()
father = source
rec += 1

for node in neighbors:
	if node is not father:
		send(token, node)

while rec < len(neighbors):
	recieve(token)
	rec += 1

send(token, father)

Úkol
V simulátoru dist. sítě implementujte vlnový algoritmus Echo.