Skip to content

Commit 32bc71a

Browse files
authored
Merge bac0296 into a2386fe
2 parents a2386fe + bac0296 commit 32bc71a

File tree

4 files changed

+103
-0
lines changed

4 files changed

+103
-0
lines changed

Diff for: src/main/java/redis/clients/jedis/Jedis.java

+7
Original file line numberDiff line numberDiff line change
@@ -4325,6 +4325,13 @@ public String clientNoTouchOff() {
43254325
return connection.getStatusCodeReply();
43264326
}
43274327

4328+
@Override
4329+
public TrackingInfo clientTrackingInfo() {
4330+
checkIsInMultiOrPipeline();
4331+
connection.sendCommand(CLIENT, "TRACKINGINFO");
4332+
return TrackingInfo.TRACKING_INFO_BUILDER.build(connection.getOne());
4333+
}
4334+
43284335
public List<String> time() {
43294336
checkIsInMultiOrPipeline();
43304337
connection.sendCommand(Command.TIME);

Diff for: src/main/java/redis/clients/jedis/commands/ClientCommands.java

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import redis.clients.jedis.args.ClientType;
66
import redis.clients.jedis.args.UnblockType;
77
import redis.clients.jedis.params.ClientKillParams;
8+
import redis.clients.jedis.resps.TrackingInfo;
89

910
/**
1011
* The interface contain all the commands about client.
@@ -170,4 +171,6 @@ public interface ClientCommands {
170171
* @return OK
171172
*/
172173
String clientNoTouchOff();
174+
175+
TrackingInfo clientTrackingInfo();
173176
}
+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package redis.clients.jedis.resps;
2+
3+
import redis.clients.jedis.Builder;
4+
import redis.clients.jedis.util.KeyValue;
5+
6+
import java.util.Collections;
7+
import java.util.List;
8+
9+
import static redis.clients.jedis.BuilderFactory.*;
10+
11+
public class TrackingInfo {
12+
13+
private final List<String> flags;
14+
private final long redirect;
15+
private final List<String> prefixes;
16+
17+
public TrackingInfo(List<String> flags, long redirect, List<String> prefixes) {
18+
this.flags = flags;
19+
this.redirect = redirect;
20+
this.prefixes = prefixes;
21+
}
22+
23+
24+
public List<String> getFlags() {
25+
return flags;
26+
}
27+
28+
public long getRedirect() {
29+
return redirect;
30+
}
31+
32+
public List<String> getPrefixes() {
33+
return prefixes;
34+
}
35+
36+
public static final Builder<TrackingInfo> TRACKING_INFO_BUILDER = new Builder<TrackingInfo>() {
37+
@Override
38+
public TrackingInfo build(Object data) {
39+
List commandData = (List) data;
40+
41+
if (commandData.get(0) instanceof KeyValue) {
42+
List<String> flags = Collections.emptyList();
43+
long redirect = -1;
44+
List<String> prefixes = Collections.emptyList();
45+
46+
for (KeyValue kv : (List<KeyValue>) commandData) {
47+
switch (STRING.build(kv.getKey())) {
48+
case "flags":
49+
flags = STRING_LIST.build(kv.getValue());
50+
break;
51+
case "redirect":
52+
redirect = LONG.build(kv.getValue());
53+
break;
54+
case "prefixes":
55+
prefixes = STRING_LIST.build(kv.getValue());
56+
break;
57+
}
58+
}
59+
60+
return new TrackingInfo(flags, redirect, prefixes);
61+
} else {
62+
List<String> flags = STRING_LIST.build(commandData.get(1));
63+
long redirect = LONG.build(commandData.get(3));
64+
List<String> prefixes = STRING_LIST.build(commandData.get(5));
65+
66+
return new TrackingInfo(flags, redirect, prefixes);
67+
}
68+
}
69+
};
70+
}

Diff for: src/test/java/redis/clients/jedis/commands/jedis/ClientCommandsTest.java

+23
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,15 @@
1919
import org.junit.Before;
2020
import org.junit.Test;
2121

22+
import redis.clients.jedis.DefaultJedisClientConfig;
2223
import redis.clients.jedis.Jedis;
24+
import redis.clients.jedis.RedisProtocol;
2325
import redis.clients.jedis.args.ClientAttributeOption;
2426
import redis.clients.jedis.args.ClientType;
2527
import redis.clients.jedis.args.UnblockType;
2628
import redis.clients.jedis.exceptions.JedisConnectionException;
2729
import redis.clients.jedis.params.ClientKillParams;
30+
import redis.clients.jedis.resps.TrackingInfo;
2831

2932
public class ClientCommandsTest extends JedisCommandsTestBase {
3033

@@ -279,6 +282,26 @@ public void listWithType() {
279282
assertEquals(1, client.clientList(ClientType.PUBSUB).split("\\n").length);
280283
}
281284

285+
@Test
286+
public void trackingInfo() {
287+
TrackingInfo trackingInfo = client.clientTrackingInfo();
288+
289+
assertEquals(1, trackingInfo.getFlags().size());
290+
assertEquals(-1, trackingInfo.getRedirect());
291+
assertEquals(0, trackingInfo.getPrefixes().size());
292+
}
293+
294+
@Test
295+
public void trackingInfoResp3() {
296+
Jedis clientResp3 = new Jedis(hnp, DefaultJedisClientConfig.builder()
297+
.protocol(RedisProtocol.RESP3).password("foobared").build());
298+
TrackingInfo trackingInfo = clientResp3.clientTrackingInfo();
299+
300+
assertEquals(1, trackingInfo.getFlags().size());
301+
assertEquals(-1, trackingInfo.getRedirect());
302+
assertEquals(0, trackingInfo.getPrefixes().size());
303+
}
304+
282305
private void assertDisconnected(Jedis j) {
283306
try {
284307
j.ping();

0 commit comments

Comments
 (0)