RedissonMultimap.fastRemove method cluster compatibility fixed

pull/482/head
Nikita 9 years ago
parent cb2a6e9736
commit b60b170d45

@ -22,13 +22,12 @@ import java.util.AbstractSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.concurrent.TimeUnit;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.redisson.client.codec.Codec; import org.redisson.client.codec.Codec;
import org.redisson.client.codec.LongCodec; import org.redisson.client.codec.LongCodec;
@ -167,24 +166,24 @@ public abstract class RedissonMultimap<K, V> extends RedissonExpirable implement
} }
try { try {
List<Object> args = new ArrayList<Object>(keys.length*2); List<Object> mapKeys = new ArrayList<Object>(keys.length);
List<Object> hashes = new ArrayList<Object>(); List<Object> listKeys = new ArrayList<Object>(keys.length + 1);
listKeys.add(getName());
for (K key : keys) { for (K key : keys) {
byte[] keyState = codec.getMapKeyEncoder().encode(key); byte[] keyState = codec.getMapKeyEncoder().encode(key);
args.add(keyState); mapKeys.add(keyState);
String keyHash = hash(keyState); String keyHash = hash(keyState);
String name = getValuesName(keyHash); String name = getValuesName(keyHash);
hashes.add(name); listKeys.add(name);
} }
args.addAll(hashes);
return commandExecutor.evalWriteAsync(getName(), codec, RedisCommands.EVAL_LONG, return commandExecutor.evalWriteAsync(getName(), codec, RedisCommands.EVAL_LONG,
"local res = redis.call('hdel', KEYS[1], unpack(ARGV, 1, #ARGV/2)); " + "local res = redis.call('hdel', KEYS[1], unpack(ARGV)); " +
"if res > 0 then " + "if res > 0 then " +
"redis.call('del', unpack(ARGV, #ARGV/2, #ARGV)); " + "redis.call('del', unpack(KEYS, 2, #KEYS)); " +
"end; " + "end; " +
"return res; ", "return res; ",
Collections.<Object>singletonList(getName()), args.toArray()); listKeys, mapKeys.toArray());
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }

Loading…
Cancel
Save