Merge pull request from seakider/fix_ringbuffer

Fixed - RingBuffer#setCapacity, trim list incorrect
pull/5994/head
Nikita Koksharov committed by GitHub
commit e7dcb0389e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -68,8 +68,10 @@ public class RedissonRingBuffer<V> extends RedissonQueue<V> implements RRingBuff
public RFuture<Void> setCapacityAsync(int capacity) {
return commandExecutor.evalWriteAsync(getRawName(), LongCodec.INSTANCE, RedisCommands.EVAL_VOID,
"redis.call('set', KEYS[2], ARGV[1]); " +
"local len = redis.call('llen', KEYS[1]); " +
"redis.call('ltrim', KEYS[1], len - tonumber(ARGV[1]), len - 1); ",
"local len = redis.call('llen', KEYS[1]); " +
"if len > tonumber(ARGV[1]) then " +
"redis.call('ltrim', KEYS[1], len - tonumber(ARGV[1]), -1); " +
"end; ",
Arrays.asList(getRawName(), settingsName), capacity);
}

@ -31,6 +31,28 @@ public class RedissonRingBufferTest extends RedisDockerTest {
}
@Test
public void testReSetCapacity() {
RRingBuffer<Integer> buffer = redisson.getRingBuffer("test");
buffer.trySetCapacity(3);
for (int i = 0; i < 3; i++) {
buffer.add(i);
}
assertThat(buffer).containsExactly(0, 1, 2);
assertThat(buffer.size()).isEqualTo(3);
// new capacity greater than list's length, not trim
buffer.setCapacity(5);
assertThat(buffer).containsExactly(0, 1, 2);
assertThat(buffer.size()).isEqualTo(3);
// new capacity less than list's length, trim size to new capacity
buffer.setCapacity(1);
assertThat(buffer).containsExactly(2);
assertThat(buffer.size()).isEqualTo(1);
}
@Test
public void testAdd() {
RRingBuffer<Integer> buffer = redisson.getRingBuffer("test");

Loading…
Cancel
Save