Search in sources :

Example 1 with ClientRequest

use of edu.umass.cs.gigapaxos.interfaces.ClientRequest in project GNS by MobilityFirst.

the class GNSApp method execute.

/**
   *
   * @param request
   * @param doNotReplyToClient
   * @return true if the command is successfully executed
   */
@SuppressWarnings("unchecked")
// we explicitly check type
@Override
public boolean execute(Request request, boolean doNotReplyToClient) {
    boolean executed = false;
    if (executeNoop(request)) {
        return true;
    }
    try {
        Packet.PacketType packetType = request.getRequestType() instanceof Packet.PacketType ? (Packet.PacketType) request.getRequestType() : null;
        GNSConfig.getLogger().log(Level.FINE, "{0} starting execute({1}) doNotReplyToClient={2}", new Object[] { this, request.getSummary(), doNotReplyToClient });
        Request prev = null;
        // arun: enqueue request, dequeue before returning
        if (request instanceof RequestIdentifier) {
            if (enqueueCommand()) {
                prev = this.outstanding.putIfAbsent(((RequestIdentifier) request).getRequestID(), request);
            }
        } else {
            assert (false) : this + " should not be getting requests that do not implement " + RequestIdentifier.class;
        }
        switch(packetType) {
            case SELECT_REQUEST:
                Select.handleSelectRequest((SelectRequestPacket) request, this);
                break;
            case SELECT_RESPONSE:
                Select.handleSelectResponse((SelectResponsePacket) request, this);
                break;
            case COMMAND:
                CommandHandler.handleCommandPacket((CommandPacket) request, doNotReplyToClient, this);
                break;
            case ADMIN_COMMAND:
                CommandHandler.handleCommandPacket((AdminCommandPacket) request, doNotReplyToClient, this);
                break;
            default:
                assert (false) : (this + " should not be getting packets of type " + packetType + "; exiting");
                GNSConfig.getLogger().log(Level.SEVERE, " Packet type not found: {0}", request.getSummary());
                return false;
        }
        executed = true;
        // arun: always clean up all created state upon exiting
        if (request instanceof RequestIdentifier && prev == null) {
            GNSConfig.getLogger().log(Level.FINE, "{0} finished execute({1})  ->  {2}", new Object[] { this, request.getSummary(), request instanceof ClientRequest && ((ClientRequest) request).getResponse() != null ? ((ClientRequest) request).getResponse().getSummary() : null });
            this.outstanding.remove(((RequestIdentifier) request).getRequestID());
        }
    } catch (JSONException | IOException | ClientException | InternalRequestException e) {
        e.printStackTrace();
    } catch (FailedDBOperationException e) {
        // all database operations throw this exception, therefore we keep
        // throwing this exception upwards and catch this
        // here.
        // A database operation error would imply that the application
        // hasn't been able to successfully execute
        // the request. therefore, this method returns 'false', hoping that
        // whoever calls handleDecision would retry
        // the request.
        GNSConfig.getLogger().log(Level.SEVERE, "Error handling request: {0}", request.toString());
        e.printStackTrace();
    }
    return executed;
}
Also used : Packet(edu.umass.cs.gnsserver.gnsapp.packet.Packet) InternalCommandPacket(edu.umass.cs.gnsserver.gnsapp.packet.InternalCommandPacket) CommandPacket(edu.umass.cs.gnscommon.packets.CommandPacket) ResponsePacket(edu.umass.cs.gnscommon.packets.ResponsePacket) SelectRequestPacket(edu.umass.cs.gnsserver.gnsapp.packet.SelectRequestPacket) SelectResponsePacket(edu.umass.cs.gnsserver.gnsapp.packet.SelectResponsePacket) AdminCommandPacket(edu.umass.cs.gnscommon.packets.AdminCommandPacket) InternalRequestException(edu.umass.cs.gnscommon.exceptions.server.InternalRequestException) ReconfigurableRequest(edu.umass.cs.reconfiguration.interfaces.ReconfigurableRequest) Request(edu.umass.cs.gigapaxos.interfaces.Request) ClientRequest(edu.umass.cs.gigapaxos.interfaces.ClientRequest) JSONException(org.json.JSONException) IOException(java.io.IOException) ClientException(edu.umass.cs.gnscommon.exceptions.client.ClientException) PacketType(edu.umass.cs.gnsserver.gnsapp.packet.Packet.PacketType) ClientRequest(edu.umass.cs.gigapaxos.interfaces.ClientRequest) FailedDBOperationException(edu.umass.cs.gnscommon.exceptions.server.FailedDBOperationException) RequestIdentifier(edu.umass.cs.gigapaxos.interfaces.RequestIdentifier)

Example 2 with ClientRequest

use of edu.umass.cs.gigapaxos.interfaces.ClientRequest in project GNS by MobilityFirst.

the class GNSApp method sendToClient.

/**
   * Delegates client messaging to gigapaxos.
   *
   * @param responseJSON
   * @throws java.io.IOException
   */
@Override
public void sendToClient(Request response, JSONObject responseJSON) throws IOException {
    if (DELEGATE_CLIENT_MESSAGING) {
        assert (response instanceof ClientRequest);
        Request originalRequest = this.outstanding.remove(((RequestIdentifier) response).getRequestID());
        assert (originalRequest != null && originalRequest instanceof BasicPacketWithClientAddress) : ((ClientRequest) response).getSummary();
        if (originalRequest != null && originalRequest instanceof BasicPacketWithClientAddress) {
            ((BasicPacketWithClientAddress) originalRequest).setResponse((ClientRequest) response);
            incrResponseCount((ClientRequest) response);
        }
        GNSConfig.getLogger().log(Level.FINE, "{0} set response {1} for requesting client {2} for request {3}", new Object[] { this, response, ((BasicPacketWithClientAddress) originalRequest).getClientAddress(), originalRequest.getSummary() });
        return;
    }
// else
}
Also used : ReconfigurableRequest(edu.umass.cs.reconfiguration.interfaces.ReconfigurableRequest) Request(edu.umass.cs.gigapaxos.interfaces.Request) ClientRequest(edu.umass.cs.gigapaxos.interfaces.ClientRequest) BasicPacketWithClientAddress(edu.umass.cs.gnsserver.gnsapp.packet.BasicPacketWithClientAddress) ClientRequest(edu.umass.cs.gigapaxos.interfaces.ClientRequest)

Aggregations

ClientRequest (edu.umass.cs.gigapaxos.interfaces.ClientRequest)2 Request (edu.umass.cs.gigapaxos.interfaces.Request)2 ReconfigurableRequest (edu.umass.cs.reconfiguration.interfaces.ReconfigurableRequest)2 RequestIdentifier (edu.umass.cs.gigapaxos.interfaces.RequestIdentifier)1 ClientException (edu.umass.cs.gnscommon.exceptions.client.ClientException)1 FailedDBOperationException (edu.umass.cs.gnscommon.exceptions.server.FailedDBOperationException)1 InternalRequestException (edu.umass.cs.gnscommon.exceptions.server.InternalRequestException)1 AdminCommandPacket (edu.umass.cs.gnscommon.packets.AdminCommandPacket)1 CommandPacket (edu.umass.cs.gnscommon.packets.CommandPacket)1 ResponsePacket (edu.umass.cs.gnscommon.packets.ResponsePacket)1 BasicPacketWithClientAddress (edu.umass.cs.gnsserver.gnsapp.packet.BasicPacketWithClientAddress)1 InternalCommandPacket (edu.umass.cs.gnsserver.gnsapp.packet.InternalCommandPacket)1 Packet (edu.umass.cs.gnsserver.gnsapp.packet.Packet)1 PacketType (edu.umass.cs.gnsserver.gnsapp.packet.Packet.PacketType)1 SelectRequestPacket (edu.umass.cs.gnsserver.gnsapp.packet.SelectRequestPacket)1 SelectResponsePacket (edu.umass.cs.gnsserver.gnsapp.packet.SelectResponsePacket)1 IOException (java.io.IOException)1 JSONException (org.json.JSONException)1