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