Skip to content

Commit 50cf71e

Browse files
authored
Fix GraphCommandObjects in multi node (#3362)
1 parent 14cd22f commit 50cf71e

File tree

4 files changed

+40
-8
lines changed

4 files changed

+40
-8
lines changed

src/main/java/redis/clients/jedis/MultiNodePipelineBase.java

+1
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public MultiNodePipelineBase(CommandObjects commandObjects) {
7272
*/
7373
protected final void prepareGraphCommands(ConnectionProvider connectionProvider) {
7474
this.graphCommandObjects = new GraphCommandObjects(connectionProvider);
75+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
7576
}
7677

7778
protected abstract HostAndPort getNodeKey(CommandArguments args);

src/main/java/redis/clients/jedis/UnifiedJedis.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class UnifiedJedis implements JedisCommands, JedisBinaryCommands,
4444
protected final ConnectionProvider provider;
4545
protected final CommandExecutor executor;
4646
private final CommandObjects commandObjects;
47-
private final GraphCommandObjects graphCommandObjects = new GraphCommandObjects(this);
47+
private final GraphCommandObjects graphCommandObjects;
4848
private JedisBroadcastAndRoundRobinConfig broadcastAndRoundRobinConfig = null;
4949

5050
public UnifiedJedis() {
@@ -87,6 +87,8 @@ public UnifiedJedis(ConnectionProvider provider) {
8787
this.provider = provider;
8888
this.executor = new DefaultCommandExecutor(provider);
8989
this.commandObjects = new CommandObjects();
90+
this.graphCommandObjects = new GraphCommandObjects(this);
91+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
9092
}
9193

9294
/**
@@ -109,6 +111,7 @@ public UnifiedJedis(Connection connection) {
109111
this.provider = null;
110112
this.executor = new SimpleCommandExecutor(connection);
111113
this.commandObjects = new CommandObjects();
114+
this.graphCommandObjects = new GraphCommandObjects(this);
112115
}
113116

114117
public UnifiedJedis(Set<HostAndPort> jedisClusterNodes, JedisClientConfig clientConfig, int maxAttempts) {
@@ -129,24 +132,32 @@ public UnifiedJedis(ClusterConnectionProvider provider, int maxAttempts, Duratio
129132
this.provider = provider;
130133
this.executor = new ClusterCommandExecutor(provider, maxAttempts, maxTotalRetriesDuration);
131134
this.commandObjects = new ClusterCommandObjects();
135+
this.graphCommandObjects = new GraphCommandObjects(this);
136+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
132137
}
133138

134139
public UnifiedJedis(ShardedConnectionProvider provider) {
135140
this.provider = provider;
136141
this.executor = new DefaultCommandExecutor(provider);
137142
this.commandObjects = new ShardedCommandObjects(provider.getHashingAlgo());
143+
this.graphCommandObjects = new GraphCommandObjects(this);
144+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
138145
}
139146

140147
public UnifiedJedis(ShardedConnectionProvider provider, Pattern tagPattern) {
141148
this.provider = provider;
142149
this.executor = new DefaultCommandExecutor(provider);
143150
this.commandObjects = new ShardedCommandObjects(provider.getHashingAlgo(), tagPattern);
151+
this.graphCommandObjects = new GraphCommandObjects(this);
152+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
144153
}
145154

146155
public UnifiedJedis(ConnectionProvider provider, int maxAttempts, Duration maxTotalRetriesDuration) {
147156
this.provider = provider;
148157
this.executor = new RetryableCommandExecutor(provider, maxAttempts, maxTotalRetriesDuration);
149158
this.commandObjects = new CommandObjects();
159+
this.graphCommandObjects = new GraphCommandObjects(this);
160+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
150161
}
151162

152163
/**
@@ -159,6 +170,8 @@ public UnifiedJedis(CommandExecutor executor) {
159170
this.provider = null;
160171
this.executor = executor;
161172
this.commandObjects = new CommandObjects();
173+
this.graphCommandObjects = new GraphCommandObjects(this);
174+
this.graphCommandObjects.setBaseCommandArgumentsCreator((comm) -> this.commandObjects.commandArguments(comm));
162175
}
163176

164177
@Override

src/main/java/redis/clients/jedis/graph/GraphCommandObjects.java

+17-7
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
import java.util.Map;
1010
import java.util.concurrent.ConcurrentHashMap;
1111
import java.util.concurrent.CopyOnWriteArrayList;
12+
import java.util.function.Function;
1213

1314
import redis.clients.jedis.Builder;
1415
import redis.clients.jedis.CommandArguments;
1516
import redis.clients.jedis.CommandObject;
1617
import redis.clients.jedis.Connection;
18+
import redis.clients.jedis.commands.ProtocolCommand;
1719
import redis.clients.jedis.graph.GraphProtocol.GraphCommand;
1820
import redis.clients.jedis.providers.ConnectionProvider;
1921

@@ -22,6 +24,8 @@ public class GraphCommandObjects {
2224
private final RedisGraphCommands graph;
2325
private final Connection connection;
2426
private final ConnectionProvider provider;
27+
private Function<ProtocolCommand, CommandArguments> commArgs = (comm) -> new CommandArguments(comm);
28+
2529
private final ConcurrentHashMap<String, Builder<ResultSet>> builders = new ConcurrentHashMap<>();
2630

2731
public GraphCommandObjects(RedisGraphCommands graphCommands) {
@@ -31,24 +35,28 @@ public GraphCommandObjects(RedisGraphCommands graphCommands) {
3135
}
3236

3337
public GraphCommandObjects(Connection connection) {
38+
this.graph = null;
3439
this.connection = connection;
3540
this.provider = null;
36-
this.graph = null;
3741
}
3842

3943
public GraphCommandObjects(ConnectionProvider provider) {
40-
this.provider = provider;
41-
this.connection = null;
4244
this.graph = null;
45+
this.connection = null;
46+
this.provider = provider;
47+
}
48+
49+
public void setBaseCommandArgumentsCreator(Function<ProtocolCommand, CommandArguments> commArgs) {
50+
this.commArgs = commArgs;
4351
}
4452

4553
// RedisGraph commands
4654
public final CommandObject<ResultSet> graphQuery(String name, String query) {
47-
return new CommandObject<>(new CommandArguments(GraphCommand.QUERY).key(name).add(query).add(__COMPACT), getBuilder(name));
55+
return new CommandObject<>(commArgs.apply(GraphCommand.QUERY).key(name).add(query).add(__COMPACT), getBuilder(name));
4856
}
4957

5058
public final CommandObject<ResultSet> graphReadonlyQuery(String name, String query) {
51-
return new CommandObject<>(new CommandArguments(GraphCommand.RO_QUERY).key(name).add(query).add(__COMPACT), getBuilder(name));
59+
return new CommandObject<>(commArgs.apply(GraphCommand.RO_QUERY).key(name).add(query).add(__COMPACT), getBuilder(name));
5260
}
5361

5462
public final CommandObject<ResultSet> graphQuery(String name, String query, long timeout) {
@@ -76,11 +84,13 @@ public final CommandObject<ResultSet> graphReadonlyQuery(String name, String que
7684
}
7785

7886
private CommandObject<ResultSet> graphQuery(String name, GraphQueryParams params) {
79-
return new CommandObject<>(params.getArguments(name), getBuilder(name));
87+
return new CommandObject<>(
88+
commArgs.apply(!params.isReadonly() ? GraphCommand.QUERY : GraphCommand.RO_QUERY)
89+
.key(name).addParams(params), getBuilder(name));
8090
}
8191

8292
public final CommandObject<String> graphDelete(String name) {
83-
return new CommandObject<>(new CommandArguments(GraphCommand.DELETE).key(name), STRING);
93+
return new CommandObject<>(commArgs.apply(GraphCommand.DELETE).key(name), STRING);
8494
}
8595
// RedisGraph commands
8696

src/main/java/redis/clients/jedis/graph/GraphQueryParams.java

+8
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
import java.util.HashMap;
44
import java.util.Map;
5+
import java.util.function.Function;
6+
57
import redis.clients.jedis.CommandArguments;
8+
import redis.clients.jedis.commands.ProtocolCommand;
69
import redis.clients.jedis.exceptions.JedisException;
710
import redis.clients.jedis.graph.GraphProtocol.GraphCommand;
811
import redis.clients.jedis.graph.GraphProtocol.GraphKeyword;
@@ -83,6 +86,11 @@ public void addParams(CommandArguments args) {
8386
}
8487
}
8588

89+
public boolean isReadonly() {
90+
return readonly;
91+
}
92+
93+
@Deprecated
8694
public CommandArguments getArguments(String graphName) {
8795
return new CommandArguments(!readonly ? GraphCommand.QUERY : GraphCommand.RO_QUERY)
8896
.key(graphName).addParams(this);

0 commit comments

Comments
 (0)