Search in sources :

Example 6 with GridClientMarshaller

use of org.apache.ignite.internal.client.marshaller.GridClientMarshaller in project ignite by apache.

the class GridTcpRouterNioParser method encode.

/**
 * {@inheritDoc}
 */
@Override
public ByteBuffer encode(GridNioSession ses, Object msg) throws IOException, IgniteCheckedException {
    sndCnt++;
    if (msg instanceof GridRouterResponse) {
        GridRouterResponse resp = (GridRouterResponse) msg;
        ByteBuffer res = ByteBuffer.allocate(resp.body().length + 45);
        res.put(IGNITE_REQ_FLAG);
        res.putInt(resp.body().length + 40);
        res.putLong(resp.requestId());
        res.put(U.uuidToBytes(resp.clientId()));
        res.put(U.uuidToBytes(resp.destinationId()));
        res.put(resp.body());
        res.flip();
        return res;
    } else if (msg instanceof GridClientResponse) {
        GridClientMarshaller marsh = marshaller(ses);
        GridClientMessage clientMsg = (GridClientMessage) msg;
        ByteBuffer res = marsh.marshal(msg, 45);
        ByteBuffer slice = res.slice();
        slice.put(IGNITE_REQ_FLAG);
        slice.putInt(res.remaining() - 5);
        slice.putLong(clientMsg.requestId());
        slice.put(U.uuidToBytes(clientMsg.clientId()));
        slice.put(U.uuidToBytes(clientMsg.destinationId()));
        return res;
    } else if (msg instanceof GridClientPingPacket || msg instanceof GridClientHandshakeResponse)
        return super.encode(ses, msg);
    else
        throw new IgniteCheckedException("Unsupported message: " + msg);
}
Also used : GridClientResponse(org.apache.ignite.internal.processors.rest.client.message.GridClientResponse) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridRouterResponse(org.apache.ignite.internal.processors.rest.client.message.GridRouterResponse) GridClientMarshaller(org.apache.ignite.internal.client.marshaller.GridClientMarshaller) GridClientHandshakeResponse(org.apache.ignite.internal.processors.rest.client.message.GridClientHandshakeResponse) GridClientPingPacket(org.apache.ignite.internal.processors.rest.client.message.GridClientPingPacket) ByteBuffer(java.nio.ByteBuffer) GridClientMessage(org.apache.ignite.internal.processors.rest.client.message.GridClientMessage)

Example 7 with GridClientMarshaller

use of org.apache.ignite.internal.client.marshaller.GridClientMarshaller in project ignite by apache.

the class GridTcpRestNioListener method onMessage.

/**
 * {@inheritDoc}
 */
@Override
public void onMessage(final GridNioSession ses, final GridClientMessage msg) {
    if (msg instanceof GridMemcachedMessage)
        memcachedLsnr.onMessage(ses, (GridMemcachedMessage) msg);
    else if (msg instanceof GridRedisMessage)
        redisLsnr.onMessage(ses, (GridRedisMessage) msg);
    else if (msg instanceof GridClientPingPacket)
        ses.send(msg);
    else if (msg instanceof GridClientHandshakeRequest) {
        GridClientHandshakeRequest hs = (GridClientHandshakeRequest) msg;
        short ver = hs.version();
        if (!SUPP_VERS.contains(ver)) {
            U.error(log, "Client protocol version is not supported [ses=" + ses + ", ver=" + ver + ", supported=" + SUPP_VERS + ']');
            onSessionClosed(ses);
        } else {
            byte marshId = hs.marshallerId();
            if (marshMapLatch.getCount() > 0) {
                try {
                    U.await(marshMapLatch);
                } catch (IgniteInterruptedCheckedException e) {
                    U.error(log, "Marshaller is not initialized.", e);
                    onSessionClosed(ses);
                    return;
                }
            }
            GridClientMarshaller marsh = marshMap.get(marshId);
            if (marsh == null) {
                U.error(log, "Client marshaller ID is invalid. Note that .NET and C++ clients " + "are supported only in enterprise edition [ses=" + ses + ", marshId=" + marshId + ']');
                onSessionClosed(ses);
            } else {
                ses.addMeta(MARSHALLER.ordinal(), marsh);
                ses.send(GridClientHandshakeResponse.OK);
            }
        }
    } else {
        final GridRestRequest req = createRestRequest(ses, msg);
        if (req != null) {
            IgniteInternalFuture<GridRestResponse> taskFut = hnd.handleAsync(req);
            if (isInterruptible(msg))
                addFutureToSession(ses, taskFut);
            taskFut.listen(new CI1<IgniteInternalFuture<GridRestResponse>>() {

                @Override
                public void apply(IgniteInternalFuture<GridRestResponse> fut) {
                    removeFutureFromSession(ses, taskFut);
                    GridClientResponse res = new GridClientResponse();
                    res.requestId(msg.requestId());
                    res.clientId(msg.clientId());
                    try {
                        GridRestResponse restRes = fut.get();
                        res.sessionToken(restRes.sessionTokenBytes());
                        res.successStatus(restRes.getSuccessStatus());
                        res.errorMessage(restRes.getError());
                        Object o = restRes.getResponse();
                        // In case of metrics a little adjustment is needed.
                        if (o instanceof GridCacheRestMetrics)
                            o = ((GridCacheRestMetrics) o).map();
                        res.result(o);
                    } catch (IgniteCheckedException e) {
                        U.error(log, "Failed to process client request: " + msg, e);
                        res.successStatus(GridClientResponse.STATUS_FAILED);
                        res.errorMessage("Failed to process client request: " + e.getMessage());
                    }
                    GridNioFuture<?> sf = ses.send(res);
                    // Check if send failed.
                    sf.listen(new CI1<IgniteInternalFuture<?>>() {

                        @Override
                        public void apply(IgniteInternalFuture<?> fut) {
                            try {
                                fut.get();
                            } catch (IgniteCheckedException e) {
                                U.error(log, "Failed to process client request [ses=" + ses + ", msg=" + msg + ']', e);
                            }
                        }
                    });
                }
            });
        } else
            U.error(log, "Failed to process client request (unknown packet type) [ses=" + ses + ", msg=" + msg + ']');
    }
}
Also used : GridClientResponse(org.apache.ignite.internal.processors.rest.client.message.GridClientResponse) GridClientMarshaller(org.apache.ignite.internal.client.marshaller.GridClientMarshaller) CI1(org.apache.ignite.internal.util.typedef.CI1) GridClientPingPacket(org.apache.ignite.internal.processors.rest.client.message.GridClientPingPacket) GridRedisMessage(org.apache.ignite.internal.processors.rest.protocols.tcp.redis.GridRedisMessage) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) IgniteInterruptedCheckedException(org.apache.ignite.internal.IgniteInterruptedCheckedException) GridClientHandshakeRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientHandshakeRequest) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridRestResponse(org.apache.ignite.internal.processors.rest.GridRestResponse) GridCacheRestMetrics(org.apache.ignite.internal.processors.rest.handlers.cache.GridCacheRestMetrics) GridRestRequest(org.apache.ignite.internal.processors.rest.request.GridRestRequest)

Example 8 with GridClientMarshaller

use of org.apache.ignite.internal.client.marshaller.GridClientMarshaller in project ignite by apache.

the class GridTcpRestParser method parseClientMessage.

/**
 * Parses {@link GridClientMessage} from raw bytes.
 *
 * @param ses Session.
 * @param state Parser state.
 * @return A parsed client message.
 * @throws IOException On marshaller error.
 * @throws IgniteCheckedException If no marshaller was defined for the session.
 */
protected GridClientMessage parseClientMessage(GridNioSession ses, ParserState state) throws IOException, IgniteCheckedException {
    GridClientMessage msg;
    if (routerClient) {
        msg = new GridRouterResponse(state.buffer().toByteArray(), state.header().reqId(), state.header().clientId(), state.header().destinationId());
    } else {
        GridClientMarshaller marsh = marshaller(ses);
        msg = marsh.unmarshal(state.buffer().toByteArray());
        msg.requestId(state.header().reqId());
        msg.clientId(state.header().clientId());
        msg.destinationId(state.header().destinationId());
    }
    return msg;
}
Also used : GridRouterResponse(org.apache.ignite.internal.processors.rest.client.message.GridRouterResponse) GridClientMarshaller(org.apache.ignite.internal.client.marshaller.GridClientMarshaller) GridClientMessage(org.apache.ignite.internal.processors.rest.client.message.GridClientMessage)

Aggregations

GridClientMarshaller (org.apache.ignite.internal.client.marshaller.GridClientMarshaller)8 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)4 HashMap (java.util.HashMap)3 GridClientZipOptimizedMarshaller (org.apache.ignite.internal.client.marshaller.optimized.GridClientZipOptimizedMarshaller)3 GridClientPingPacket (org.apache.ignite.internal.processors.rest.client.message.GridClientPingPacket)3 GridRouterResponse (org.apache.ignite.internal.processors.rest.client.message.GridRouterResponse)3 ArrayList (java.util.ArrayList)2 GridClientException (org.apache.ignite.internal.client.GridClientException)2 GridClientJdkMarshaller (org.apache.ignite.internal.client.marshaller.jdk.GridClientJdkMarshaller)2 GridClientOptimizedMarshaller (org.apache.ignite.internal.client.marshaller.optimized.GridClientOptimizedMarshaller)2 GridClientHandshakeRequest (org.apache.ignite.internal.processors.rest.client.message.GridClientHandshakeRequest)2 GridClientMessage (org.apache.ignite.internal.processors.rest.client.message.GridClientMessage)2 GridClientResponse (org.apache.ignite.internal.processors.rest.client.message.GridClientResponse)2 PluginProvider (org.apache.ignite.plugin.PluginProvider)2 ByteBuffer (java.nio.ByteBuffer)1 Map (java.util.Map)1 UUID (java.util.UUID)1 IgniteException (org.apache.ignite.IgniteException)1 IgniteInternalFuture (org.apache.ignite.internal.IgniteInternalFuture)1 IgniteInterruptedCheckedException (org.apache.ignite.internal.IgniteInterruptedCheckedException)1