Skip to content

Commit d46bee7

Browse files
author
Jennifer Hickey
committed
Revert "convertAndSend returns the nr of targeted channels"
- DATAREDIS-118 - Change method return type back to void to fix backwards compatibility issues - Modify tests to assert specific clients receive or don't receive messages vs comparing expected client counts
1 parent 34725d0 commit d46bee7

File tree

4 files changed

+56
-48
lines changed

4 files changed

+56
-48
lines changed

src/main/java/org/springframework/data/redis/core/RedisOperations.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public interface RedisOperations<K, V> {
117117
List<Object> exec();
118118

119119
// pubsub functionality on the template
120-
Long convertAndSend(String destination, Object message);
120+
void convertAndSend(String destination, Object message);
121121

122122

123123
// operation types

src/main/java/org/springframework/data/redis/core/RedisTemplate.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -496,16 +496,17 @@ public Boolean doInRedis(RedisConnection connection) {
496496
}
497497

498498

499-
public Long convertAndSend(String channel, Object message) {
499+
public void convertAndSend(String channel, Object message) {
500500
Assert.hasText(channel, "a non-empty channel is required");
501501

502502
final byte[] rawChannel = rawString(channel);
503503
final byte[] rawMessage = rawValue(message);
504504

505-
return execute(new RedisCallback<Long>() {
505+
execute(new RedisCallback<Object>() {
506506

507-
public Long doInRedis(RedisConnection connection) {
508-
return connection.publish(rawChannel, rawMessage);
507+
public Object doInRedis(RedisConnection connection) {
508+
connection.publish(rawChannel, rawMessage);
509+
return null;
509510
}
510511
}, true);
511512
}

src/test/java/org/springframework/data/redis/listener/PubSubResubscribeTests.java

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -46,26 +46,19 @@
4646

4747
/**
4848
* @author Costin Leau
49+
* @author Jennifer Hickey
4950
*/
5051
public class PubSubResubscribeTests {
5152

5253
private static final String CHANNEL = "pubsub::test";
53-
private final Long ZERO = Long.valueOf(0);
54-
private final Long ONE = Long.valueOf(1);
55-
private final Long TWO = Long.valueOf(2);
5654

5755
protected RedisMessageListenerContainer container;
5856
protected RedisConnectionFactory factory;
5957
protected RedisTemplate template;
6058

6159
private final BlockingDeque<String> bag = new LinkedBlockingDeque<String>(99);
6260

63-
private final Object handler = new Object() {
64-
public void handleMessage(String message) {
65-
System.out.println(message);
66-
bag.add(message);
67-
}
68-
};
61+
private final Object handler = new MessageHandler("handler1", bag);
6962

7063
private final MessageListenerAdapter adapter = new MessageListenerAdapter(handler);
7164

@@ -121,7 +114,8 @@ public void testContainerPatternResubscribe() throws Exception {
121114
final String PATTERN = "p*";
122115
final String ANOTHER_CHANNEL = "pubsub::test::extra";
123116

124-
MessageListenerAdapter anotherListener = new MessageListenerAdapter(handler);
117+
BlockingDeque<String> bag2 = new LinkedBlockingDeque<String>(99);
118+
MessageListenerAdapter anotherListener = new MessageListenerAdapter(new MessageHandler("handler2", bag2));
125119
anotherListener.setSerializer(template.getValueSerializer());
126120
anotherListener.afterPropertiesSet();
127121

@@ -130,29 +124,36 @@ public void testContainerPatternResubscribe() throws Exception {
130124
container.removeMessageListener(adapter);
131125

132126
// test no messages are sent just to patterns
133-
assertEquals(ONE, template.convertAndSend(CHANNEL, payload1));
134-
assertEquals(ONE, template.convertAndSend(ANOTHER_CHANNEL, payload2));
127+
template.convertAndSend(CHANNEL, payload1);
128+
template.convertAndSend(ANOTHER_CHANNEL, payload2);
135129

130+
// anotherListener receives both messages
136131
List<String> msgs = new ArrayList<String>();
137-
msgs.add(bag.poll(1, TimeUnit.SECONDS));
138-
msgs.add(bag.poll(1, TimeUnit.SECONDS));
132+
msgs.add(bag2.poll(1, TimeUnit.SECONDS));
133+
msgs.add(bag2.poll(1, TimeUnit.SECONDS));
139134

140135
assertEquals(2, msgs.size());
136+
assertTrue(msgs.contains(payload1));
137+
assertTrue(msgs.contains(payload2));
138+
msgs.clear();
139+
140+
// unsubscribed adapter did not receive message
141+
assertNull(bag.poll(1, TimeUnit.SECONDS));
142+
141143
// bind original listener on another channel
142144
container.addMessageListener(adapter, new ChannelTopic(ANOTHER_CHANNEL));
143145

144-
assertEquals(ONE, template.convertAndSend(CHANNEL, payload1));
145-
assertEquals(TWO, template.convertAndSend(ANOTHER_CHANNEL, payload2));
146+
template.convertAndSend(CHANNEL, payload1);
147+
template.convertAndSend(ANOTHER_CHANNEL, payload2);
146148

147-
msgs.add(bag.poll(1, TimeUnit.SECONDS));
148-
msgs.add(bag.poll(1, TimeUnit.SECONDS));
149-
msgs.add(bag.poll(1, TimeUnit.SECONDS));
150-
// this message will not arrive on time
149+
// original listener received only one message on another channel
150+
assertEquals(payload2,bag.poll(1, TimeUnit.SECONDS));
151151
assertNull(bag.poll(1, TimeUnit.SECONDS));
152152

153-
// same message received first per channel subscription, second based on the pattern
154-
assertEquals(5, msgs.size());
155-
153+
//another listener receives messages on both channels
154+
msgs.add(bag2.poll(1, TimeUnit.SECONDS));
155+
msgs.add(bag2.poll(1, TimeUnit.SECONDS));
156+
assertEquals(2, msgs.size());
156157
assertTrue(msgs.contains(payload1));
157158
assertTrue(msgs.contains(payload2));
158159
}
@@ -171,22 +172,36 @@ public void testContainerChannelResubscribe() throws Exception {
171172
container.addMessageListener(adapter, new ChannelTopic(ANOTHER_CHANNEL));
172173
container.removeMessageListener(null, new ChannelTopic(CHANNEL));
173174

174-
assertEquals(ZERO, template.convertAndSend(CHANNEL, payload1));
175-
assertEquals(ZERO, template.convertAndSend(CHANNEL, payload2));
175+
// Listener removed from channel
176+
template.convertAndSend(CHANNEL, payload1);
177+
template.convertAndSend(CHANNEL, payload2);
176178

177-
assertEquals(ONE, template.convertAndSend(ANOTHER_CHANNEL, anotherPayload1));
178-
assertEquals(ONE, template.convertAndSend(ANOTHER_CHANNEL, anotherPayload2));
179+
// Listener receives messages on another channel
180+
template.convertAndSend(ANOTHER_CHANNEL, anotherPayload1);
181+
template.convertAndSend(ANOTHER_CHANNEL, anotherPayload2);
179182

180183
Set<String> set = new LinkedHashSet<String>();
181184
set.add(bag.poll(1, TimeUnit.SECONDS));
182185
set.add(bag.poll(1, TimeUnit.SECONDS));
183186

184-
System.out.println(set);
185-
186187
assertFalse(set.contains(payload1));
187188
assertFalse(set.contains(payload2));
188189

189190
assertTrue(set.contains(anotherPayload1));
190191
assertTrue(set.contains(anotherPayload2));
191192
}
193+
194+
private class MessageHandler {
195+
private final BlockingDeque<String> bag;
196+
private final String name;
197+
198+
public MessageHandler(String name, BlockingDeque<String> bag) {
199+
this.bag = bag;
200+
this.name = name;
201+
}
202+
public void handleMessage(String message) {
203+
System.out.println(name + ": " + message);
204+
bag.add(message);
205+
}
206+
}
192207
}

src/test/java/org/springframework/data/redis/listener/PubSubTests.java

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@
1616
package org.springframework.data.redis.listener;
1717

1818
import static org.junit.Assert.assertEquals;
19-
import static org.junit.Assert.assertFalse;
2019
import static org.junit.Assert.assertTrue;
20+
import static org.junit.Assert.assertNull;
2121

2222
import java.util.Arrays;
2323
import java.util.Collection;
@@ -50,9 +50,6 @@
5050
public class PubSubTests<T> {
5151

5252
private static final String CHANNEL = "pubsub::test";
53-
private final Long ZERO = Long.valueOf(0);
54-
private final Long ONE = Long.valueOf(1);
55-
private final Long TWO = Long.valueOf(2);
5653

5754
protected RedisMessageListenerContainer container;
5855
protected ObjectFactory<T> factory;
@@ -121,8 +118,8 @@ public void testContainerSubscribe() throws Exception {
121118
String payload1 = "do";
122119
String payload2 = "re mi";
123120

124-
assertEquals(ONE, template.convertAndSend(CHANNEL, payload1));
125-
assertEquals(ONE, template.convertAndSend(CHANNEL, payload2));
121+
template.convertAndSend(CHANNEL, payload1);
122+
template.convertAndSend(CHANNEL, payload2);
126123

127124
Set<String> set = new LinkedHashSet<String>();
128125
set.add(bag.poll(1, TimeUnit.SECONDS));
@@ -149,14 +146,9 @@ public void testContainerUnsubscribe() throws Exception {
149146
String payload2 = "re mi";
150147

151148
container.removeMessageListener(adapter, new ChannelTopic(CHANNEL));
152-
assertEquals(ZERO, template.convertAndSend(CHANNEL, payload1));
153-
assertEquals(ZERO, template.convertAndSend(CHANNEL, payload2));
149+
template.convertAndSend(CHANNEL, payload1);
150+
template.convertAndSend(CHANNEL, payload2);
154151

155-
Set<String> set = new LinkedHashSet<String>();
156-
set.add(bag.poll(1, TimeUnit.SECONDS));
157-
set.add(bag.poll(1, TimeUnit.SECONDS));
158-
159-
assertFalse(set.contains(payload1));
160-
assertFalse(set.contains(payload2));
152+
assertNull(bag.poll(1, TimeUnit.SECONDS));
161153
}
162154
}

0 commit comments

Comments
 (0)