Fixed - RBlockingQueue.drainTo doesn't work when queue contains only one element. #1809

pull/1871/head
Nikita Koksharov 6 years ago
parent 1b8849f522
commit d1618f4b69

@ -150,7 +150,7 @@ public class RedissonBlockingQueue<V> extends RedissonQueue<V> implements RBlock
return commandExecutor.evalWriteAsync(getName(), codec, new RedisCommand<Object>("EVAL", new ListDrainToDecoder(c)),
"local vals = redis.call('lrange', KEYS[1], 0, -1); " +
"redis.call('ltrim', KEYS[1], -1, 0); " +
"redis.call('del', KEYS[1]); " +
"return vals", Collections.<Object>singletonList(getName()));
}

@ -467,6 +467,18 @@ public class RedissonBlockingQueueTest extends RedissonQueueTest {
assertThat(queue2).containsExactly(3, 4, 5, 6);
}
@Test
public void testDrainToSingle() {
RBlockingQueue<Integer> queue = getQueue();
Assert.assertTrue(queue.add(1));
Assert.assertEquals(1, queue.size());
Set<Integer> batch = new HashSet<Integer>();
int count = queue.drainTo(batch);
Assert.assertEquals(1, count);
Assert.assertEquals(1, batch.size());
Assert.assertTrue(queue.isEmpty());
}
@Test
public void testDrainTo() {
RBlockingQueue<Integer> queue = getQueue();

Loading…
Cancel
Save