use of edu.umass.cs.gnsserver.gnsapp.packet.admin.AdminResponsePacket in project GNS by MobilityFirst.
the class AdminListener method handlePacket.
/**
* Handle an incoming admin packet.
*
* @param incomingJSON
* @param incomingSocket
* @param handler
*/
public void handlePacket(JSONObject incomingJSON, Socket incomingSocket, ClientRequestHandlerInterface handler) {
try {
switch(Packet.getPacketType(incomingJSON)) {
case DUMP_REQUEST:
DumpRequestPacket<String> dumpRequestPacket = new DumpRequestPacket<>(incomingJSON, handler.getGnsNodeConfig());
if (dumpRequestPacket.getPrimaryNameServer() == null) {
// OUTGOING - multicast it to all the nameservers
int id = dumpRequestPacket.getId();
ClientCommandProcessorConfig.getLogger().info("ListenerAdmin: Dump request from local server");
JSONObject json = dumpRequestPacket.toJSONObject();
Set<String> serverIds = handler.getNodeConfig().getActiveReplicas();
//Set<NodeIDType> serverIds = handler.getGnsNodeConfig().getNodeIDs();
replicationMap.put(id, serverIds.size());
Packet.multicastTCP(handler.getGnsNodeConfig(), serverIds, json, 2, PortOffsets.SERVER_ADMIN_PORT, null);
ClientCommandProcessorConfig.getLogger().log(Level.INFO, "ListenerAdmin: Multicast out to {0} hosts for {1} --> {2}", new Object[] { serverIds.size(), id, dumpRequestPacket.toString() });
} else {
// INCOMING - send it out to original requester
DumpRequestPacket<String> incomingPacket = new DumpRequestPacket<>(incomingJSON, handler.getGnsNodeConfig());
int incomingId = incomingPacket.getId();
handler.getAdmintercessor().handleIncomingDumpResponsePackets(incomingJSON, handler);
ClientCommandProcessorConfig.getLogger().log(Level.FINEST, "ListenerAdmin: Relayed response for {0} --> {1}", new Object[] { incomingId, dumpRequestPacket.toJSONObject() });
int remaining = replicationMap.get(incomingId);
remaining -= 1;
if (remaining > 0) {
replicationMap.put(incomingId, remaining);
} else {
ClientCommandProcessorConfig.getLogger().log(Level.INFO, "ListenerAdmin: Saw last response for {0}", incomingId);
replicationMap.remove(incomingId);
SentinalPacket sentinelPacket = new SentinalPacket(incomingId);
handler.getAdmintercessor().handleIncomingDumpResponsePackets(sentinelPacket.toJSONObject(), handler);
}
}
break;
case ADMIN_REQUEST:
AdminRequestPacket incomingPacket = new AdminRequestPacket(incomingJSON);
switch(incomingPacket.getOperation()) {
// deliberately nothing here for now
default:
ClientCommandProcessorConfig.getLogger().log(Level.SEVERE, "Unknown admin request in packet: {0}", incomingJSON);
break;
}
break;
case ADMIN_RESPONSE:
// forward any admin response packets recieved from NSs back to client
AdminResponsePacket responsePacket = new AdminResponsePacket(incomingJSON);
handler.getAdmintercessor().handleIncomingAdminResponsePackets(responsePacket.toJSONObject());
break;
default:
ClientCommandProcessorConfig.getLogger().log(Level.SEVERE, "Unknown packet type in packet: {0}", incomingJSON);
break;
}
} catch (JSONException | IllegalArgumentException | SecurityException | ParseException e) {
ClientCommandProcessorConfig.getLogger().log(Level.WARNING, "Ignoring error handling packets: {0}", e);
e.printStackTrace();
}
}
use of edu.umass.cs.gnsserver.gnsapp.packet.admin.AdminResponsePacket in project GNS by MobilityFirst.
the class Admintercessor method handleIncomingAdminResponsePackets.
/**
* Processes incoming AdminResponse packets.
*
* @param json
*/
public void handleIncomingAdminResponsePackets(JSONObject json) {
try {
switch(Packet.getPacketType(json)) {
case ADMIN_RESPONSE:
// put the records in dumpResult and let the folks waiting know they are ready
try {
AdminResponsePacket response = new AdminResponsePacket(json);
int id = response.getId();
ClientCommandProcessorConfig.getLogger().log(Level.FINER, "Processing admin response for {0}", id);
synchronized (adminResponseMonitor) {
adminResult.put(id, response.getJsonObject());
adminResponseMonitor.notifyAll();
}
} catch (JSONException e) {
ClientCommandProcessorConfig.getLogger().log(Level.WARNING, "JSON error during admin response processing: {0}", e);
} catch (ParseException e) {
ClientCommandProcessorConfig.getLogger().log(Level.WARNING, "Parse error during admin response processing: {0}", e);
}
break;
}
} catch (JSONException e) {
ClientCommandProcessorConfig.getLogger().log(Level.WARNING, "JSON error while getting packet type: {0}", e);
}
}
Aggregations