Search in sources :

Example 1 with RedisDataTypeMismatchException

use of org.apache.geode.redis.internal.RedisDataTypeMismatchException in project geode by apache.

the class MSetExecutor method executeCommand.

@Override
public void executeCommand(Command command, ExecutionHandlerContext context) {
    List<byte[]> commandElems = command.getProcessedCommand();
    Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion();
    if (commandElems.size() < 3 || commandElems.size() % 2 == 0) {
        command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.MSET));
        return;
    }
    Map<ByteArrayWrapper, ByteArrayWrapper> map = new HashMap<ByteArrayWrapper, ByteArrayWrapper>();
    for (int i = 1; i < commandElems.size(); i += 2) {
        byte[] keyArray = commandElems.get(i);
        ByteArrayWrapper key = new ByteArrayWrapper(keyArray);
        try {
            checkAndSetDataType(key, context);
        } catch (RedisDataTypeMismatchException e) {
            continue;
        }
        byte[] value = commandElems.get(i + 1);
        map.put(key, new ByteArrayWrapper(value));
    }
    r.putAll(map);
    command.setResponse(Coder.getSimpleStringResponse(context.getByteBufAllocator(), SUCCESS));
}
Also used : ByteArrayWrapper(org.apache.geode.redis.internal.ByteArrayWrapper) HashMap(java.util.HashMap) RedisDataTypeMismatchException(org.apache.geode.redis.internal.RedisDataTypeMismatchException)

Example 2 with RedisDataTypeMismatchException

use of org.apache.geode.redis.internal.RedisDataTypeMismatchException in project geode by apache.

the class MSetNXExecutor method executeCommand.

@Override
public void executeCommand(Command command, ExecutionHandlerContext context) {
    List<byte[]> commandElems = command.getProcessedCommand();
    Region<ByteArrayWrapper, ByteArrayWrapper> r = context.getRegionProvider().getStringsRegion();
    if (commandElems.size() < 3 || commandElems.size() % 2 == 0) {
        command.setResponse(Coder.getErrorResponse(context.getByteBufAllocator(), ArityDef.MSETNX));
        return;
    }
    boolean hasEntry = false;
    Map<ByteArrayWrapper, ByteArrayWrapper> map = new HashMap<ByteArrayWrapper, ByteArrayWrapper>();
    for (int i = 1; i < commandElems.size(); i += 2) {
        byte[] keyArray = commandElems.get(i);
        ByteArrayWrapper key = new ByteArrayWrapper(keyArray);
        try {
            checkDataType(key, context);
        } catch (RedisDataTypeMismatchException e) {
            hasEntry = true;
            break;
        }
        byte[] value = commandElems.get(i + 1);
        map.put(key, new ByteArrayWrapper(value));
        if (r.containsKey(key)) {
            hasEntry = true;
            break;
        }
    }
    boolean successful = false;
    if (!hasEntry) {
        successful = true;
        for (ByteArrayWrapper k : map.keySet()) {
            try {
                checkAndSetDataType(k, context);
            } catch (RedisDataTypeMismatchException e) {
                successful = false;
                break;
            }
        }
        r.putAll(map);
    }
    if (successful) {
        command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), SET));
    } else {
        command.setResponse(Coder.getIntegerResponse(context.getByteBufAllocator(), NOT_SET));
    }
}
Also used : ByteArrayWrapper(org.apache.geode.redis.internal.ByteArrayWrapper) HashMap(java.util.HashMap) RedisDataTypeMismatchException(org.apache.geode.redis.internal.RedisDataTypeMismatchException)

Aggregations

HashMap (java.util.HashMap)2 ByteArrayWrapper (org.apache.geode.redis.internal.ByteArrayWrapper)2 RedisDataTypeMismatchException (org.apache.geode.redis.internal.RedisDataTypeMismatchException)2