mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-20 15:38:07 +01:00
migrate token bucket redis record format from json to hash: phase 2
This commit is contained in:
@@ -10,6 +10,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.whispersystems.textsecuregcm.util.redis.RedisLuaScriptSandbox.tail;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -19,7 +20,7 @@ public class BaseRedisCommandsHandler implements RedisCommandsHandler {
|
||||
|
||||
@Override
|
||||
public Object redisCommand(final String command, final List<Object> args) {
|
||||
return switch (command) {
|
||||
return switch (command.toUpperCase(Locale.ROOT)) {
|
||||
case "SET" -> {
|
||||
assertTrue(args.size() > 2);
|
||||
yield set(args.get(0).toString(), args.get(1).toString(), tail(args, 2));
|
||||
@@ -33,13 +34,18 @@ public class BaseRedisCommandsHandler implements RedisCommandsHandler {
|
||||
yield del(args.stream().map(Object::toString).toList());
|
||||
}
|
||||
case "HSET" -> {
|
||||
assertTrue(args.size() >= 3);
|
||||
yield hset(args.get(0).toString(), args.get(1).toString(), args.get(2).toString(), tail(args, 3));
|
||||
assertTrue(args.size() > 1);
|
||||
assertTrue(args.size() % 2 == 1);
|
||||
yield hset(args.get(0).toString(), tail(args, 1));
|
||||
}
|
||||
case "HGET" -> {
|
||||
assertEquals(2, args.size());
|
||||
yield hget(args.get(0).toString(), args.get(1).toString());
|
||||
}
|
||||
case "HMGET" -> {
|
||||
assertTrue(args.size() > 1);
|
||||
yield hmget(args.get(0).toString(), tail(args, 1));
|
||||
}
|
||||
case "PEXPIRE" -> {
|
||||
assertEquals(2, args.size());
|
||||
yield pexpire(args.get(0).toString(), Double.valueOf(args.get(1).toString()).longValue(), tail(args, 2));
|
||||
@@ -85,7 +91,7 @@ public class BaseRedisCommandsHandler implements RedisCommandsHandler {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Object hset(final String key, final String field, final String value, final List<Object> other) {
|
||||
public Object hset(final String key, final List<Object> fieldsAndValues) {
|
||||
return "OK";
|
||||
}
|
||||
|
||||
@@ -93,6 +99,10 @@ public class BaseRedisCommandsHandler implements RedisCommandsHandler {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Object[] hmget(final String key, final List<Object> fields) {
|
||||
return new Object[fields.size()];
|
||||
}
|
||||
|
||||
public Object set(final String key, final String value, final List<Object> tail) {
|
||||
return "OK";
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.whispersystems.textsecuregcm.util.redis;
|
||||
|
||||
import java.time.Clock;
|
||||
import java.util.Iterator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -46,13 +47,18 @@ public class SimpleCacheCommandsHandler extends BaseRedisCommandsHandler {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Object hset(final String key, final String field, final String value, final List<Object> other) {
|
||||
public Object hset(final String key, final List<Object> fieldsAndValues) {
|
||||
Map<Object, Object> map = getIfNotExpired(key, Map.class);
|
||||
if (map == null) {
|
||||
map = new ConcurrentHashMap<>();
|
||||
cache.put(key, new Entry(map, Long.MAX_VALUE));
|
||||
}
|
||||
map.put(field, value);
|
||||
final Iterator<Object> iter = fieldsAndValues.iterator();
|
||||
while (iter.hasNext()) {
|
||||
final Object k = iter.next();
|
||||
final Object v = iter.next();
|
||||
map.put(k, v);
|
||||
}
|
||||
return "OK";
|
||||
}
|
||||
|
||||
@@ -62,6 +68,15 @@ public class SimpleCacheCommandsHandler extends BaseRedisCommandsHandler {
|
||||
return map == null ? null : map.get(field);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] hmget(final String key, final List<Object> fields) {
|
||||
final Object[] res = new Object[fields.size()];
|
||||
for (int i = 0; i < fields.size(); i++) {
|
||||
res[i] = hget(key, fields.get(i).toString());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Object push(final boolean left, final String key, final List<Object> values) {
|
||||
|
||||
Reference in New Issue
Block a user