Skip to content

Commit 2809186

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

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

Lines changed: 2 additions & 1 deletion
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

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
import org.junit.jupiter.api.Disabled;
4646
import org.junit.jupiter.api.Test;
4747
import org.junit.jupiter.api.condition.DisabledOnOs;
48+
import org.junit.jupiter.params.ParameterizedTest;
49+
import org.junit.jupiter.params.provider.ValueSource;
4850
import org.springframework.beans.factory.annotation.Autowired;
4951
import org.springframework.dao.DataAccessException;
5052
import org.springframework.data.domain.Range;
@@ -110,6 +112,7 @@
110112
* @author Andrey Shlykov
111113
* @author Hendrik Duerkop
112114
* @author Shyngys Sapraliyev
115+
* @author Roman Osadchuk
113116
*/
114117
public abstract class AbstractConnectionIntegrationTests {
115118

@@ -3577,6 +3580,23 @@ void bitFieldIncrByWithOverflowShouldWorkCorrectly() {
35773580
assertThat(results.get(3)).isNotNull();
35783581
}
35793582

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

0 commit comments

Comments
 (0)