From 5fed69cfcf7c440931e278f95b64867d00b31fe1 Mon Sep 17 00:00:00 2001 From: Quoc Dao <quoc.dao@student.reutlingen-university.de> Date: Sun, 4 Feb 2024 20:47:40 +0100 Subject: [PATCH] heartbeat fix --- __pycache__/voting.cpython-312.pyc | Bin 0 -> 1205 bytes server.py | 35 ++++++++++++++--------------- 2 files changed, 17 insertions(+), 18 deletions(-) create mode 100644 __pycache__/voting.cpython-312.pyc diff --git a/__pycache__/voting.cpython-312.pyc b/__pycache__/voting.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08e29fc07a41cba4e1a12db4a9d952b7d7fc9226 GIT binary patch literal 1205 zcmZuxO=uHA6rS1L^v9aU{v~W1G&xv|*g}86A4CW(h*)E56`@2zl9|SBlHD*nX^m{4 zhk6k~3qo5I?7@Sghl(hI;92mJ#J{k55IprJ){9>B&6=bZe6Vlcy!qa@Z})w>Z`|%( z2<+*zm-LW~&{wgkn^X(7dLdXr1QDD;Gl)n_Xa*C7$V+%eD&UZ7Qvf4LT*Hf{1uo!2 zThGC*Al^8$&^Wq@lTr#LrAt19ikJ(WV{=M9+FmXEs8+iy-B1;%DmF4j$&!Fg{)bKe zhplOwr5;)GPPU>_lr3c%Sh2&rP><vV6vB~^VmFxv<CKUsnWo%s)pW{Zac=0fQ0GQG z<g%NyG@GEzw4440cIV&1SVGg|tPo?Gp0X9)Ak=QJooG2HYr3GjfUsZ2*s<sZ6Ih~= zRK7s<=r}dg+{i`8HIp+fk%vwK(*={$tQnnT#vD!a*x2PbkA-u&jFygb&CsI}nx_C^ zfibvSlqBc?F$Yr2$mfOz7R=$%=)A$9o55VcZk;t)*6D(^Ll<Ha<|Md9^jY2ay7@z3 z^2O|Z@5kU!IXJY@|2}xM5}16ePL&jI_2}sjJrf(<w`V_k`^(<`b^hLasMIsD7y(yp zQ%j2a^ScWLr|?g^XTlUJyY3Hnv^?>Ly-Kn%a!8AzJ5qTC!3wglh2|0Ku+UsXG;mO} zZ8_+eU>KfEaQZMpENn?cN*{n|FXZH_fZvvah3aE>5H1T5MFqq(vQQme+sj08FmV6> z)dMp;%8uH`zJNlm$mVY_TglK_zA5@=;wuVCwoB6qy<*E5s)MQ&M-HB3o-wNPn2<$G z%h|0&V>Bs-Xm{>B6UC-@Q$i=q4T0@Wfe>}7r7kB7;1NBw!ew3qw}`4oPQD&3A33|) zeXn<|cm3=;b+mNhq8MDWx_YkCysz5Uz1mc1+gtSn*TZGc{>NPp&OcHsp5dymZ#BHU zaI5``udn1E+~_F#hs(Z^(w>no0G+CM`T=owY+bo?>H%ImQ}!J!?K$`#Y}Xbv0$&m9 z5R1%&%pH|Etv*Cd{8pSt`PFhfYmj_~o?w2+iPvU!g8L?8j6WgwcSXj%KX$j{Zl~rC DlVUGB literal 0 HcmV?d00001 diff --git a/server.py b/server.py index 4b1fa84..86d584e 100644 --- a/server.py +++ b/server.py @@ -74,8 +74,7 @@ class Server(): # if the decoded address is not in the server list add it and print the list if newServer_address not in self.serverList: - self.serverList.append(newServer_address) - + self.serverList.append(newServer_address) reply_message = MY_IP multicast_listen_sock.sendto(str.encode(reply_message), address) @@ -279,7 +278,6 @@ class Server(): ring_socket.close() def init_heartbeat(self): - self.leader_heartbeat_last_received = time.time() self.heartbeat_interval = 5 # seconds self.missed_heartbeats_limit = 5 self.missed_heartbeats = 0 @@ -310,27 +308,28 @@ class Server(): while True: data, address = multicast_socket.recvfrom(1024) if data: + self.leader_heartbeat_last_received = time.time() sender_ip = address[0] if sender_ip != MY_IP: - print(f"Received heartbeat from {address}: {data.decode()}") - # Hier kannst du die Logik hinzufügen, um den Status des Heartbeats zu verarbeiten - time.sleep(1) + print(f"Received heartbeat from {sender_ip}: {data.decode()}") + else: + time_since_last_heartbeat = time.time() - self.leader_heartbeat_last_received + if time_since_last_heartbeat > self.heartbeat_interval: + self.missed_heartbeats += 1 + print(f"Missed heartbeat detected. Count: {self.missed_heartbeats}") + if self.missed_heartbeats >= self.missed_heartbeats_limit: + print("Missed heartbeats limit reached. Initiating leader election.") - + thread_election.join() + thread_election.start() + # Reset missed heartbeats count + self.missed_heartbeats = 0 + # Code to initiate a new voting process to elect a new leader + # This could involve calling a function from voting.py or similar logic + time.sleep(self.heartbeat_interval) - # time_since_last_heartbeat = time.time() - self.leader_heartbeat_last_received - # if time_since_last_heartbeat > self.heartbeat_interval: - # self.missed_heartbeats += 1 - # print(f"Missed heartbeat detected. Count: {self.missed_heartbeats}") - # if self.missed_heartbeats >= self.missed_heartbeats_limit: - # print("Missed heartbeats limit reached. Initiating leader election.") - # # Reset missed heartbeats count - # self.missed_heartbeats = 0 - # # Code to initiate a new voting process to elect a new leader - # # This could involve calling a function from voting.py or similar logic - # time.sleep(self.heartbeat_interval) # starting all simultaneously working procedures if __name__== '__main__': -- GitLab