Search in sources :

Example 1 with GridRestRequest

use of org.apache.ignite.internal.processors.rest.request.GridRestRequest in project ignite by apache.

the class GridJettyRestHandler method createRequest.

/**
 * Creates REST request.
 *
 * @param cmd Command.
 * @param params Parameters.
 * @param req Servlet request.
 * @return REST request.
 * @throws IgniteCheckedException If creation failed.
 */
@Nullable
private GridRestRequest createRequest(GridRestCommand cmd, Map<String, String> params, HttpServletRequest req) throws IgniteCheckedException {
    GridRestRequest restReq;
    switch(cmd) {
        case GET_OR_CREATE_CACHE:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                restReq0.cacheName(params.get(CACHE_NAME_PARAM));
                String templateName = params.get(TEMPLATE_NAME_PARAM);
                if (!F.isEmpty(templateName))
                    restReq0.templateName(templateName);
                String backups = params.get(BACKUPS_PARAM);
                CacheConfigurationOverride cfg = new CacheConfigurationOverride();
                // Set cache backups.
                if (!F.isEmpty(backups)) {
                    try {
                        cfg.backups(Integer.parseInt(backups));
                    } catch (NumberFormatException e) {
                        throw new IgniteCheckedException("Failed to parse number of cache backups: " + backups, e);
                    }
                }
                // Set cache group name.
                String cacheGrp = params.get(CACHE_GROUP_PARAM);
                if (!F.isEmpty(cacheGrp))
                    cfg.cacheGroup(cacheGrp);
                // Set cache data region name.
                String dataRegion = params.get(DATA_REGION_PARAM);
                if (!F.isEmpty(dataRegion))
                    cfg.dataRegion(dataRegion);
                // Set cache write mode.
                String wrtSyncMode = params.get(WRITE_SYNCHRONIZATION_MODE_PARAM);
                if (!F.isEmpty(wrtSyncMode)) {
                    try {
                        cfg.writeSynchronizationMode(CacheWriteSynchronizationMode.valueOf(wrtSyncMode));
                    } catch (IllegalArgumentException e) {
                        throw new IgniteCheckedException("Failed to parse cache write synchronization mode: " + wrtSyncMode, e);
                    }
                }
                if (!cfg.isEmpty())
                    restReq0.configuration(cfg);
                restReq = restReq0;
                break;
            }
        case DESTROY_CACHE:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                restReq0.cacheName(params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        case ATOMIC_DECREMENT:
        case ATOMIC_INCREMENT:
            {
                DataStructuresRequest restReq0 = new DataStructuresRequest();
                restReq0.key(params.get("key"));
                restReq0.initial(longValue("init", params, null));
                restReq0.delta(longValue("delta", params, null));
                restReq = restReq0;
                break;
            }
        case CACHE_CONTAINS_KEY:
        case CACHE_CONTAINS_KEYS:
        case CACHE_GET:
        case CACHE_GET_ALL:
        case CACHE_GET_AND_PUT:
        case CACHE_GET_AND_REPLACE:
        case CACHE_PUT_IF_ABSENT:
        case CACHE_GET_AND_PUT_IF_ABSENT:
        case CACHE_PUT:
        case CACHE_PUT_ALL:
        case CACHE_REMOVE:
        case CACHE_REMOVE_VALUE:
        case CACHE_REPLACE_VALUE:
        case CACHE_GET_AND_REMOVE:
        case CACHE_REMOVE_ALL:
        case CACHE_CLEAR:
        case CACHE_ADD:
        case CACHE_CAS:
        case CACHE_METRICS:
        case CACHE_SIZE:
        case CACHE_UPDATE_TLL:
        case CACHE_METADATA:
        case CACHE_REPLACE:
        case CACHE_APPEND:
        case CACHE_PREPEND:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                String cacheName = params.get(CACHE_NAME_PARAM);
                restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);
                String keyType = params.get("keyType");
                String valType = params.get("valueType");
                Converter converter = new Converter(cacheName);
                restReq0.key(converter.convert(keyType, params.get("key")));
                restReq0.value(converter.convert(valType, params.get("val")));
                restReq0.value2(converter.convert(valType, params.get("val2")));
                Object val1 = converter.convert(valType, params.get("val1"));
                if (val1 != null)
                    restReq0.value(val1);
                // Cache operations via REST will use binary objects.
                restReq0.cacheFlags(intValue("cacheFlags", params, KEEP_BINARIES_MASK));
                restReq0.ttl(longValue("exp", params, null));
                if (cmd == CACHE_GET_ALL || cmd == CACHE_PUT_ALL || cmd == CACHE_REMOVE_ALL || cmd == CACHE_CONTAINS_KEYS) {
                    List<Object> keys = converter.values(keyType, "k", params);
                    List<Object> vals = converter.values(valType, "v", params);
                    if (keys.size() < vals.size())
                        throw new IgniteCheckedException("Number of keys must be greater or equals to number of values.");
                    Map<Object, Object> map = U.newHashMap(keys.size());
                    Iterator<Object> keyIt = keys.iterator();
                    Iterator<Object> valIt = vals.iterator();
                    while (keyIt.hasNext()) map.put(keyIt.next(), valIt.hasNext() ? valIt.next() : null);
                    restReq0.values(map);
                }
                restReq = restReq0;
                break;
            }
        case TOPOLOGY:
        case NODE:
            {
                GridRestTopologyRequest restReq0 = new GridRestTopologyRequest();
                restReq0.includeMetrics(Boolean.parseBoolean(params.get("mtr")));
                restReq0.includeAttributes(Boolean.parseBoolean(params.get("attr")));
                String caches = params.get("caches");
                restReq0.includeCaches(caches == null || Boolean.parseBoolean(caches));
                restReq0.nodeIp(params.get("ip"));
                restReq0.nodeId(uuidValue("id", params));
                restReq = restReq0;
                break;
            }
        case EXE:
        case RESULT:
        case NOOP:
            {
                GridRestTaskRequest restReq0 = new GridRestTaskRequest();
                restReq0.taskId(params.get("id"));
                restReq0.taskName(params.get("name"));
                restReq0.params(new Converter().values(null, "p", params));
                restReq0.async(Boolean.parseBoolean(params.get("async")));
                restReq0.timeout(longValue("timeout", params, 0L));
                restReq = restReq0;
                break;
            }
        case LOG:
            {
                GridRestLogRequest restReq0 = new GridRestLogRequest();
                restReq0.path(params.get("path"));
                restReq0.from(intValue("from", params, -1));
                restReq0.to(intValue("to", params, -1));
                restReq = restReq0;
                break;
            }
        case DATA_REGION_METRICS:
        case DATA_STORAGE_METRICS:
        case NAME:
        case VERSION:
        case PROBE:
            {
                restReq = new GridRestRequest();
                break;
            }
        case CLUSTER_ACTIVE:
        case CLUSTER_INACTIVE:
        case CLUSTER_ACTIVATE:
        case CLUSTER_DEACTIVATE:
        case CLUSTER_CURRENT_STATE:
            {
                GridRestChangeStateRequest restReq0 = new GridRestChangeStateRequest();
                if (cmd == CLUSTER_CURRENT_STATE)
                    restReq0.reqCurrentState();
                else if (cmd == CLUSTER_ACTIVE || cmd == CLUSTER_ACTIVATE)
                    restReq0.active(true);
                else
                    restReq0.active(false);
                restReq0.forceDeactivation(booleanValue(GridRestClusterStateRequest.ARG_FORCE, params, false));
                restReq = restReq0;
                break;
            }
        case CLUSTER_STATE:
        case CLUSTER_SET_STATE:
            {
                GridRestClusterStateRequest restReq0 = new GridRestClusterStateRequest();
                if (cmd == CLUSTER_STATE)
                    restReq0.reqCurrentMode();
                else {
                    ClusterState newState = enumValue("state", params, ClusterState.class);
                    restReq0.state(newState);
                    restReq0.forceDeactivation(booleanValue(GridRestClusterStateRequest.ARG_FORCE, params, false));
                }
                restReq = restReq0;
                break;
            }
        case CLUSTER_NAME:
            {
                restReq = new GridRestClusterNameRequest();
                break;
            }
        case BASELINE_CURRENT_STATE:
        case BASELINE_SET:
        case BASELINE_ADD:
        case BASELINE_REMOVE:
            {
                GridRestBaselineRequest restReq0 = new GridRestBaselineRequest();
                restReq0.topologyVersion(longValue("topVer", params, null));
                restReq0.consistentIds(new Converter().values(null, "consistentId", params));
                restReq = restReq0;
                break;
            }
        case AUTHENTICATE:
            {
                restReq = new GridRestRequest();
                break;
            }
        case ADD_USER:
        case REMOVE_USER:
        case UPDATE_USER:
            {
                RestUserActionRequest restReq0 = new RestUserActionRequest();
                restReq0.user(params.get("user"));
                restReq0.password(params.get("password"));
                restReq = restReq0;
                break;
            }
        case EXECUTE_SQL_QUERY:
        case EXECUTE_SQL_FIELDS_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                String cacheName = params.get(CACHE_NAME_PARAM);
                restReq0.sqlQuery(params.get("qry"));
                restReq0.arguments(new Converter(cacheName).values(null, "arg", params).toArray());
                restReq0.typeName(params.get("type"));
                String pageSize = params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                String keepBinary = params.get("keepBinary");
                if (keepBinary != null)
                    restReq0.keepBinary(Boolean.parseBoolean(keepBinary));
                String distributedJoins = params.get("distributedJoins");
                if (distributedJoins != null)
                    restReq0.distributedJoins(Boolean.parseBoolean(distributedJoins));
                restReq0.cacheName(cacheName);
                if (cmd == EXECUTE_SQL_QUERY)
                    restReq0.queryType(RestQueryRequest.QueryType.SQL);
                else
                    restReq0.queryType(RestQueryRequest.QueryType.SQL_FIELDS);
                restReq = restReq0;
                break;
            }
        case EXECUTE_SCAN_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                restReq0.sqlQuery(params.get("qry"));
                String pageSize = params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                restReq0.cacheName(params.get(CACHE_NAME_PARAM));
                restReq0.className(params.get("className"));
                restReq0.queryType(RestQueryRequest.QueryType.SCAN);
                restReq = restReq0;
                break;
            }
        case FETCH_SQL_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                String qryId = params.get("qryId");
                if (qryId != null)
                    restReq0.queryId(Long.parseLong(qryId));
                String pageSize = params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                restReq0.cacheName(params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        case CLOSE_SQL_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                String qryId = params.get("qryId");
                if (qryId != null)
                    restReq0.queryId(Long.parseLong(qryId));
                restReq0.cacheName(params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        case NODE_STATE_BEFORE_START:
            {
                restReq = new GridRestNodeStateBeforeStartRequest();
                break;
            }
        case WARM_UP:
            {
                GridRestWarmUpRequest restReq0 = new GridRestWarmUpRequest();
                restReq0.stopWarmUp(Boolean.parseBoolean(String.valueOf(params.get("stopWarmUp"))));
                restReq = restReq0;
                break;
            }
        default:
            throw new IgniteCheckedException("Invalid command: " + cmd);
    }
    restReq.address(new InetSocketAddress(req.getRemoteAddr(), req.getRemotePort()));
    restReq.command(cmd);
    Object certs = req.getAttribute("javax.servlet.request.X509Certificate");
    if (certs instanceof X509Certificate[])
        restReq.certificates((X509Certificate[]) certs);
    // TODO: In IGNITE 3.0 we should check credentials only for AUTHENTICATE command.
    if (!credentials(params, IGNITE_LOGIN, IGNITE_PASSWORD, restReq))
        credentials(params, USER_PARAM, PWD_PARAM, restReq);
    String clientId = params.get("clientId");
    try {
        if (clientId != null)
            restReq.clientId(UUID.fromString(clientId));
    } catch (Exception ignored) {
    // Ignore invalid client id. Rest handler will process this logic.
    }
    String destId = params.get("destId");
    try {
        if (destId != null)
            restReq.destinationId(UUID.fromString(destId));
    } catch (IllegalArgumentException ignored) {
    // Don't fail - try to execute locally.
    }
    String sesTokStr = params.get("sessionToken");
    try {
        if (sesTokStr != null) {
            // Token is a UUID encoded as 16 bytes as HEX.
            byte[] bytes = U.hexString2ByteArray(sesTokStr);
            if (bytes.length == 16)
                restReq.sessionToken(bytes);
        }
    } catch (IllegalArgumentException ignored) {
    // Ignore invalid session token.
    }
    return restReq;
}
Also used : GridRestClusterStateRequest(org.apache.ignite.internal.processors.rest.request.GridRestClusterStateRequest) GridRestTopologyRequest(org.apache.ignite.internal.processors.rest.request.GridRestTopologyRequest) InetSocketAddress(java.net.InetSocketAddress) GridRestLogRequest(org.apache.ignite.internal.processors.rest.request.GridRestLogRequest) GridRestCacheRequest(org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridRestTaskRequest(org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest) RestQueryRequest(org.apache.ignite.internal.processors.rest.request.RestQueryRequest) Iterator(java.util.Iterator) DataStructuresRequest(org.apache.ignite.internal.processors.rest.request.DataStructuresRequest) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) GridRestRequest(org.apache.ignite.internal.processors.rest.request.GridRestRequest) ClusterState(org.apache.ignite.cluster.ClusterState) GridRestClusterNameRequest(org.apache.ignite.internal.processors.rest.request.GridRestClusterNameRequest) CacheConfigurationOverride(org.apache.ignite.internal.processors.cache.CacheConfigurationOverride) GridRestBaselineRequest(org.apache.ignite.internal.processors.rest.request.GridRestBaselineRequest) GridRestNodeStateBeforeStartRequest(org.apache.ignite.internal.processors.rest.request.GridRestNodeStateBeforeStartRequest) GridRestWarmUpRequest(org.apache.ignite.internal.processors.rest.request.GridRestWarmUpRequest) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) IOException(java.io.IOException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) RestUserActionRequest(org.apache.ignite.internal.processors.rest.request.RestUserActionRequest) GridRestChangeStateRequest(org.apache.ignite.internal.processors.rest.request.GridRestChangeStateRequest) BinaryObject(org.apache.ignite.binary.BinaryObject) Map(java.util.Map) Nullable(org.jetbrains.annotations.Nullable)

Example 2 with GridRestRequest

use of org.apache.ignite.internal.processors.rest.request.GridRestRequest in project ignite by apache.

the class GridJettyRestHandler method createRequest.

/**
 * Creates REST request.
 *
 * @param cmd Command.
 * @param params Parameters.
 * @param req Servlet request.
 * @return REST request.
 * @throws IgniteCheckedException If creation failed.
 */
@Nullable
private GridRestRequest createRequest(GridRestCommand cmd, Map<String, Object> params, HttpServletRequest req) throws IgniteCheckedException {
    GridRestRequest restReq;
    switch(cmd) {
        case GET_OR_CREATE_CACHE:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                String templateName = (String) params.get(TEMPLATE_NAME_PARAM);
                if (!F.isEmpty(templateName))
                    restReq0.templateName(templateName);
                String backups = (String) params.get(BACKUPS_PARAM);
                CacheConfigurationOverride cfg = new CacheConfigurationOverride();
                // Set cache backups.
                if (!F.isEmpty(backups)) {
                    try {
                        cfg.backups(Integer.parseInt(backups));
                    } catch (NumberFormatException e) {
                        throw new IgniteCheckedException("Failed to parse number of cache backups: " + backups, e);
                    }
                }
                // Set cache group name.
                String cacheGrp = (String) params.get(CACHE_GROUP_PARAM);
                if (!F.isEmpty(cacheGrp))
                    cfg.cacheGroup(cacheGrp);
                // Set cache data region name.
                String dataRegion = (String) params.get(DATA_REGION_PARAM);
                if (!F.isEmpty(dataRegion))
                    cfg.dataRegion(dataRegion);
                // Set cache write mode.
                String wrtSyncMode = (String) params.get(WRITE_SYNCHRONIZATION_MODE_PARAM);
                if (!F.isEmpty(wrtSyncMode)) {
                    try {
                        cfg.writeSynchronizationMode(CacheWriteSynchronizationMode.valueOf(wrtSyncMode));
                    } catch (IllegalArgumentException e) {
                        throw new IgniteCheckedException("Failed to parse cache write synchronization mode: " + wrtSyncMode, e);
                    }
                }
                if (!cfg.isEmpty())
                    restReq0.configuration(cfg);
                restReq = restReq0;
                break;
            }
        case DESTROY_CACHE:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        case ATOMIC_DECREMENT:
        case ATOMIC_INCREMENT:
            {
                DataStructuresRequest restReq0 = new DataStructuresRequest();
                restReq0.key(params.get("key"));
                restReq0.initial(longValue("init", params, null));
                restReq0.delta(longValue("delta", params, null));
                restReq = restReq0;
                break;
            }
        case CACHE_CONTAINS_KEY:
        case CACHE_CONTAINS_KEYS:
        case CACHE_GET:
        case CACHE_GET_ALL:
        case CACHE_GET_AND_PUT:
        case CACHE_GET_AND_REPLACE:
        case CACHE_PUT_IF_ABSENT:
        case CACHE_GET_AND_PUT_IF_ABSENT:
        case CACHE_PUT:
        case CACHE_PUT_ALL:
        case CACHE_REMOVE:
        case CACHE_REMOVE_VALUE:
        case CACHE_REPLACE_VALUE:
        case CACHE_GET_AND_REMOVE:
        case CACHE_REMOVE_ALL:
        case CACHE_CLEAR:
        case CACHE_ADD:
        case CACHE_CAS:
        case CACHE_METRICS:
        case CACHE_SIZE:
        case CACHE_METADATA:
        case CACHE_REPLACE:
        case CACHE_APPEND:
        case CACHE_PREPEND:
            {
                GridRestCacheRequest restReq0 = new GridRestCacheRequest();
                String cacheName = (String) params.get(CACHE_NAME_PARAM);
                restReq0.cacheName(F.isEmpty(cacheName) ? null : cacheName);
                String keyType = (String) params.get("keyType");
                String valType = (String) params.get("valueType");
                restReq0.key(convert(keyType, params.get("key")));
                restReq0.value(convert(valType, params.get("val")));
                restReq0.value2(convert(valType, params.get("val2")));
                Object val1 = convert(valType, params.get("val1"));
                if (val1 != null)
                    restReq0.value(val1);
                // Cache operations via REST will use binary objects.
                restReq0.cacheFlags(intValue("cacheFlags", params, KEEP_BINARIES_MASK));
                restReq0.ttl(longValue("exp", params, null));
                if (cmd == CACHE_GET_ALL || cmd == CACHE_PUT_ALL || cmd == CACHE_REMOVE_ALL || cmd == CACHE_CONTAINS_KEYS) {
                    List<Object> keys = values(keyType, "k", params);
                    List<Object> vals = values(valType, "v", params);
                    if (keys.size() < vals.size())
                        throw new IgniteCheckedException("Number of keys must be greater or equals to number of values.");
                    Map<Object, Object> map = U.newHashMap(keys.size());
                    Iterator<Object> keyIt = keys.iterator();
                    Iterator<Object> valIt = vals.iterator();
                    while (keyIt.hasNext()) map.put(keyIt.next(), valIt.hasNext() ? valIt.next() : null);
                    restReq0.values(map);
                }
                restReq = restReq0;
                break;
            }
        case TOPOLOGY:
        case NODE:
            {
                GridRestTopologyRequest restReq0 = new GridRestTopologyRequest();
                restReq0.includeMetrics(Boolean.parseBoolean((String) params.get("mtr")));
                restReq0.includeAttributes(Boolean.parseBoolean((String) params.get("attr")));
                restReq0.nodeIp((String) params.get("ip"));
                restReq0.nodeId(uuidValue("id", params));
                restReq = restReq0;
                break;
            }
        case EXE:
        case RESULT:
        case NOOP:
            {
                GridRestTaskRequest restReq0 = new GridRestTaskRequest();
                restReq0.taskId((String) params.get("id"));
                restReq0.taskName((String) params.get("name"));
                restReq0.params(values(null, "p", params));
                restReq0.async(Boolean.parseBoolean((String) params.get("async")));
                restReq0.timeout(longValue("timeout", params, 0L));
                restReq = restReq0;
                break;
            }
        case LOG:
            {
                GridRestLogRequest restReq0 = new GridRestLogRequest();
                restReq0.path((String) params.get("path"));
                restReq0.from(intValue("from", params, -1));
                restReq0.to(intValue("to", params, -1));
                restReq = restReq0;
                break;
            }
        case NAME:
        case VERSION:
            {
                restReq = new GridRestRequest();
                break;
            }
        case CLUSTER_ACTIVE:
        case CLUSTER_INACTIVE:
        case CLUSTER_CURRENT_STATE:
            {
                GridRestChangeStateRequest restReq0 = new GridRestChangeStateRequest();
                if (cmd == CLUSTER_CURRENT_STATE)
                    restReq0.reqCurrentState();
                else
                    restReq0.active(cmd == CLUSTER_ACTIVE);
                restReq = restReq0;
                break;
            }
        case ADD_USER:
        case REMOVE_USER:
        case UPDATE_USER:
            {
                RestUserActionRequest restReq0 = new RestUserActionRequest();
                restReq0.user((String) params.get("user"));
                restReq0.password((String) params.get("password"));
                restReq = restReq0;
                break;
            }
        case EXECUTE_SQL_QUERY:
        case EXECUTE_SQL_FIELDS_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                restReq0.sqlQuery((String) params.get("qry"));
                restReq0.arguments(values(null, "arg", params).toArray());
                restReq0.typeName((String) params.get("type"));
                String pageSize = (String) params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                String distributedJoins = (String) params.get("distributedJoins");
                if (distributedJoins != null)
                    restReq0.distributedJoins(Boolean.parseBoolean(distributedJoins));
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                if (cmd == EXECUTE_SQL_QUERY)
                    restReq0.queryType(RestQueryRequest.QueryType.SQL);
                else
                    restReq0.queryType(RestQueryRequest.QueryType.SQL_FIELDS);
                restReq = restReq0;
                break;
            }
        case EXECUTE_SCAN_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                restReq0.sqlQuery((String) params.get("qry"));
                String pageSize = (String) params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                restReq0.className((String) params.get("className"));
                restReq0.queryType(RestQueryRequest.QueryType.SCAN);
                restReq = restReq0;
                break;
            }
        case FETCH_SQL_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                String qryId = (String) params.get("qryId");
                if (qryId != null)
                    restReq0.queryId(Long.parseLong(qryId));
                String pageSize = (String) params.get("pageSize");
                if (pageSize != null)
                    restReq0.pageSize(Integer.parseInt(pageSize));
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        case CLOSE_SQL_QUERY:
            {
                RestQueryRequest restReq0 = new RestQueryRequest();
                String qryId = (String) params.get("qryId");
                if (qryId != null)
                    restReq0.queryId(Long.parseLong(qryId));
                restReq0.cacheName((String) params.get(CACHE_NAME_PARAM));
                restReq = restReq0;
                break;
            }
        default:
            throw new IgniteCheckedException("Invalid command: " + cmd);
    }
    restReq.address(new InetSocketAddress(req.getRemoteAddr(), req.getRemotePort()));
    restReq.command(cmd);
    if (params.containsKey(IGNITE_LOGIN) || params.containsKey(IGNITE_PASSWORD)) {
        SecurityCredentials cred = new SecurityCredentials((String) params.get(IGNITE_LOGIN), (String) params.get(IGNITE_PASSWORD));
        restReq.credentials(cred);
    }
    String clientId = (String) params.get("clientId");
    try {
        if (clientId != null)
            restReq.clientId(UUID.fromString(clientId));
    } catch (Exception ignored) {
    // Ignore invalid client id. Rest handler will process this logic.
    }
    String destId = (String) params.get("destId");
    try {
        if (destId != null)
            restReq.destinationId(UUID.fromString(destId));
    } catch (IllegalArgumentException ignored) {
    // Don't fail - try to execute locally.
    }
    String sesTokStr = (String) params.get("sessionToken");
    try {
        if (sesTokStr != null)
            restReq.sessionToken(U.hexString2ByteArray(sesTokStr));
    } catch (IllegalArgumentException ignored) {
    // Ignore invalid session token.
    }
    return restReq;
}
Also used : CacheConfigurationOverride(org.apache.ignite.internal.processors.cache.CacheConfigurationOverride) GridRestTopologyRequest(org.apache.ignite.internal.processors.rest.request.GridRestTopologyRequest) InetSocketAddress(java.net.InetSocketAddress) GridRestLogRequest(org.apache.ignite.internal.processors.rest.request.GridRestLogRequest) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) IOException(java.io.IOException) JsonProcessingException(com.fasterxml.jackson.core.JsonProcessingException) RestUserActionRequest(org.apache.ignite.internal.processors.rest.request.RestUserActionRequest) SecurityCredentials(org.apache.ignite.plugin.security.SecurityCredentials) GridRestCacheRequest(org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest) GridRestChangeStateRequest(org.apache.ignite.internal.processors.rest.request.GridRestChangeStateRequest) IgniteCheckedException(org.apache.ignite.IgniteCheckedException) GridRestTaskRequest(org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest) RestQueryRequest(org.apache.ignite.internal.processors.rest.request.RestQueryRequest) Iterator(java.util.Iterator) DataStructuresRequest(org.apache.ignite.internal.processors.rest.request.DataStructuresRequest) List(java.util.List) LinkedList(java.util.LinkedList) GridRestRequest(org.apache.ignite.internal.processors.rest.request.GridRestRequest) Map(java.util.Map) Nullable(org.jetbrains.annotations.Nullable)

Example 3 with GridRestRequest

use of org.apache.ignite.internal.processors.rest.request.GridRestRequest 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 4 with GridRestRequest

use of org.apache.ignite.internal.processors.rest.request.GridRestRequest in project ignite by apache.

the class GridTcpRestNioListener method createRestRequest.

/**
 * Creates a REST request object from client TCP binary packet.
 *
 * @param ses NIO session.
 * @param msg Request message.
 * @return REST request object.
 */
@Nullable
private GridRestRequest createRestRequest(GridNioSession ses, GridClientMessage msg) {
    GridRestRequest restReq = null;
    if (msg instanceof GridClientAuthenticationRequest) {
        GridClientAuthenticationRequest req = (GridClientAuthenticationRequest) msg;
        restReq = new GridRestAuthenticationRequest();
        restReq.command(NOOP);
        ses.addMeta(CREDS_KEY, req.credentials());
        ses.addMeta(USER_ATTR_KEY, req.userAttributes());
    } else if (msg instanceof GridClientCacheRequest) {
        GridClientCacheRequest req = (GridClientCacheRequest) msg;
        GridRestCacheRequest restCacheReq = new GridRestCacheRequest();
        restCacheReq.cacheName(req.cacheName());
        restCacheReq.cacheFlags(req.cacheFlagsOn());
        restCacheReq.key(req.key());
        restCacheReq.value(req.value());
        restCacheReq.value2(req.value2());
        Map vals = req.values();
        if (vals != null)
            restCacheReq.values(new HashMap<Object, Object>(vals));
        restCacheReq.command(cacheCmdMap.get(req.operation()));
        restReq = restCacheReq;
    } else if (msg instanceof GridClientTaskRequest) {
        GridClientTaskRequest req = (GridClientTaskRequest) msg;
        GridRestTaskRequest restTaskReq = new GridRestTaskRequest();
        restTaskReq.command(EXE);
        restTaskReq.taskName(req.taskName());
        restTaskReq.params(Arrays.asList(req.argument()));
        restReq = restTaskReq;
    } else if (msg instanceof GridClientTopologyRequest) {
        GridClientTopologyRequest req = (GridClientTopologyRequest) msg;
        GridRestTopologyRequest restTopReq = new GridRestTopologyRequest();
        restTopReq.includeMetrics(req.includeMetrics());
        restTopReq.includeAttributes(req.includeAttributes());
        if (req.nodeId() != null) {
            restTopReq.command(NODE);
            restTopReq.nodeId(req.nodeId());
        } else if (req.nodeIp() != null) {
            restTopReq.command(NODE);
            restTopReq.nodeIp(req.nodeIp());
        } else
            restTopReq.command(TOPOLOGY);
        restReq = restTopReq;
    } else if (msg instanceof GridClientStateRequest) {
        GridClientStateRequest req = (GridClientStateRequest) msg;
        GridRestChangeStateRequest restChangeReq = new GridRestChangeStateRequest();
        if (req.isReqCurrentState()) {
            restChangeReq.reqCurrentState();
            restChangeReq.command(CLUSTER_CURRENT_STATE);
        } else {
            restChangeReq.active(req.active());
            restChangeReq.command(req.active() ? CLUSTER_ACTIVATE : CLUSTER_DEACTIVATE);
        }
        restReq = restChangeReq;
    } else if (msg instanceof GridClientClusterStateRequest) {
        GridClientClusterStateRequest req = (GridClientClusterStateRequest) msg;
        boolean forceDeactivation = !(msg instanceof GridClientClusterStateRequestV2) || ((GridClientClusterStateRequestV2) msg).forceDeactivation();
        GridRestClusterStateRequest restChangeReq = new GridRestClusterStateRequest();
        if (req.isReqCurrentState()) {
            restChangeReq.reqCurrentMode();
            restChangeReq.command(CLUSTER_STATE);
        } else {
            restChangeReq.state(req.state());
            restChangeReq.command(CLUSTER_SET_STATE);
            restChangeReq.forceDeactivation(forceDeactivation);
        }
        restReq = restChangeReq;
    } else if (msg instanceof GridClientClusterNameRequest)
        restReq = new GridRestClusterNameRequest();
    else if (msg instanceof GridClientNodeStateBeforeStartRequest) {
        GridClientNodeStateBeforeStartRequest reqClient = (GridClientNodeStateBeforeStartRequest) msg;
        if (reqClient instanceof GridClientWarmUpRequest) {
            GridClientWarmUpRequest warmUpReqClient = (GridClientWarmUpRequest) reqClient;
            restReq = new GridRestWarmUpRequest().stopWarmUp(warmUpReqClient.stopWarmUp());
            restReq.command(WARM_UP);
        } else {
            restReq = new GridRestNodeStateBeforeStartRequest();
            restReq.command(NODE_STATE_BEFORE_START);
        }
    }
    if (restReq != null) {
        restReq.destinationId(msg.destinationId());
        restReq.clientId(msg.clientId());
        restReq.sessionToken(msg.sessionToken());
        restReq.address(ses.remoteAddress());
        restReq.certificates(ses.certificates());
        restReq.credentials(ses.meta(CREDS_KEY));
        restReq.userAttributes(ses.meta(USER_ATTR_KEY));
    }
    return restReq;
}
Also used : GridRestClusterStateRequest(org.apache.ignite.internal.processors.rest.request.GridRestClusterStateRequest) GridClientAuthenticationRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientAuthenticationRequest) GridRestClusterNameRequest(org.apache.ignite.internal.processors.rest.request.GridRestClusterNameRequest) GridClientWarmUpRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientWarmUpRequest) GridRestTopologyRequest(org.apache.ignite.internal.processors.rest.request.GridRestTopologyRequest) GridClientClusterNameRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientClusterNameRequest) GridClientNodeStateBeforeStartRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientNodeStateBeforeStartRequest) GridRestNodeStateBeforeStartRequest(org.apache.ignite.internal.processors.rest.request.GridRestNodeStateBeforeStartRequest) GridRestWarmUpRequest(org.apache.ignite.internal.processors.rest.request.GridRestWarmUpRequest) GridClientClusterStateRequestV2(org.apache.ignite.internal.processors.rest.client.message.GridClientClusterStateRequestV2) GridClientClusterStateRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientClusterStateRequest) GridRestCacheRequest(org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest) GridRestChangeStateRequest(org.apache.ignite.internal.processors.rest.request.GridRestChangeStateRequest) GridRestTaskRequest(org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest) GridClientStateRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientStateRequest) GridRestAuthenticationRequest(org.apache.ignite.internal.processors.rest.request.GridRestAuthenticationRequest) GridClientTopologyRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientTopologyRequest) GridRestRequest(org.apache.ignite.internal.processors.rest.request.GridRestRequest) GridClientCacheRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientCacheRequest) Map(java.util.Map) EnumMap(java.util.EnumMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) GridClientTaskRequest(org.apache.ignite.internal.processors.rest.client.message.GridClientTaskRequest) Nullable(org.jetbrains.annotations.Nullable)

Example 5 with GridRestRequest

use of org.apache.ignite.internal.processors.rest.request.GridRestRequest in project ignite by apache.

the class RestProcessorInitializationTest method testCustomRestProcessorInitialization.

/**
 * @throws Exception if failed.
 */
@Test
public void testCustomRestProcessorInitialization() throws Exception {
    IgniteConfiguration cfg = getConfiguration(getTestIgniteInstanceName(0)).setConnectorConfiguration(new ConnectorConfiguration());
    cfg.setPluginProviders(new TestRestProcessorProvider());
    IgniteEx ignite = startGrid(cfg);
    assertEquals(ignite.context().rest().getClass(), TestGridRestProcessorImpl.class);
    TestGridRestProcessorImpl rest = (TestGridRestProcessorImpl) ignite.context().rest();
    GridRestRequest req = new GridRestRequest();
    req.command(GridRestCommand.VERSION);
    GridRestResponse res = rest.handleAsync0(req).get();
    IgniteBiTuple<GridRestRequest, IgniteInternalFuture<GridRestResponse>> entry = rest.getTuple();
    assertEquals(req, entry.get1());
    assertEquals(res, entry.get2().get());
}
Also used : IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) IgniteEx(org.apache.ignite.internal.IgniteEx) ConnectorConfiguration(org.apache.ignite.configuration.ConnectorConfiguration) GridRestRequest(org.apache.ignite.internal.processors.rest.request.GridRestRequest) IgniteInternalFuture(org.apache.ignite.internal.IgniteInternalFuture) GridCommonAbstractTest(org.apache.ignite.testframework.junits.common.GridCommonAbstractTest) Test(org.junit.Test)

Aggregations

GridRestRequest (org.apache.ignite.internal.processors.rest.request.GridRestRequest)6 Map (java.util.Map)4 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)3 IOException (java.io.IOException)3 IgniteCheckedException (org.apache.ignite.IgniteCheckedException)3 GridRestCacheRequest (org.apache.ignite.internal.processors.rest.request.GridRestCacheRequest)3 GridRestChangeStateRequest (org.apache.ignite.internal.processors.rest.request.GridRestChangeStateRequest)3 GridRestTaskRequest (org.apache.ignite.internal.processors.rest.request.GridRestTaskRequest)3 GridRestTopologyRequest (org.apache.ignite.internal.processors.rest.request.GridRestTopologyRequest)3 Nullable (org.jetbrains.annotations.Nullable)3 InetSocketAddress (java.net.InetSocketAddress)2 ArrayList (java.util.ArrayList)2 Iterator (java.util.Iterator)2 LinkedList (java.util.LinkedList)2 List (java.util.List)2 BinaryObject (org.apache.ignite.binary.BinaryObject)2 IgniteInternalFuture (org.apache.ignite.internal.IgniteInternalFuture)2 CacheConfigurationOverride (org.apache.ignite.internal.processors.cache.CacheConfigurationOverride)2 GridRestResponse (org.apache.ignite.internal.processors.rest.GridRestResponse)2 EnumMap (java.util.EnumMap)1