Skip to content

Commit fe1e2f3

Browse files
authored
Merge pull request #48 from ThaminduR/addClientFns
Minor Fixes
2 parents 415ab77 + 5df55cc commit fe1e2f3

4 files changed

Lines changed: 23 additions & 10 deletions

File tree

src/main/java/Constants/ChatServerConstants.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public static class ServerConstants {
4949

5050
public static final String KIND_HEARTBEAT = "heartbeat";
5151
public static final String TIMESTAMP = "timestamp";
52-
public static final String KIND_LEADER_STATE = "leaderstate";
52+
public static final String LEADER_STATE_MERGE = "leaderstatemerge";
5353
}
5454

5555
/**

src/main/java/Gossiping/Gossiping.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@ public static synchronized void receiveHeartBeat(JSONObject request) throws IOEx
3232
}
3333
} else {
3434
logger.debug("Discovered server through Gossiping. Server id: " + serverId);
35-
if (ServerState.getServerState().amITheLeader() && failedServerMapContains(serverId)) {
35+
if (ServerState.getServerState().amITheLeader()) {
36+
logger.debug("Sending ServerState since I'm the Leader.");
3637
HashMap<String, String> serializedServerState = ServerState.getServerState().getCurrentServerState();
37-
serializedServerState.put(ServerConstants.TYPE, ServerConstants.KIND_LEADER_STATE);
38+
serializedServerState.put(ServerConstants.TYPE, ServerConstants.LEADER_STATE_MERGE);
3839
Collection<Server> serverAsACollection = new ArrayList<>();
3940
serverAsACollection.add(ServerState.getServerState().getServerFromId(serverId));
4041
Messaging.sendAndForget(new JSONObject(serializedServerState), serverAsACollection);

src/main/java/Server/ServerHandler.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import Constants.ChatServerConstants.ServerConstants;
77
import Constants.ChatServerConstants.ServerExceptionConstants;
88
import Exception.ServerException;
9-
import Gossiping.FailureDetector;
109
import Gossiping.Gossiping;
1110
import Messaging.Messaging;
1211
import org.apache.logging.log4j.LogManager;
@@ -95,9 +94,6 @@ private void resolveServerRequest(JSONObject jsonPayload) throws IOException, Pa
9594
case ServerConstants.KIND_HEARTBEAT:
9695
Gossiping.receiveHeartBeat(jsonPayload);
9796
break;
98-
case ServerConstants.KIND_LEADER_STATE:
99-
ServerState.getServerState().restoreServerState(jsonPayload);
100-
break;
10197
}
10298
break;
10399
case ServerConstants.TYPE_BULLY:
@@ -106,15 +102,25 @@ private void resolveServerRequest(JSONObject jsonPayload) throws IOException, Pa
106102
// This server received an ELECTION message
107103
logger.trace("Received bully to: " + ServerState.getServerState().getServerId() + " by: " + jsonPayload.get(ServerConstants.SERVER_ID));
108104
LeaderElection.replyOKorPass(jsonPayload, serverSocket);
105+
break;
106+
109107
case ServerConstants.KIND_ELECTED:
110108
// This server received elected message
111109
// TODO
112110
logger.trace("Received ELECTED to: " + ServerState.getServerState().getServerId() + " by: " + jsonPayload.get(ServerConstants.SERVER_ID));
113111
LeaderElection.respondToElectedMessage();
112+
break;
113+
114114
case ServerConstants.KIND_COORDINATOR:
115115
logger.debug("Received COORDINATOR to: " + ServerState.getServerState().getServerId() + " by: " + jsonPayload.get(ServerConstants.SERVER_ID));
116116
LeaderElection.receiveCoordinator(jsonPayload);
117+
break;
117118
}
119+
break;
120+
case ServerConstants.LEADER_STATE_MERGE:
121+
logger.info("State Received from the leader.");
122+
ServerState.getServerState().restoreServerState(jsonPayload);
123+
break;
118124
}
119125
}
120126

src/main/java/Server/ServerState.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,10 @@ public void setSmallPartitionFormed(boolean smallPartitionFormed) {
245245
}
246246

247247
public boolean amITheLeader() {
248-
return serverId.equals(currentLeader.getId());
248+
if(currentLeader!=null) {
249+
return serverId.equals(currentLeader.getId());
250+
}
251+
return false;
249252
}
250253

251254
/**
@@ -280,6 +283,7 @@ public HashMap<String, String> getCurrentServerState() throws IOException {
280283
*/
281284
public void restoreServerState(JSONObject jsonObject) throws IOException, ClassNotFoundException {
282285

286+
logger.info("Restoring ServerState using data sent by the leader.");
283287
String identityString = (String) jsonObject.get("IdentityList");
284288
String roomString = (String) jsonObject.get("RoomList");
285289

@@ -288,9 +292,11 @@ public void restoreServerState(JSONObject jsonObject) throws IOException, ClassN
288292
identityList.addAll(tempIdList);
289293
}
290294

291-
ConcurrentHashMap<String, Room> tempRoomList = (ConcurrentHashMap<String, Room>) deserialize(roomString);
295+
ArrayList<Room> tempRoomList = (ArrayList<Room>) deserialize(roomString);
292296
if (roomsHashMap.isEmpty()) {
293-
roomsHashMap.putAll(tempRoomList);
297+
for (Room room : tempRoomList){
298+
roomsHashMap.put(room.getRoomId(), room);
299+
}
294300
}
295301

296302
setSmallPartitionFormed(false);

0 commit comments

Comments
 (0)