http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTaskResultBean.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTaskResultBean.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTaskResultBean.java deleted file mode 100644 index a5c313b..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTaskResultBean.java +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.client.message; - -import org.apache.ignite.internal.util.portable.*; -import org.apache.ignite.portables.*; -import org.apache.ignite.internal.util.typedef.internal.*; - -import java.io.*; - -/** - * Task result. - */ -public class GridClientTaskResultBean implements Externalizable, PortableMarshalAware { - /** */ - private static final long serialVersionUID = 0L; - - /** Synthetic ID containing task ID and result holding node ID. */ - private String id; - - /** Execution finished flag. */ - private boolean finished; - - /** Result. */ - private Object res; - - /** Error if any occurs while execution. */ - private String error; - - /** - * @return Task ID. - */ - public String getId() { - return id; - } - - /** - * @param id Task ID. - */ - public void setId(String id) { - this.id = id; - } - - /** - * @return {@code true} if execution finished. - */ - public boolean isFinished() { - return finished; - } - - /** - * @param finished {@code true} if execution finished. - */ - public void setFinished(boolean finished) { - this.finished = finished; - } - - /** - * @return Task result. - */ - @SuppressWarnings("unchecked") - public <R> R getResult() { - return (R)res; - } - - /** - * @param res Task result. - */ - public void setResult(Object res) { - this.res = res; - } - - /** - * @return Error. - */ - public String getError() { - return error; - } - - /** - * @param error Error. - */ - public void setError(String error) { - this.error = error; - } - - /** {@inheritDoc} */ - @Override public void writePortable(PortableWriter writer) throws PortableException { - PortableRawWriterEx raw = (PortableRawWriterEx)writer.rawWriter(); - - raw.writeString(id); - raw.writeBoolean(finished); - - raw.writeObject(res); - - raw.writeString(error); - } - - /** {@inheritDoc} */ - @Override public void readPortable(PortableReader reader) throws PortableException { - PortableRawReaderEx raw = (PortableRawReaderEx)reader.rawReader(); - - id = raw.readString(); - finished = raw.readBoolean(); - - res = raw.readObject(); - - error = raw.readString(); - } - - /** {@inheritDoc} */ - @Override public void writeExternal(ObjectOutput out) throws IOException { - U.writeString(out, id); - out.writeBoolean(finished); - out.writeObject(res); - U.writeString(out, error); - } - - /** {@inheritDoc} */ - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - id = U.readString(in); - finished = in.readBoolean(); - res = in.readObject(); - error = U.readString(in); - } - - /** {@inheritDoc} */ - @Override public String toString() { - return getClass().getSimpleName() + " [res=" + res + ", error=" + error + - ", finished=" + finished + ", id=" + id + "]"; - } -}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTopologyRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTopologyRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTopologyRequest.java deleted file mode 100644 index 69de004..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridClientTopologyRequest.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.client.message; - -import org.apache.ignite.portables.*; -import org.apache.ignite.internal.util.typedef.internal.*; - -import java.io.*; -import java.util.*; - -/** - * {@code Topology} command request. - */ -public class GridClientTopologyRequest extends GridClientAbstractMessage { - /** */ - private static final long serialVersionUID = 0L; - - /** Id of requested node. */ - private UUID nodeId; - - /** IP address of requested node. */ - private String nodeIp; - - /** Include metrics flag. */ - private boolean includeMetrics; - - /** Include node attributes flag. */ - private boolean includeAttrs; - - /** - * @return Include metrics flag. - */ - public boolean includeMetrics() { - return includeMetrics; - } - - /** - * @param includeMetrics Include metrics flag. - */ - public void includeMetrics(boolean includeMetrics) { - this.includeMetrics = includeMetrics; - } - - /** - * @return Include node attributes flag. - */ - public boolean includeAttributes() { - return includeAttrs; - } - - /** - * @param includeAttrs Include node attributes flag. - */ - public void includeAttributes(boolean includeAttrs) { - this.includeAttrs = includeAttrs; - } - - /** - * @return Node identifier, if specified, {@code null} otherwise. - */ - public UUID nodeId() { - return nodeId; - } - - /** - * @param nodeId Node identifier to lookup. - */ - public void nodeId(UUID nodeId) { - this.nodeId = nodeId; - } - - /** - * @return Node ip address if specified, {@code null} otherwise. - */ - public String nodeIp() { - return nodeIp; - } - - /** - * @param nodeIp Node ip address to lookup. - */ - public void nodeIp(String nodeIp) { - this.nodeIp = nodeIp; - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object o) { - if (this == o) - return true; - - if (o == null || getClass() != o.getClass()) - return false; - - GridClientTopologyRequest other = (GridClientTopologyRequest)o; - - return includeAttrs == other.includeAttrs && - includeMetrics == other.includeMetrics; - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - return 31 * (includeMetrics ? 1 : 0) + - (includeAttrs ? 1 : 0); - } - - /** {@inheritDoc} */ - @Override public void writePortable(PortableWriter writer) throws PortableException { - super.writePortable(writer); - - PortableRawWriter raw = writer.rawWriter(); - - raw.writeUuid(nodeId); - raw.writeString(nodeIp); - raw.writeBoolean(includeMetrics); - raw.writeBoolean(includeAttrs); - } - - /** {@inheritDoc} */ - @Override public void readPortable(PortableReader reader) throws PortableException { - super.readPortable(reader); - - PortableRawReader raw = reader.rawReader(); - - nodeId = raw.readUuid(); - nodeIp = raw.readString(); - includeMetrics = raw.readBoolean(); - includeAttrs = raw.readBoolean(); - } - - /** {@inheritDoc} */ - @Override public void writeExternal(ObjectOutput out) throws IOException { - super.writeExternal(out); - - U.writeUuid(out, nodeId); - - U.writeString(out, nodeIp); - - out.writeBoolean(includeMetrics); - out.writeBoolean(includeAttrs); - } - - /** {@inheritDoc} */ - @Override public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException { - super.readExternal(in); - - nodeId = U.readUuid(in); - - nodeIp = U.readString(in); - - includeMetrics = in.readBoolean(); - includeAttrs = in.readBoolean(); - } - - /** {@inheritDoc} */ - @Override public String toString() { - return getClass().getSimpleName() + " [includeMetrics=" + includeMetrics + - ", includeAttrs=" + includeAttrs + "]"; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterRequest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterRequest.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterRequest.java deleted file mode 100644 index 1cb79f9..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterRequest.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.client.message; - -import java.util.*; - -/** - * Container for routed message information. - */ -public class GridRouterRequest extends GridClientAbstractMessage { - /** */ - private static final long serialVersionUID = 0L; - - /** Raw message. */ - private final byte[] body; - - /** - * @param body Message in raw form. - * @param clientId Client id. - * @param reqId Request id. - * @param destId Destination where this message should be delivered. - */ - public GridRouterRequest(byte[] body, Long reqId, UUID clientId, UUID destId) { - this.body = body; - destinationId(destId); - clientId(clientId); - requestId(reqId); - } - - /** - * @return Raw message. - */ - public byte[] body() { - return body; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "GridRouterRequest [clientId=" + clientId() + ", reqId=" + requestId() + ", " + - "destId=" + destinationId() + ", length=" + body.length + "]"; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterResponse.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterResponse.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterResponse.java deleted file mode 100644 index c227c1f..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/GridRouterResponse.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.client.message; - -import java.util.*; - -/** - * - */ -public class GridRouterResponse extends GridClientAbstractMessage { - /** */ - private static final long serialVersionUID = 0L; - - /** Raw message. */ - private final byte[] body; - - /** Error message. */ - private final String errMsg; - - /** Status. */ - private final int status; - - /** - * @param body Message in raw form. - * @param clientId Client id. - * @param reqId Request id. - * @param destId Destination where this message should be delivered. - */ - public GridRouterResponse(byte[] body, Long reqId, UUID clientId, UUID destId) { - this.body = body; - errMsg = null; - status = GridClientResponse.STATUS_SUCCESS; - - destinationId(destId); - clientId(clientId); - requestId(reqId); - } - - /** - * @return Response body. - */ - public byte[] body() { - return body; - } - - /** - * @return Error message. - */ - public String errorMessage() { - return errMsg; - } - - /** - * @return Status. - */ - public int status() { - return status; - } - - /** {@inheritDoc} */ - @Override public String toString() { - return "GridRoutedResponse [" + - "clientId=" + clientId() + - ", reqId=" + requestId() + - ", destId=" + destinationId() + - ", status=" + status + - ", errMsg=" + errorMessage() + "]"; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/package.html ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/package.html b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/package.html deleted file mode 100644 index 9cf3550..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/client/message/package.html +++ /dev/null @@ -1,23 +0,0 @@ -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - --> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> -<html> -<body> -<!-- Package description. --> - Defines messages that are used in binary TCP communication between GridGain clients and nodes. -</body> -</html> http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandler.java deleted file mode 100644 index a3fd92c..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandler.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers; - -import org.apache.ignite.lang.*; -import org.gridgain.grid.kernal.processors.rest.*; -import org.gridgain.grid.kernal.processors.rest.request.*; - -import java.util.*; - -/** - * Command handler. - */ -public interface GridRestCommandHandler { - /** - * @return Collection of supported commands. - */ - public Collection<GridRestCommand> supportedCommands(); - - /** - * @param req Request. - * @return Future. - */ - public IgniteFuture<GridRestResponse> handleAsync(GridRestRequest req); -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandlerAdapter.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandlerAdapter.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandlerAdapter.java deleted file mode 100644 index 979e210..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/GridRestCommandHandlerAdapter.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers; - -import org.apache.ignite.*; -import org.apache.ignite.internal.*; - -/** - * Abstract command handler. - */ -public abstract class GridRestCommandHandlerAdapter implements GridRestCommandHandler { - /** Kernal context. */ - protected final GridKernalContext ctx; - - /** Log. */ - protected final IgniteLogger log; - - /** - * @param ctx Context. - */ - protected GridRestCommandHandlerAdapter(GridKernalContext ctx) { - this.ctx = ctx; - - log = ctx.log(getClass()); - } - - /** - * Return missing parameter error message. - * - * @param param Parameter name. - * @return Missing parameter error message. - */ - protected static String missingParameter(String param) { - return "Failed to find mandatory parameter in request: " + param; - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheClientQueryResult.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheClientQueryResult.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheClientQueryResult.java deleted file mode 100644 index 7f1d8c9..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheClientQueryResult.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers.cache; - -import org.apache.ignite.portables.*; - -import java.io.Serializable; -import java.util.*; - -/** - * Client query result. - */ -public class GridCacheClientQueryResult implements PortableMarshalAware, Serializable { - /** */ - private static final long serialVersionUID = 0L; - - /** Query ID. */ - private long qryId; - - /** Result items. */ - private Collection<?> items; - - /** Last flag. */ - private boolean last; - - /** Node ID. */ - private UUID nodeId; - - /** - * @return Query ID. - */ - public long queryId() { - return qryId; - } - - /** - * @param qryId Query ID. - */ - public void queryId(long qryId) { - this.qryId = qryId; - } - - /** - * @return Items. - */ - public Collection<?> items() { - return items; - } - - /** - * @param items Items. - */ - public void items(Collection<?> items) { - this.items = items; - } - - /** - * @return Last flag. - */ - public boolean last() { - return last; - } - - /** - * @param last Last flag. - */ - public void last(boolean last) { - this.last = last; - } - - /** - * @return Node ID. - */ - public UUID nodeId() { - return nodeId; - } - - /** - * @param nodeId Node ID. - */ - public void nodeId(UUID nodeId) { - this.nodeId = nodeId; - } - - /** {@inheritDoc} */ - @Override public void writePortable(PortableWriter writer) throws PortableException { - PortableRawWriter rawWriter = writer.rawWriter(); - - rawWriter.writeBoolean(last); - rawWriter.writeLong(qryId); - rawWriter.writeUuid(nodeId); - rawWriter.writeCollection(items); - } - - /** {@inheritDoc} */ - @Override public void readPortable(PortableReader reader) throws PortableException { - PortableRawReader rawReader = reader.rawReader(); - - last = rawReader.readBoolean(); - qryId = rawReader.readLong(); - nodeId = rawReader.readUuid(); - items = rawReader.readCollection(); - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java deleted file mode 100644 index 688061d..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheCommandHandler.java +++ /dev/null @@ -1,1149 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers.cache; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.datastructures.*; -import org.apache.ignite.cluster.*; -import org.apache.ignite.internal.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.resources.*; -import org.apache.ignite.transactions.*; -import org.gridgain.grid.kernal.processors.cache.*; -import org.apache.ignite.internal.processors.license.*; -import org.gridgain.grid.kernal.processors.rest.*; -import org.gridgain.grid.kernal.processors.rest.handlers.*; -import org.gridgain.grid.kernal.processors.rest.request.*; -import org.apache.ignite.internal.processors.task.*; -import org.apache.ignite.internal.util.future.*; -import org.apache.ignite.internal.util.lang.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.internal.util.typedef.internal.*; -import org.jetbrains.annotations.*; - -import javax.cache.expiry.*; -import java.io.*; -import java.util.*; -import java.util.concurrent.*; - -import static java.util.concurrent.TimeUnit.*; -import static org.apache.ignite.transactions.IgniteTxConcurrency.*; -import static org.apache.ignite.transactions.IgniteTxIsolation.*; -import static org.gridgain.grid.kernal.processors.rest.GridRestCommand.*; -import static org.apache.ignite.internal.processors.license.GridLicenseSubsystem.*; - -/** - * Command handler for API requests. - */ -public class GridCacheCommandHandler extends GridRestCommandHandlerAdapter { - /** Supported commands. */ - private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList( - CACHE_GET, - CACHE_GET_ALL, - CACHE_PUT, - CACHE_ADD, - CACHE_PUT_ALL, - CACHE_REMOVE, - CACHE_REMOVE_ALL, - CACHE_REPLACE, - CACHE_INCREMENT, - CACHE_DECREMENT, - CACHE_CAS, - CACHE_APPEND, - CACHE_PREPEND, - CACHE_METRICS - ); - - /** Requests with required parameter {@code key}. */ - private static final EnumSet<GridRestCommand> KEY_REQUIRED_REQUESTS = EnumSet.of( - CACHE_GET, - CACHE_PUT, - CACHE_ADD, - CACHE_REMOVE, - CACHE_REPLACE, - CACHE_INCREMENT, - CACHE_DECREMENT, - CACHE_CAS, - CACHE_APPEND, - CACHE_PREPEND - ); - - /** */ - private static final GridCacheFlag[] EMPTY_FLAGS = new GridCacheFlag[0]; - - /** - * @param ctx Context. - */ - public GridCacheCommandHandler(GridKernalContext ctx) { - super(ctx); - } - - /** {@inheritDoc} */ - @Override public Collection<GridRestCommand> supportedCommands() { - return SUPPORTED_COMMANDS; - } - - /** - * Retrieves cache flags from corresponding bits. - * - * @param cacheFlagsBits Integer representation of cache flags bit set. - * @return Array of cache flags. - */ - public static GridCacheFlag[] parseCacheFlags(int cacheFlagsBits) { - if (cacheFlagsBits == 0) - return EMPTY_FLAGS; - - EnumSet<GridCacheFlag> flagSet = EnumSet.noneOf(GridCacheFlag.class); - - if ((cacheFlagsBits & 1) != 0) - flagSet.add(GridCacheFlag.SKIP_STORE); - - if ((cacheFlagsBits & (1 << 1)) != 0) - flagSet.add(GridCacheFlag.SKIP_SWAP); - - if ((cacheFlagsBits & (1 << 2)) != 0) - flagSet.add(GridCacheFlag.SYNC_COMMIT); - - if ((cacheFlagsBits & (1 << 4)) != 0) - flagSet.add(GridCacheFlag.INVALIDATE); - - return flagSet.toArray(new GridCacheFlag[flagSet.size()]); - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<GridRestResponse> handleAsync(final GridRestRequest req) { - assert req instanceof GridRestCacheRequest : "Invalid command for topology handler: " + req; - - assert SUPPORTED_COMMANDS.contains(req.command()); - - GridLicenseUseRegistry.onUsage(DATA_GRID, getClass()); - - if (log.isDebugEnabled()) - log.debug("Handling cache REST request: " + req); - - GridRestCacheRequest req0 = (GridRestCacheRequest)req; - - final String cacheName = req0.cacheName(); - - final Object key = req0.key(); - - final GridCacheFlag[] flags = parseCacheFlags(req0.cacheFlags()); - - try { - GridRestCommand cmd = req0.command(); - - if (key == null && KEY_REQUIRED_REQUESTS.contains(cmd)) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("key")); - - final Long ttl = req0.ttl(); - - IgniteFuture<GridRestResponse> fut; - - switch (cmd) { - case CACHE_GET: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new GetCommand(key), req.portableMode()); - - break; - } - - case CACHE_GET_ALL: { - Set<Object> keys = req0.values().keySet(); - - if (F.isEmpty(keys)) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("keys")); - - // HashSet wrapping for correct serialization - keys = new HashSet<>(keys); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new GetAllCommand(keys), req.portableMode()); - - break; - } - - case CACHE_PUT: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, new - PutCommand(key, ttl, val), req.portableMode()); - - break; - } - - case CACHE_ADD: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new AddCommand(key, ttl, val), req.portableMode()); - - break; - } - - case CACHE_PUT_ALL: { - Map<Object, Object> map = req0.values(); - - if (F.isEmpty(map)) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("values")); - - for (Map.Entry<Object, Object> e : map.entrySet()) { - if (e.getKey() == null) - throw new IgniteCheckedException("Failing putAll operation (null keys are not allowed)."); - - if (e.getValue() == null) - throw new IgniteCheckedException("Failing putAll operation (null values are not allowed)."); - } - - // HashMap wrapping for correct serialization - map = new HashMap<>(map); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new PutAllCommand(map), req.portableMode()); - - break; - } - - case CACHE_REMOVE: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new RemoveCommand(key), req.portableMode()); - - break; - } - - case CACHE_REMOVE_ALL: { - Map<Object, Object> map = req0.values(); - - // HashSet wrapping for correct serialization - Set<Object> keys = map == null ? null : new HashSet<>(map.keySet()); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new RemoveAllCommand(keys), req.portableMode()); - - break; - } - - case CACHE_REPLACE: { - final Object val = req0.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new ReplaceCommand(key, ttl, val), req.portableMode()); - - break; - } - - case CACHE_INCREMENT: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, key, - new IncrementCommand(key, req0)); - - break; - } - - case CACHE_DECREMENT: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, key, - new DecrementCommand(key, req0)); - - break; - } - - case CACHE_CAS: { - final Object val1 = req0.value(); - final Object val2 = req0.value2(); - - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new CasCommand(val2, val1, key), req.portableMode()); - - break; - } - - case CACHE_APPEND: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new AppendCommand(key, req0), req.portableMode()); - - break; - } - - case CACHE_PREPEND: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, flags, key, - new PrependCommand(key, req0), req.portableMode()); - - break; - } - - case CACHE_METRICS: { - fut = executeCommand(req.destinationId(), req.clientId(), cacheName, key, new MetricsCommand()); - - break; - } - - default: - throw new IllegalArgumentException("Invalid command for cache handler: " + req); - } - - return fut; - } - catch (IgniteException e) { - U.error(log, "Failed to execute cache command: " + req, e); - - return new GridFinishedFuture<>(ctx, e); - } - catch (IgniteCheckedException e) { - U.error(log, "Failed to execute cache command: " + req, e); - - return new GridFinishedFuture<>(ctx, e); - } - finally { - if (log.isDebugEnabled()) - log.debug("Handled cache REST request: " + req); - } - } - - /** - * Executes command on flagged cache projection. Checks {@code destId} to find - * if command could be performed locally or routed to a remote node. - * - * @param destId Target node Id for the operation. - * If {@code null} - operation could be executed anywhere. - * @param clientId Client ID. - * @param cacheName Cache name. - * @param flags Cache flags. - * @param key Key to set affinity mapping in the response. - * @param op Operation to perform. - * @param keepPortable Keep portable flag. - * @return Operation result in future. - * @throws IgniteCheckedException If failed - */ - private IgniteFuture<GridRestResponse> executeCommand( - @Nullable UUID destId, - UUID clientId, - final String cacheName, - final GridCacheFlag[] flags, - final Object key, - final CacheProjectionCommand op, - final boolean keepPortable) throws IgniteCheckedException { - - final boolean locExec = - destId == null || destId.equals(ctx.localNodeId()) || replicatedCacheAvailable(cacheName); - - if (locExec) { - GridCacheProjection<?,?> prj = localCache(cacheName).forSubjectId(clientId).flagsOn(flags); - - if (keepPortable) - prj = prj.keepPortable(); - - return op.apply((GridCacheProjection<Object, Object>)prj, ctx). - chain(resultWrapper((GridCacheProjection<Object, Object>)prj, key)); - } - else { - ClusterGroup prj = ctx.grid().forPredicate(F.nodeForNodeId(destId)); - - IgniteCompute comp = ctx.grid().compute(prj).withNoFailover().enableAsync(); - - comp.call(new FlaggedCacheOperationCallable(clientId, cacheName, flags, op, key, keepPortable)); - - return comp.future(); - } - } - - /** - * Executes command on cache. Checks {@code destId} to find - * if command could be performed locally or routed to a remote node. - * - * @param destId Target node Id for the operation. - * If {@code null} - operation could be executed anywhere. - * @param clientId Client ID. - * @param cacheName Cache name. - * @param key Key to set affinity mapping in the response. - * @param op Operation to perform. - * @return Operation result in future. - * @throws IgniteCheckedException If failed - */ - private IgniteFuture<GridRestResponse> executeCommand( - @Nullable UUID destId, - UUID clientId, - final String cacheName, - final Object key, - final CacheCommand op) throws IgniteCheckedException { - final boolean locExec = destId == null || destId.equals(ctx.localNodeId()) || - ctx.cache().cache(cacheName) != null; - - if (locExec) { - final GridCacheProjection<Object, Object> cache = localCache(cacheName).forSubjectId(clientId); - - return op.apply(cache, ctx).chain(resultWrapper(cache, key)); - } - else { - ClusterGroup prj = ctx.grid().forPredicate(F.nodeForNodeId(destId)); - - IgniteCompute comp = ctx.grid().compute(prj).withNoFailover().enableAsync(); - - comp.call(new CacheOperationCallable(clientId, cacheName, op, key)); - - return comp.future(); - } - } - - /** - * Handles increment and decrement commands. - * - * @param cache Cache. - * @param key Key. - * @param req Request. - * @param decr Whether to decrement (increment otherwise). - * @return Future of operation result. - * @throws IgniteCheckedException In case of error. - */ - private static IgniteFuture<?> incrementOrDecrement(GridCacheProjection<Object, Object> cache, String key, - GridRestCacheRequest req, final boolean decr) throws IgniteCheckedException { - assert cache != null; - assert key != null; - assert req != null; - - Long init = req.initial(); - Long delta = req.delta(); - - if (delta == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("delta")); - - final GridCacheAtomicLong l = cache.cache().dataStructures().atomicLong(key, init != null ? init : 0, true); - - final Long d = delta; - - return ((GridKernal)cache.gridProjection().ignite()).context().closure().callLocalSafe(new Callable<Object>() { - @Override public Object call() throws Exception { - return l.addAndGet(decr ? -d : d); - } - }, false); - } - - /** - * Handles append and prepend commands. - * - * @param ctx Kernal context. - * @param cache Cache. - * @param key Key. - * @param req Request. - * @param prepend Whether to prepend. - * @return Future of operation result. - * @throws IgniteCheckedException In case of any exception. - */ - private static IgniteFuture<?> appendOrPrepend( - final GridKernalContext ctx, - final GridCacheProjection<Object, Object> cache, - final Object key, GridRestCacheRequest req, final boolean prepend) throws IgniteCheckedException { - assert cache != null; - assert key != null; - assert req != null; - - final Object val = req.value(); - - if (val == null) - throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val")); - - return ctx.closure().callLocalSafe(new Callable<Object>() { - @Override public Object call() throws Exception { - try (IgniteTx tx = cache.txStart(PESSIMISTIC, REPEATABLE_READ)) { - Object curVal = cache.get(key); - - if (curVal == null) - return false; - - // Modify current value with appendix one. - Object newVal = appendOrPrepend(curVal, val, !prepend); - - // Put new value asynchronously. - cache.putx(key, newVal); - - tx.commit(); - } - - return true; - } - }, false); - } - - /** - * Append or prepend new value to the current one. - * - * @param origVal Original value. - * @param appendVal Appendix value to add to the original one. - * @param appendPlc Append or prepend policy flag. - * @return Resulting value. - * @throws IgniteCheckedException In case of grid exceptions. - */ - private static Object appendOrPrepend(Object origVal, Object appendVal, boolean appendPlc) throws IgniteCheckedException { - // Strings. - if (appendVal instanceof String && origVal instanceof String) - return appendPlc ? origVal + (String)appendVal : (String)appendVal + origVal; - - // Maps. - if (appendVal instanceof Map && origVal instanceof Map) { - Map<Object, Object> origMap = (Map<Object, Object>)origVal; - Map<Object, Object> appendMap = (Map<Object, Object>)appendVal; - - Map<Object, Object> map = X.cloneObject(origMap, false, true); - - if (appendPlc) - map.putAll(appendMap); // Append. - else { - map.clear(); - map.putAll(appendMap); // Prepend. - map.putAll(origMap); - } - - for (Map.Entry<Object, Object> e : appendMap.entrySet()) // Remove zero-valued entries. - if (e.getValue() == null && map.get(e.getKey()) == null) - map.remove(e.getKey()); - - return map; - } - - // Generic collection. - if (appendVal instanceof Collection<?> && origVal instanceof Collection<?>) { - Collection<Object> origCol = (Collection<Object>)origVal; - Collection<Object> appendCol = (Collection<Object>)appendVal; - - Collection<Object> col = X.cloneObject(origCol, false, true); - - if (appendPlc) - col.addAll(appendCol); // Append. - else { - col.clear(); - col.addAll(appendCol); // Prepend. - col.addAll(origCol); - } - - return col; - } - - throw new IgniteCheckedException("Incompatible types [appendVal=" + appendVal + ", old=" + origVal + ']'); - } - - /** {@inheritDoc} */ - @Override public String toString() { - return S.toString(GridCacheCommandHandler.class, this); - } - - /** - * Creates a transformation function from {@link CacheCommand}'s results into {@link GridRestResponse}. - * - * @param c Cache instance to obtain affinity data. - * @param key Affinity key for previous operation. - * @return Rest response. - */ - private static IgniteClosure<IgniteFuture<?>, GridRestResponse> resultWrapper( - final GridCacheProjection<Object, Object> c, @Nullable final Object key) { - return new CX1<IgniteFuture<?>, GridRestResponse>() { - @Override public GridRestResponse applyx(IgniteFuture<?> f) throws IgniteCheckedException { - GridCacheRestResponse resp = new GridCacheRestResponse(); - - resp.setResponse(f.get()); - - if (key != null) - resp.setAffinityNodeId(c.cache().affinity().mapKeyToNode(key).id().toString()); - - return resp; - } - }; - } - - /** - * @param cacheName Cache name. - * @return If replicated cache with given name is locally available. - */ - private boolean replicatedCacheAvailable(String cacheName) { - GridCacheAdapter<Object,Object> cache = ctx.cache().internalCache(cacheName); - - return cache != null && cache.configuration().getCacheMode() == GridCacheMode.REPLICATED; - } - - /** - * Used for test purposes. - * - * @param cacheName Name of the cache. - * @return Instance on the named cache. - * @throws IgniteCheckedException If cache not found. - */ - protected GridCacheProjectionEx<Object, Object> localCache(String cacheName) throws IgniteCheckedException { - GridCacheProjectionEx<Object, Object> cache = (GridCacheProjectionEx<Object, Object>)ctx.cache().cache(cacheName); - - if (cache == null) - throw new IgniteCheckedException( - "Failed to find cache for given cache name (null for default cache): " + cacheName); - - return cache; - } - - /** - * @param ignite Grid instance. - * @param cacheName Name of the cache. - * @return Instance on the named cache. - * @throws IgniteCheckedException If cache not found. - */ - private static GridCacheProjectionEx<Object, Object> cache(Ignite ignite, String cacheName) throws IgniteCheckedException { - GridCache<Object, Object> cache = ignite.cache(cacheName); - - if (cache == null) - throw new IgniteCheckedException( - "Failed to find cache for given cache name (null for default cache): " + cacheName); - - return (GridCacheProjectionEx<Object, Object>)cache; - } - - /** - * Fixed result closure. - */ - private static final class FixedResult extends CX1<IgniteFuture<?>, Object> { - /** */ - private static final long serialVersionUID = 0L; - - /** Closure result. */ - private final Object res; - - /** - * @param res Closure result. - */ - private FixedResult(Object res) { - this.res = res; - } - - /** {@inheritDoc} */ - @Override public Object applyx(IgniteFuture<?> f) throws IgniteCheckedException { - f.get(); - - return res; - } - } - - /** - * Type alias. - */ - private abstract static class CacheCommand - extends IgniteClosure2X<GridCacheProjection<Object, Object>, GridKernalContext, IgniteFuture<?>> { - /** */ - private static final long serialVersionUID = 0L; - - // No-op. - } - - /** - * Type alias. - */ - private abstract static class CacheProjectionCommand - extends IgniteClosure2X<GridCacheProjection<Object, Object>, GridKernalContext, IgniteFuture<?>> { - /** */ - private static final long serialVersionUID = 0L; - - // No-op. - } - - /** - * Class for flagged cache operations. - */ - @GridInternal - private static class FlaggedCacheOperationCallable implements Callable<GridRestResponse>, Serializable { - /** */ - private static final long serialVersionUID = 0L; - - /** Client ID. */ - private UUID clientId; - - /** */ - private final String cacheName; - - /** */ - private final GridCacheFlag[] flags; - - /** */ - private final CacheProjectionCommand op; - - /** */ - private final Object key; - - /** */ - private final boolean keepPortable; - - /** */ - @IgniteInstanceResource - private Ignite g; - - /** - * @param clientId Client ID. - * @param cacheName Cache name. - * @param flags Flags. - * @param op Operation. - * @param key Key. - * @param keepPortable Keep portable flag. - */ - private FlaggedCacheOperationCallable(UUID clientId, String cacheName, GridCacheFlag[] flags, - CacheProjectionCommand op, Object key, boolean keepPortable) { - this.clientId = clientId; - this.cacheName = cacheName; - this.flags = flags; - this.op = op; - this.key = key; - this.keepPortable = keepPortable; - } - - /** {@inheritDoc} */ - @Override public GridRestResponse call() throws Exception { - GridCacheProjection<?, ?> prj = cache(g, cacheName).forSubjectId(clientId).flagsOn(flags); - - if (keepPortable) - prj = prj.keepPortable(); - - // Need to apply both operation and response transformation remotely - // as cache could be inaccessible on local node and - // exception processing should be consistent with local execution. - return op.apply((GridCacheProjection<Object, Object>)prj, ((GridKernal)g).context()). - chain(resultWrapper((GridCacheProjection<Object, Object>)prj, key)).get(); - } - } - - /** - * Class for cache operations. - */ - @GridInternal - private static class CacheOperationCallable implements Callable<GridRestResponse>, Serializable { - /** */ - private static final long serialVersionUID = 0L; - - /** Client ID. */ - private UUID clientId; - - /** */ - private final String cacheName; - - /** */ - private final CacheCommand op; - - /** */ - private final Object key; - - /** */ - @IgniteInstanceResource - private Ignite g; - - /** - * @param clientId Client ID. - * @param cacheName Cache name. - * @param op Operation. - * @param key Key. - */ - private CacheOperationCallable(UUID clientId, String cacheName, CacheCommand op, Object key) { - this.clientId = clientId; - this.cacheName = cacheName; - this.op = op; - this.key = key; - } - - /** {@inheritDoc} */ - @Override public GridRestResponse call() throws Exception { - final GridCacheProjection<Object, Object> cache = cache(g, cacheName).forSubjectId(clientId); - - // Need to apply both operation and response transformation remotely - // as cache could be inaccessible on local node and - // exception processing should be consistent with local execution. - return op.apply(cache, ((GridKernal)g).context()).chain(resultWrapper(cache, key)).get(); - } - } - - /** */ - private static class GetCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** - * @param key Key. - */ - GetCommand(Object key) { - this.key = key; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return c.getAsync(key); - } - } - - /** */ - private static class GetAllCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Collection<Object> keys; - - /** - * @param keys Keys. - */ - GetAllCommand(Collection<Object> keys) { - this.keys = keys; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return c.getAllAsync(keys); - } - } - - /** */ - private static class PutAllCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Map<Object, Object> map; - - /** - * @param map Objects to put. - */ - PutAllCommand(Map<Object, Object> map) { - this.map = map; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return c.putAllAsync(map).chain(new FixedResult(true)); - } - } - - /** */ - private static class RemoveCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** - * @param key Key. - */ - RemoveCommand(Object key) { - this.key = key; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return c.removexAsync(key); - } - } - - /** */ - private static class RemoveAllCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Collection<Object> keys; - - /** - * @param keys Keys to remove. - */ - RemoveAllCommand(Collection<Object> keys) { - this.keys = keys; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return (F.isEmpty(keys) ? c.removeAllAsync() : c.removeAllAsync(keys)) - .chain(new FixedResult(true)); - } - } - - /** */ - private static class CasCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object exp; - - /** */ - private final Object val; - - /** */ - private final Object key; - - /** - * @param exp Expected previous value. - * @param val New value. - * @param key Key. - */ - CasCommand(Object exp, Object val, Object key) { - this.val = val; - this.exp = exp; - this.key = key; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - return exp == null && val == null ? c.removexAsync(key) : - exp == null ? c.putxIfAbsentAsync(key, val) : - val == null ? c.removeAsync(key, exp) : - c.replaceAsync(key, exp, val); - } - } - - /** */ - private static class PutCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final Long ttl; - - /** */ - private final Object val; - - /** - * @param key Key. - * @param ttl TTL. - * @param val Value. - */ - PutCommand(Object key, Long ttl, Object val) { - this.key = key; - this.ttl = ttl; - this.val = val; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - if (ttl != null && ttl > 0) { - Duration duration = new Duration(MILLISECONDS, ttl); - - c = ((GridCacheProjectionEx<Object, Object>)c).withExpiryPolicy(new ModifiedExpiryPolicy(duration)); - } - - return c.putxAsync(key, val); - } - } - - /** */ - private static class AddCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final Long ttl; - - /** */ - private final Object val; - - /** - * @param key Key. - * @param ttl TTL. - * @param val Value. - */ - AddCommand(Object key, Long ttl, Object val) { - this.key = key; - this.ttl = ttl; - this.val = val; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - if (ttl != null && ttl > 0) { - Duration duration = new Duration(MILLISECONDS, ttl); - - c = ((GridCacheProjectionEx<Object, Object>)c).withExpiryPolicy(new ModifiedExpiryPolicy(duration)); - } - - return c.putxIfAbsentAsync(key, val); - } - } - - /** */ - private static class ReplaceCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final Long ttl; - - /** */ - private final Object val; - - /** - * @param key Key. - * @param ttl TTL. - * @param val Value. - */ - ReplaceCommand(Object key, Long ttl, Object val) { - this.key = key; - this.ttl = ttl; - this.val = val; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - if (ttl != null && ttl > 0) { - Duration duration = new Duration(MILLISECONDS, ttl); - - c = ((GridCacheProjectionEx<Object, Object>)c).withExpiryPolicy(new ModifiedExpiryPolicy(duration)); - } - - return c.replacexAsync(key, val); - } - } - - /** */ - private static class IncrementCommand extends CacheCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final GridRestCacheRequest req; - - /** - * @param key Key. - * @param req Operation request. - */ - IncrementCommand(Object key, GridRestCacheRequest req) { - this.key = key; - this.req = req; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) - throws IgniteCheckedException { - return incrementOrDecrement(c, (String)key, req, false); - } - } - - /** */ - private static class DecrementCommand extends CacheCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final GridRestCacheRequest req; - - /** - * @param key Key. - * @param req Operation request. - */ - DecrementCommand(Object key, GridRestCacheRequest req) { - this.key = key; - this.req = req; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) throws IgniteCheckedException { - return incrementOrDecrement(c, (String)key, req, true); - } - } - - /** */ - private static class AppendCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final GridRestCacheRequest req; - - /** - * @param key Key. - * @param req Operation request. - */ - AppendCommand(Object key, GridRestCacheRequest req) { - this.key = key; - this.req = req; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) - throws IgniteCheckedException { - return appendOrPrepend(ctx, c, key, req, false); - } - } - - /** */ - private static class PrependCommand extends CacheProjectionCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** */ - private final Object key; - - /** */ - private final GridRestCacheRequest req; - - /** - * @param key Key. - * @param req Operation request. - */ - PrependCommand(Object key, GridRestCacheRequest req) { - this.key = key; - this.req = req; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) - throws IgniteCheckedException { - return appendOrPrepend(ctx, c, key, req, true); - } - } - - /** */ - private static class MetricsCommand extends CacheCommand { - /** */ - private static final long serialVersionUID = 0L; - - /** {@inheritDoc} */ - @Override public IgniteFuture<?> applyx(GridCacheProjection<Object, Object> c, GridKernalContext ctx) { - GridCacheMetrics metrics = c.cache().metrics(); - - assert metrics != null; - - return new GridFinishedFuture<Object>(ctx, new GridCacheRestMetrics( - metrics.createTime(), metrics.readTime(), metrics.writeTime(), - metrics.reads(), metrics.writes(), metrics.hits(), metrics.misses())); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheQueryCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheQueryCommandHandler.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheQueryCommandHandler.java deleted file mode 100644 index ef37fa7..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheQueryCommandHandler.java +++ /dev/null @@ -1,493 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers.cache; - -import org.apache.ignite.*; -import org.apache.ignite.cache.*; -import org.apache.ignite.cache.query.*; -import org.apache.ignite.cluster.*; -import org.apache.ignite.internal.*; -import org.apache.ignite.lang.*; -import org.apache.ignite.resources.*; -import org.gridgain.grid.kernal.processors.cache.*; -import org.gridgain.grid.kernal.processors.cache.query.*; -import org.gridgain.grid.kernal.processors.rest.*; -import org.gridgain.grid.kernal.processors.rest.client.message.GridClientCacheQueryRequest; -import org.gridgain.grid.kernal.processors.rest.handlers.*; -import org.gridgain.grid.kernal.processors.rest.request.*; -import org.apache.ignite.internal.util.future.*; -import org.apache.ignite.internal.util.lang.*; -import org.apache.ignite.internal.util.typedef.*; -import org.apache.ignite.internal.util.typedef.internal.*; - -import java.lang.reflect.*; -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.atomic.*; - -import static org.gridgain.grid.kernal.processors.rest.GridRestCommand.*; - -/** - * Cache query command handler. - */ -public class GridCacheQueryCommandHandler extends GridRestCommandHandlerAdapter { - /** Supported commands. */ - private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList( - CACHE_QUERY_EXECUTE, - CACHE_QUERY_FETCH, - CACHE_QUERY_REBUILD_INDEXES - ); - - /** Query ID sequence. */ - private static final AtomicLong qryIdGen = new AtomicLong(); - - /** - * @param ctx Context. - */ - public GridCacheQueryCommandHandler(GridKernalContext ctx) { - super(ctx); - } - - /** {@inheritDoc} */ - @Override public Collection<GridRestCommand> supportedCommands() { - return SUPPORTED_COMMANDS; - } - - /** {@inheritDoc} */ - @Override public IgniteFuture<GridRestResponse> handleAsync(GridRestRequest req) { - assert req instanceof GridRestCacheQueryRequest; - assert SUPPORTED_COMMANDS.contains(req.command()); - - GridRestCacheQueryRequest qryReq = (GridRestCacheQueryRequest)req; - - UUID destId = qryReq.destinationId(); - String cacheName = qryReq.cacheName(); - - switch (qryReq.command()) { - case CACHE_QUERY_EXECUTE: { - return execute(destId, cacheName, new ExecuteQuery(qryReq)); - } - - case CACHE_QUERY_FETCH: { - return execute(destId, cacheName, new FetchQueryResults(qryReq)); - } - - case CACHE_QUERY_REBUILD_INDEXES: { - return broadcast(qryReq.cacheName(), new RebuildIndexes(qryReq.cacheName(), qryReq.className())); - } - - default: - return new GridFinishedFutureEx<>(new IgniteCheckedException("Unsupported query command: " + req.command())); - } - } - - /** - * @param cacheName Cache name. - * @return If replicated cache with given name is locally available. - */ - private boolean replicatedCacheAvailable(String cacheName) { - GridCacheAdapter<Object,Object> cache = ctx.cache().internalCache(cacheName); - - return cache != null && cache.configuration().getCacheMode() == GridCacheMode.REPLICATED; - } - - /** - * Executes given closure either locally or on specified node. - * - * @param destId Destination node ID. - * @param cacheName Cache name. - * @param c Closure to execute. - * @return Execution future. - */ - private IgniteFuture<GridRestResponse> execute(UUID destId, String cacheName, Callable<GridRestResponse> c) { - boolean locExec = destId == null || destId.equals(ctx.localNodeId()) || replicatedCacheAvailable(cacheName); - - if (locExec) - return ctx.closure().callLocalSafe(c, false); - else { - if (ctx.discovery().node(destId) == null) - return new GridFinishedFutureEx<>(new IgniteCheckedException("Destination node ID has left the grid (retry " + - "the query): " + destId)); - - try { - IgniteCompute comp = ctx.grid().compute(ctx.grid().forNodeId(destId)).withNoFailover().enableAsync(); - - comp.call(c); - - return comp.future(); - } - catch (IgniteCheckedException e) { - // Should not be thrown since uses asynchronous execution. - return new GridFinishedFutureEx<>(e); - } - } - } - - /** - * @param cacheName Cache name. - * @param c Closure to execute. - * @return Execution future. - */ - private IgniteFuture<GridRestResponse> broadcast(String cacheName, Callable<Object> c) { - IgniteCompute comp = ctx.grid().compute(ctx.grid().forCache(cacheName)).withNoFailover().enableAsync(); - - try { - comp.broadcast(c); - - IgniteFuture<Collection<Object>> fut = comp.future(); - - return fut.chain(new C1<IgniteFuture<Collection<Object>>, GridRestResponse>() { - @Override public GridRestResponse apply(IgniteFuture<Collection<Object>> fut) { - try { - fut.get(); - - return new GridRestResponse(); - } - catch (IgniteCheckedException e) { - throw new GridClosureException(e); - } - } - }); - } - catch (IgniteCheckedException e) { - // Should not be thrown since uses asynchronous execution. - return new GridFinishedFutureEx<>(e); - } - } - - /** - * @param qryId Query ID. - * @param wrapper Query future wrapper. - * @param locMap Queries map. - * @param locNodeId Local node ID. - * @return Rest response. - * @throws IgniteCheckedException If failed. - */ - private static GridRestResponse fetchQueryResults( - long qryId, - QueryFutureWrapper wrapper, - ConcurrentMap<QueryExecutionKey, QueryFutureWrapper> locMap, - UUID locNodeId - ) throws IgniteCheckedException { - if (wrapper == null) - throw new IgniteCheckedException("Failed to find query future (query has been expired)."); - - GridCacheQueryFutureAdapter<?, ?, ?> fut = wrapper.future(); - - Collection<Object> col = (Collection<Object>)fut.nextPage(); - - GridCacheRestResponse res = new GridCacheRestResponse(); - - GridCacheClientQueryResult qryRes = new GridCacheClientQueryResult(); - - if (col == null) { - col = Collections.emptyList(); - - qryRes.last(true); - - locMap.remove(new QueryExecutionKey(qryId), wrapper); - } - - qryRes.items(col); - qryRes.queryId(qryId); - qryRes.nodeId(locNodeId); - - res.setResponse(qryRes); - - return res; - } - - /** - * Creates class instance. - * - * @param cls Target class. - * @param clsName Implementing class name. - * @return Class instance. - * @throws IgniteCheckedException If failed. - */ - private static <T> T instance(Class<? extends T> cls, String clsName) throws IgniteCheckedException { - try { - Class<?> implCls = Class.forName(clsName); - - if (!cls.isAssignableFrom(implCls)) - throw new IgniteCheckedException("Failed to create instance (target class does not extend or implement " + - "required class or interface) [cls=" + cls.getName() + ", clsName=" + clsName + ']'); - - Constructor<?> ctor = implCls.getConstructor(); - - return (T)ctor.newInstance(); - } - catch (ClassNotFoundException e) { - throw new IgniteCheckedException("Failed to find target class: " + clsName, e); - } - catch (NoSuchMethodException e) { - throw new IgniteCheckedException("Failed to find constructor for provided arguments " + - "[clsName=" + clsName + ']', e); - } - catch (InstantiationException e) { - throw new IgniteCheckedException("Failed to instantiate target class " + - "[clsName=" + clsName + ']', e); - } - catch (IllegalAccessException e) { - throw new IgniteCheckedException("Failed to instantiate class (constructor is not available) " + - "[clsName=" + clsName + ']', e); - } - catch (InvocationTargetException e) { - throw new IgniteCheckedException("Failed to instantiate class (constructor threw an exception) " + - "[clsName=" + clsName + ']', e.getCause()); - } - } - - /** - * - */ - private static class ExecuteQuery implements IgniteCallable<GridRestResponse> { - /** */ - private static final long serialVersionUID = 0L; - - /** Injected grid. */ - @IgniteInstanceResource - private Ignite g; - - /** Query request. */ - private GridRestCacheQueryRequest req; - - /** - * @param req Request. - */ - private ExecuteQuery(GridRestCacheQueryRequest req) { - this.req = req; - } - - /** {@inheritDoc} */ - @SuppressWarnings({"unchecked", "IfMayBeConditional"}) - @Override public GridRestResponse call() throws Exception { - long qryId = qryIdGen.getAndIncrement(); - - GridCacheQueries<Object,Object> queries = g.cache(req.cacheName()).queries(); - - GridCacheQuery<?> qry; - - switch (req.type()) { - case SQL: - qry = queries.createSqlQuery(req.className(), req.clause()); - - break; - - case SQL_FIELDS: - qry = queries.createSqlFieldsQuery(req.clause()); - - break; - - case FULL_TEXT: - qry = queries.createFullTextQuery(req.className(), req.clause()); - - break; - - case SCAN: - qry = queries.createScanQuery(instance(IgniteBiPredicate.class, req.className())); - - break; - - default: - throw new IgniteCheckedException("Unsupported query type: " + req.type()); - } - - boolean keepPortable = req.keepPortable(); - - if (!keepPortable) { - if (req.type() != GridClientCacheQueryRequest.GridQueryType.SCAN && - (req.remoteReducerClassName() == null && req.remoteTransformerClassName() == null)) - // Do not deserialize values on server if not needed. - keepPortable = true; - } - - ((GridCacheQueryAdapter)qry).keepPortable(keepPortable); - ((GridCacheQueryAdapter)qry).subjectId(req.clientId()); - - if (req.pageSize() > 0) - qry = qry.pageSize(req.pageSize()); - - if (req.timeout() > 0) - qry = qry.timeout(req.timeout()); - - qry = qry.includeBackups(req.includeBackups()).enableDedup(req.enableDedup()).keepAll(false); - - GridCacheQueryFutureAdapter<?, ?, ?> fut; - - if (req.remoteReducerClassName() != null) - fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute( - instance(IgniteReducer.class, req.remoteReducerClassName()), - req.queryArguments()); - else if (req.remoteTransformerClassName() != null) - fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute( - instance(IgniteClosure.class, req.remoteTransformerClassName()), - req.queryArguments()); - else - fut = (GridCacheQueryFutureAdapter<?, ?, ?>)qry.execute(req.queryArguments()); - - ClusterNodeLocalMap<QueryExecutionKey, QueryFutureWrapper> locMap = - g.cluster().nodeLocalMap(); - - QueryFutureWrapper wrapper = new QueryFutureWrapper(fut); - - QueryFutureWrapper old = locMap.putIfAbsent(new QueryExecutionKey(qryId), wrapper); - - assert old == null; - - return fetchQueryResults(qryId, wrapper, locMap, g.cluster().localNode().id()); - } - } - - /** - * - */ - private static class FetchQueryResults implements IgniteCallable<GridRestResponse> { - /** */ - private static final long serialVersionUID = 0L; - - /** Injected grid. */ - @IgniteInstanceResource - private Ignite g; - - /** Query request. */ - private GridRestCacheQueryRequest req; - - /** - * @param req Request. - */ - private FetchQueryResults(GridRestCacheQueryRequest req) { - this.req = req; - } - - /** {@inheritDoc} */ - @Override public GridRestResponse call() throws Exception { - ClusterNodeLocalMap<QueryExecutionKey, QueryFutureWrapper> locMap = - g.cluster().nodeLocalMap(); - - return fetchQueryResults(req.queryId(), locMap.get(new QueryExecutionKey(req.queryId())), - locMap, g.cluster().localNode().id()); - } - } - - /** - * Rebuild indexes closure. - */ - private static class RebuildIndexes implements IgniteCallable<Object> { - /** */ - private static final long serialVersionUID = 0L; - - /** Injected grid. */ - @IgniteInstanceResource - private Ignite g; - - /** Cache name. */ - private String cacheName; - - /** Class name. */ - private String clsName; - - /** - * @param cacheName Cache name. - * @param clsName Optional class name to rebuild indexes for. - */ - private RebuildIndexes(String cacheName, String clsName) { - this.cacheName = cacheName; - this.clsName = clsName; - } - - /** {@inheritDoc} */ - @Override public Object call() throws Exception { - if (clsName == null) - g.cache(cacheName).queries().rebuildAllIndexes(); - else - g.cache(cacheName).queries().rebuildIndexes(clsName); - - return null; - } - } - - /** - * - */ - private static class QueryExecutionKey { - /** Query ID. */ - private long qryId; - - /** - * @param qryId Query ID. - */ - private QueryExecutionKey(long qryId) { - this.qryId = qryId; - } - - /** {@inheritDoc} */ - @Override public boolean equals(Object o) { - if (this == o) - return true; - - if (!(o instanceof QueryExecutionKey)) - return false; - - QueryExecutionKey that = (QueryExecutionKey)o; - - return qryId == that.qryId; - } - - /** {@inheritDoc} */ - @Override public int hashCode() { - return (int)(qryId ^ (qryId >>> 32)); - } - } - - /** - * Query future wrapper. - */ - private static class QueryFutureWrapper { - /** Query future. */ - private final GridCacheQueryFutureAdapter<?, ?, ?> qryFut; - - /** Last future use timestamp. */ - private volatile long lastUseTs; - - /** - * @param qryFut Query future. - */ - private QueryFutureWrapper(GridCacheQueryFutureAdapter<?, ?, ?> qryFut) { - this.qryFut = qryFut; - - lastUseTs = U.currentTimeMillis(); - } - - /** - * @return Query future. - */ - private GridCacheQueryFutureAdapter<?, ?, ?> future() { - lastUseTs = U.currentTimeMillis(); - - return qryFut; - } - - /** - * @return Last use timestamp. - */ - private long lastUseTimestamp() { - return lastUseTs; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1b0e45a2/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheRestMetrics.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheRestMetrics.java b/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheRestMetrics.java deleted file mode 100644 index 9783605..0000000 --- a/modules/core/src/main/java/org/gridgain/grid/kernal/processors/rest/handlers/cache/GridCacheRestMetrics.java +++ /dev/null @@ -1,215 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.gridgain.grid.kernal.processors.rest.handlers.cache; - -import org.apache.ignite.internal.util.*; - -import java.util.*; - -/** - * Grid cache metrics for rest. - */ -public class GridCacheRestMetrics { - /** Create time. */ - private long createTime; - - /** Last read time. */ - private long readTime; - - /** Last update time. */ - private long writeTime; - - /** Number of reads. */ - private int reads; - - /** Number of writes. */ - private int writes; - - /** Number of hits. */ - private int hits; - - /** Number of misses. */ - private int misses; - - /** - * Constructor. - * - * @param createTime Create time. - * @param readTime Read time. - * @param writeTime Write time. - * @param reads Reads. - * @param writes Writes. - * @param hits Hits. - * @param misses Misses. - */ - public GridCacheRestMetrics(long createTime, long readTime, long writeTime, int reads, int writes, int hits, - int misses) { - this.createTime = createTime; - this.readTime = readTime; - this.writeTime = writeTime; - this.reads = reads; - this.writes = writes; - this.hits = hits; - this.misses = misses; - } - - /** - * Gets create time. - * - * @return Create time. - */ - public long getCreateTime() { - return createTime; - } - - /** - * Sets create time. - * - * @param createTime Create time. - */ - public void setCreateTime(long createTime) { - this.createTime = createTime; - } - - /** - * Gets read time. - * - * @return Read time. - */ - public long getReadTime() { - return readTime; - } - - /** - * Sets read time. - * - * @param readTime Read time. - */ - public void setReadTime(long readTime) { - this.readTime = readTime; - } - - /** - * Gets write time. - * - * @return Write time. - */ - public long getWriteTime() { - return writeTime; - } - - /** - * Sets write time. - * - * @param writeTime Write time. - */ - public void setWriteTime(long writeTime) { - this.writeTime = writeTime; - } - - /** - * Gets reads. - * - * @return Reads. - */ - public int getReads() { - return reads; - } - - /** - * Sets reads. - * - * @param reads Reads. - */ - public void setReads(int reads) { - this.reads = reads; - } - - /** - * Gets writes. - * - * @return Writes. - */ - public int getWrites() { - return writes; - } - - /** - * Sets writes. - * - * @param writes Writes. - */ - public void setWrites(int writes) { - this.writes = writes; - } - - /** - * Gets hits. - * - * @return Hits. - */ - public int getHits() { - return hits; - } - - /** - * Sets hits. - * - * @param hits Hits. - */ - public void setHits(int hits) { - this.hits = hits; - } - - /** - * Gets misses. - * - * @return Misses. - */ - public int getMisses() { - return misses; - } - - /** - * Sets misses. - * - * @param misses Misses. - */ - public void setMisses(int misses) { - this.misses = misses; - } - - /** - * Creates map with strings. - * - * @return Map. - */ - public Map<String, Long> map() { - Map<String, Long> map = new GridLeanMap<>(7); - - map.put("createTime", createTime); - map.put("readTime", readTime); - map.put("writeTime", writeTime); - map.put("reads", (long)reads); - map.put("writes", (long)writes); - map.put("hits", (long)hits); - map.put("misses", (long)misses); - - return map; - } -}
