use of org.apache.ignite.internal.client.GridClientCacheFlag in project ignite by apache.
the class GridCacheCommandHandler method handleAsync.
/**
* {@inheritDoc}
*/
@Override
public IgniteInternalFuture<GridRestResponse> handleAsync(final GridRestRequest req) {
assert req instanceof GridRestCacheRequest : "Invalid command for topology handler: " + req;
assert SUPPORTED_COMMANDS.contains(req.command());
if (log.isDebugEnabled())
log.debug("Handling cache REST request: " + req);
GridRestCacheRequest req0 = (GridRestCacheRequest) req;
final Object key = req0.key();
final Set<GridClientCacheFlag> cacheFlags = GridClientCacheFlag.parseCacheFlags(req0.cacheFlags());
try {
GridRestCommand cmd = req0.command();
if (req0.cacheName() == null && !CACHE_NAME_NOT_REQUIRED_REQUESTS.contains(cmd))
throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("cacheName"));
if (key == null && KEY_REQUIRED_REQUESTS.contains(cmd))
throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("key"));
final Long ttl = req0.ttl();
IgniteInternalFuture<GridRestResponse> fut;
switch(cmd) {
case DESTROY_CACHE:
{
// Do not check thread tx here since there can be active system cache txs.
fut = ((IgniteKernal) ctx.grid()).destroyCacheAsync(req0.cacheName(), false, false).chain(new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
@Override
public GridRestResponse applyx(IgniteInternalFuture<?> f) throws IgniteCheckedException {
f.get();
return new GridRestResponse(null);
}
});
break;
}
case GET_OR_CREATE_CACHE:
{
String templateName = req0.templateName();
if (F.isEmpty(templateName))
templateName = TEMPLATE_PARTITIONED;
CacheConfigurationOverride cfgOverride = req0.configuration();
boolean dfltPartTemplate = F.isEmpty(templateName) || TEMPLATE_PARTITIONED.equalsIgnoreCase(templateName);
boolean dfltReplTemplate = TEMPLATE_REPLICATED.equalsIgnoreCase(templateName);
if (dfltPartTemplate || dfltReplTemplate) {
if (cfgOverride == null)
cfgOverride = new CacheConfigurationOverride();
cfgOverride.mode(dfltPartTemplate ? PARTITIONED : REPLICATED);
if (cfgOverride.writeSynchronizationMode() == null)
cfgOverride.writeSynchronizationMode(FULL_SYNC);
}
// Do not check thread tx here since there can be active system cache txs.
fut = ((IgniteKernal) ctx.grid()).getOrCreateCacheAsync(req0.cacheName(), templateName, cfgOverride, false).chain(new CX1<IgniteInternalFuture<?>, GridRestResponse>() {
@Override
public GridRestResponse applyx(IgniteInternalFuture<?> f) throws IgniteCheckedException {
f.get();
return new GridRestResponse(null);
}
});
break;
}
case CACHE_METADATA:
{
fut = ctx.task().execute(MetadataTask.class, req0.cacheName());
break;
}
case CACHE_CONTAINS_KEYS:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new ContainsKeysCommand(getKeys(req0)));
break;
}
case CACHE_CONTAINS_KEY:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new ContainsKeyCommand(key));
break;
}
case CACHE_GET:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetCommand(key));
break;
}
case CACHE_GET_AND_PUT:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetAndPutCommand(key, getValue(req0)));
break;
}
case CACHE_GET_AND_REPLACE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetAndReplaceCommand(key, getValue(req0)));
break;
}
case CACHE_GET_AND_PUT_IF_ABSENT:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetAndPutIfAbsentCommand(key, getValue(req0)));
break;
}
case CACHE_PUT_IF_ABSENT:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new PutIfAbsentCommand(key, ttl, getValue(req0)));
break;
}
case CACHE_GET_ALL:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetAllCommand(getKeys(req0)));
break;
}
case CACHE_PUT:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new PutCommand(key, ttl, getValue(req0)));
break;
}
case CACHE_ADD:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new AddCommand(key, ttl, getValue(req0)));
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(), req0.cacheName(), cacheFlags, key, new PutAllCommand(map));
break;
}
case CACHE_REMOVE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new RemoveCommand(key));
break;
}
case CACHE_REMOVE_VALUE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new RemoveValueCommand(key, getValue(req0)));
break;
}
case CACHE_REPLACE_VALUE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new ReplaceValueCommand(key, getValue(req0), req0.value2()));
break;
}
case CACHE_GET_AND_REMOVE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new GetAndRemoveCommand(key));
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(), req0.cacheName(), cacheFlags, key, new RemoveAllCommand(keys));
break;
}
case CACHE_CLEAR:
{
Set<Object> cacheNames = getKeys(req0);
GridCompoundFuture compFut = new GridCompoundFuture();
for (Object cName : cacheNames) compFut.add(executeCommand(req.destinationId(), (String) cName, cacheFlags, key, new RemoveAllCommand(null)));
compFut.markInitialized();
fut = compFut.chain(new CX1<GridCompoundFuture<GridCacheRestResponse, ?>, GridRestResponse>() {
@Override
public GridRestResponse applyx(GridCompoundFuture<GridCacheRestResponse, ?> cf) throws IgniteCheckedException {
boolean success = true;
for (IgniteInternalFuture<GridCacheRestResponse> f : cf.futures()) if (!((Boolean) f.get().getResponse()))
success = false;
GridCacheRestResponse resp = new GridCacheRestResponse();
if (success)
resp.setResponse(true);
else
resp.setResponse(false);
return resp;
}
});
break;
}
case CACHE_REPLACE:
{
final Object val = req0.value();
if (val == null)
throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("val"));
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new ReplaceCommand(key, ttl, val));
break;
}
case CACHE_CAS:
{
final Object val1 = req0.value();
final Object val2 = req0.value2();
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new CasCommand(val2, val1, key));
break;
}
case CACHE_APPEND:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new AppendCommand(key, req0));
break;
}
case CACHE_PREPEND:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), cacheFlags, key, new PrependCommand(key, req0));
break;
}
case CACHE_METRICS:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), key, new MetricsCommand());
break;
}
case CACHE_SIZE:
{
fut = executeCommand(req.destinationId(), req0.cacheName(), key, new SizeCommand());
break;
}
case CACHE_UPDATE_TLL:
{
if (ttl == null)
throw new IgniteCheckedException(GridRestCommandHandlerAdapter.missingParameter("ttl"));
fut = executeCommand(req.destinationId(), req0.cacheName(), key, new UpdateTllCommand(key, ttl));
break;
}
default:
throw new IllegalArgumentException("Invalid command for cache handler: " + req);
}
return fut;
} catch (IgniteException | IgniteCheckedException e) {
U.error(log, "Failed to execute cache command: " + req, e);
return new GridFinishedFuture<>(e);
} finally {
if (log.isDebugEnabled())
log.debug("Handled cache REST request: " + req);
}
}
use of org.apache.ignite.internal.client.GridClientCacheFlag in project ignite by apache.
the class ClientCacheFlagsCodecTest method testEncodingDecodingFullness.
/**
* Tests that each client flag will be correctly converted to server flag.
*/
@Test
public void testEncodingDecodingFullness() {
for (GridClientCacheFlag f : GridClientCacheFlag.values()) {
int bits = GridClientCacheFlag.encodeCacheFlags(EnumSet.of(f));
assertTrue(bits != 0);
Set<GridClientCacheFlag> out = GridClientCacheFlag.parseCacheFlags(bits);
assertTrue(out.contains(f));
}
}
Aggregations