Skip to content

Commit a77df79

Browse files
osadchuk-romanmp911de
authored andcommitted
Use correct bitfield offset for INCRBY using Lettuce.
Closes #2903 Original pull request: #2901
1 parent bdec996 commit a77df79

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConverters.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
* @author Chris Bono
8080
* @author Vikas Garg
8181
* @author John Blum
82+
* @author Roman Osadchuk
8283
*/
8384
@SuppressWarnings("ConstantConditions")
8485
public abstract class LettuceConverters extends Converters {
@@ -720,7 +721,7 @@ public static BitFieldArgs toBitFieldArgs(BitFieldSubCommands subCommands) {
720721
args = args.overflow(type);
721722
}
722723

723-
args = args.incrBy(bitFieldType, (int) subCommand.getOffset().getValue(), ((BitFieldIncrBy) subCommand).getValue());
724+
args = args.incrBy(bitFieldType, offset, ((BitFieldIncrBy) subCommand).getValue());
724725
}
725726
}
726727

src/test/java/org/springframework/data/redis/connection/AbstractConnectionIntegrationTests.java

+20
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
import org.junit.jupiter.api.Disabled;
4444
import org.junit.jupiter.api.Test;
4545
import org.junit.jupiter.api.condition.DisabledOnOs;
46+
import org.junit.jupiter.params.ParameterizedTest;
47+
import org.junit.jupiter.params.provider.ValueSource;
4648
import org.springframework.beans.factory.annotation.Autowired;
4749
import org.springframework.dao.DataAccessException;
4850
import org.springframework.data.domain.Range;
@@ -108,6 +110,7 @@
108110
* @author Andrey Shlykov
109111
* @author Hendrik Duerkop
110112
* @author Shyngys Sapraliyev
113+
* @author Roman Osadchuk
111114
*/
112115
public abstract class AbstractConnectionIntegrationTests {
113116

@@ -3574,6 +3577,23 @@ void bitFieldIncrByWithOverflowShouldWorkCorrectly() {
35743577
assertThat(results.get(3)).isNotNull();
35753578
}
35763579

3580+
@ParameterizedTest // DATAREDIS-2903
3581+
@ValueSource(booleans = {false, true})
3582+
void bitFieldIncrByAndThenGetShouldWorkCorrectly(boolean isMultipliedByTypeLengthOffset) {
3583+
var offset = isMultipliedByTypeLengthOffset
3584+
? BitFieldSubCommands.Offset.offset(300L).multipliedByTypeLength()
3585+
: BitFieldSubCommands.Offset.offset(400L);
3586+
3587+
actual.add(connection.bitfield(KEY_1, create().incr(INT_8).valueAt(offset).by(1L)));
3588+
actual.add(connection.bitfield(KEY_1, create().get(INT_8).valueAt(offset)));
3589+
3590+
List<Object> results = getResults();
3591+
3592+
assertThat(results).hasSize(2)
3593+
// should return same results after INCRBY and GET operations for bitfield with same offset
3594+
.containsExactly(List.of(1L), List.of(1L));
3595+
}
3596+
35773597
@Test // DATAREDIS-562
35783598
void bitfieldShouldAllowMultipleSubcommands() {
35793599

0 commit comments

Comments
 (0)