Skip to content

Commit 5f29e06

Browse files
authored
Merge branch 'feature/reactor-optional-1' into ali/reactor-optional-tracing
2 parents 6341a43 + d7e5cd8 commit 5f29e06

14 files changed

Lines changed: 8968 additions & 57 deletions

Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ start:
4343
echo "Started test environment with Redis $$display_version.";
4444

4545
test:
46-
mvn -DskipITs=false $(MVN_SOCKET_ARGS) clean compile verify -P$(PROFILE)
46+
TEST_WORK_FOLDER=$(REDIS_ENV_WORK_DIR) mvn -DskipITs=false $(MVN_SOCKET_ARGS) clean compile verify -P$(PROFILE)
4747

4848
test-coverage:
49-
mvn -DskipITs=false $(MVN_SOCKET_ARGS) clean compile verify jacoco:report -P$(PROFILE)
49+
TEST_WORK_FOLDER=$(REDIS_ENV_WORK_DIR) mvn -DskipITs=false $(MVN_SOCKET_ARGS) clean compile verify jacoco:report -P$(PROFILE)
5050

5151
stop:
5252
@$(COMPOSE_ENV) \
@@ -60,4 +60,4 @@ release:
6060
mvn release:prepare
6161
mvn release:perform
6262
ls target/checkout/target/*-bin.zip | xargs gpg -b -a
63-
ls target/checkout/target/*-bin.tar.gz | xargs gpg -b -a
63+
ls target/checkout/target/*-bin.tar.gz | xargs gpg -b -a

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ This version of Lettuce has been tested against the latest Redis source-build.
2727
* [Redis Sentinel](https://redis.github.io/lettuce/ha-sharding/#redis-sentinel_1)
2828
* [Redis Cluster](https://redis.github.io/lettuce/ha-sharding/#redis-cluster)
2929
* [SSL](https://redis.github.io/lettuce/advanced-usage/#ssl-connections) and [Unix Domain Socket](https://redis.github.io/lettuce/advanced-usage/#unix-domain-sockets) connections
30-
* [Streaming API](https://redis.github.io/lettuce/advanced-usage/#streaming-api)
30+
* [Streaming API](https://redis.github.io/lettuce/advanced-usage/streaming-api)
3131
* [Codecs](https://redis.github.io/lettuce/integration-extension/#codecss) (for UTF8/bit/JSON etc. representation of your data)
3232
* multiple [Command Interfaces](https://github.com/redis/lettuce/wiki/Command-Interfaces-%284.0%29)
33-
* Support for [Native Transports](https://redis.github.io/lettuce/advanced-usage/#native-transports)
33+
* Support for [Native Transports](https://redis.github.io/lettuce/advanced-usage/native-transports)
3434
* Support [RediSearch](https://redis.github.io/lettuce/user-guide/redis-search/), [RedisJSON](https://redis.github.io/lettuce/user-guide/redis-json/) and [Redis Vector Sets](https://redis.github.io/lettuce/user-guide/vector-sets/)
3535
* Compatible with Java 8++ (implicit automatic module w/o descriptors)
3636

docs/static/benchmarks/data.js

Lines changed: 8923 additions & 1 deletion
Large diffs are not rendered by default.

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
<micrometer.version>1.14.2</micrometer.version>
6969
<micrometer-tracing.version>1.2.4</micrometer-tracing.version>
7070
<mockito.version>4.9.0</mockito.version>
71-
<netty.version>4.2.5.Final</netty.version>
71+
<netty.version>4.2.12.Final</netty.version>
7272
<openwebbeans.version>2.0.27</openwebbeans.version>
7373
<reactor.version>3.6.6</reactor.version>
7474
<rxjava.version>1.3.8</rxjava.version>

src/main/java/io/lettuce/core/RedisJsonCommandBuilder.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
*
3232
* @author Tihomir Mateev
3333
* @author SeugnSu Kim
34+
* @author Yordan Tsintsov
3435
* @since 6.5
3536
*/
3637
class RedisJsonCommandBuilder<K, V> extends BaseRedisCommandBuilder<K, V> {
@@ -47,10 +48,7 @@ Command<K, V, List<Long>> jsonArrappend(K key, JsonPath jsonPath, JsonValue... j
4748

4849
CommandArgs<K, V> args = new CommandArgs<>(codec).addKey(key);
4950

50-
if (jsonPath != null && !jsonPath.isRootPath()) {
51-
// OPTIONAL as per API
52-
args.add(jsonPath.toString());
53-
}
51+
args.add(jsonPath.toString());
5452

5553
for (JsonValue value : jsonValues) {
5654
args.add(value.asByteBuffer().array());
@@ -64,10 +62,7 @@ Command<K, V, List<Long>> jsonArrappend(K key, JsonPath jsonPath, String... json
6462

6563
CommandArgs<K, V> args = new CommandArgs<>(codec).addKey(key);
6664

67-
if (jsonPath != null && !jsonPath.isRootPath()) {
68-
// OPTIONAL as per API
69-
args.add(jsonPath.toString());
70-
}
65+
args.add(jsonPath.toString());
7166

7267
for (String value : jsonValues) {
7368
args.add(value);

src/test/java/io/lettuce/core/RedisJsonCommandBuilderUnitTests.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import io.netty.buffer.Unpooled;
2121
import org.junit.jupiter.api.Tag;
2222
import org.junit.jupiter.api.Test;
23-
import reactor.core.publisher.Mono;
2423

2524
import java.nio.charset.StandardCharsets;
2625
import java.util.Collections;
@@ -34,6 +33,7 @@
3433
*
3534
* @author Tihomir Mateev
3635
* @author SeugnSu Kim
36+
* @author Yordan Tsintsov
3737
*/
3838
@Tag(UNIT_TEST)
3939
class RedisJsonCommandBuilderUnitTests {
@@ -50,6 +50,8 @@ class RedisJsonCommandBuilderUnitTests {
5050

5151
public static final JsonPath MY_PATH = JsonPath.of("$..commuter_bikes");
5252

53+
public static final String RESP_ENCODED_ROOT_PATH = "$1\r\n" + JsonPath.ROOT_PATH + "\r\n";
54+
5355
RedisJsonCommandBuilder<String, String> builder = new RedisJsonCommandBuilder<>(StringCodec.UTF8, () -> PARSER);
5456

5557
@Test
@@ -68,8 +70,8 @@ void shouldCorrectlyConstructJsonArrappendRootPath() {
6870
ByteBuf buf = Unpooled.directBuffer();
6971
command.encode(buf);
7072

71-
assertThat(buf.toString(StandardCharsets.UTF_8)).isEqualTo(
72-
"*3\r\n" + "$14\r\nJSON.ARRAPPEND\r\n" + "$15\r\nbikes:inventory\r\n" + "$14\r\n" + ID_BIKE_6 + "\r\n");
73+
assertThat(buf.toString(StandardCharsets.UTF_8)).isEqualTo("*4\r\n" + "$14\r\nJSON.ARRAPPEND\r\n"
74+
+ "$15\r\nbikes:inventory\r\n" + RESP_ENCODED_ROOT_PATH + "$14\r\n" + ID_BIKE_6 + "\r\n");
7375
}
7476

7577
@Test
@@ -505,8 +507,8 @@ void shouldCorrectlyConstructJsonArrappendStringOverloadRootPath() {
505507
ByteBuf buf = Unpooled.directBuffer();
506508
command.encode(buf);
507509

508-
assertThat(buf.toString(StandardCharsets.UTF_8)).isEqualTo(
509-
"*3\r\n" + "$14\r\nJSON.ARRAPPEND\r\n" + "$15\r\nbikes:inventory\r\n" + "$14\r\n" + ID_BIKE_6 + "\r\n");
510+
assertThat(buf.toString(StandardCharsets.UTF_8)).isEqualTo("*4\r\n" + "$14\r\nJSON.ARRAPPEND\r\n"
511+
+ "$15\r\nbikes:inventory\r\n" + RESP_ENCODED_ROOT_PATH + "$14\r\n" + ID_BIKE_6 + "\r\n");
510512
}
511513

512514
@Test
@@ -625,8 +627,8 @@ void shouldCorrectlyConstructJsonArrappendStringOverloadRootVararg() {
625627
ByteBuf buf = Unpooled.directBuffer();
626628
command.encode(buf);
627629

628-
assertThat(buf.toString(StandardCharsets.UTF_8))
629-
.isEqualTo("*4\r\n$14\r\nJSON.ARRAPPEND\r\n$15\r\nbikes:inventory\r\n$1\r\nA\r\n$1\r\nB\r\n");
630+
assertThat(buf.toString(StandardCharsets.UTF_8)).isEqualTo("*5\r\n$14\r\nJSON.ARRAPPEND\r\n$15\r\nbikes:inventory\r\n"
631+
+ RESP_ENCODED_ROOT_PATH + "$1\r\nA\r\n$1\r\nB\r\n");
630632
}
631633

632634
@Test

src/test/java/io/lettuce/core/SslIntegrationTests.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,6 @@
6767
@ExtendWith(LettuceExtension.class)
6868
class SslIntegrationTests extends TestSupport {
6969

70-
private static final String KEYSTORE = "work/keystore.jks";
71-
7270
private static File truststoreFile0;
7371

7472
private static File truststoreFile1;
@@ -116,6 +114,8 @@ class SslIntegrationTests extends TestSupport {
116114

117115
@BeforeAll
118116
static void beforeClass() {
117+
assumeTrue(CanConnect.to(TestSettings.host(), sslPort()), "Assume that stunnel runs on port 6443");
118+
119119
Path path0 = createAndSaveTestTruststore("redis-standalone-0", Paths.get("redis-standalone-0/work/tls"), "changeit");
120120
truststoreFile0 = path0.toFile();
121121

@@ -129,8 +129,6 @@ static void beforeClass() {
129129
truststoreFile3 = createAndSaveTestTruststore("redis-standalone-5-client-cert",
130130
Paths.get("redis-standalone-5-client-cert/work/tls"), "changeit").toFile();
131131

132-
assumeTrue(CanConnect.to(TestSettings.host(), sslPort()), "Assume that stunnel runs on port 6443");
133-
// Maybe we should do a list.
134132
assertThat(truststoreFile0).exists();
135133
assertThat(truststoreFile1).exists();
136134
assertThat(truststoreFile2).exists();
@@ -267,7 +265,7 @@ void standaloneWithOpenSsl() {
267265

268266
SslOptions sslOptions = SslOptions.builder() //
269267
.openSslProvider() //
270-
.truststore(truststoreFile0, "changeit") //
268+
.truststore(truststoreFile1, "changeit") //
271269
.build();
272270
setOptions(sslOptions);
273271

src/test/java/io/lettuce/core/cluster/pubsub/RedisClusterPubSubConnectionIntegrationTests.java

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -284,19 +284,6 @@ void testPubSubClientPublish() throws Exception {
284284
assertThat(connectionListener.getMessages().take()).isEqualTo(value);
285285
}
286286

287-
@Test
288-
void testConnectToLeastClientsNode() {
289-
290-
clusterClient.reloadPartitions();
291-
String nodeId = pubSubConnection.sync().clusterMyId();
292-
293-
StatefulRedisPubSubConnection<String, String> connectionAfterPartitionReload = clusterClient.connectPubSub();
294-
String newConnectionNodeId = connectionAfterPartitionReload.sync().clusterMyId();
295-
connectionAfterPartitionReload.close();
296-
297-
assertThat(nodeId).isNotEqualTo(newConnectionNodeId);
298-
}
299-
300287
@Test
301288
void testRegularClientPubSubPublish() throws Exception {
302289

src/test/java/io/lettuce/core/commands/HotkeysCommandIntegrationTests.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ void hotkeysStartOptions() {
150150
redis.hotkeysStop();
151151
redis.hotkeysReset();
152152

153-
// Test DURATION option (auto-stop) - wait for tracking to stop automatically
154-
redis.hotkeysStart(HotkeysArgs.Builder.metrics(HotkeysArgs.Metric.CPU).duration(1));
153+
// Test DURATION option (auto-stop) - wait for tracking to stop automatically.
154+
// Use sample(1) to ensure every command is captured.
155+
redis.hotkeysStart(HotkeysArgs.Builder.metrics(HotkeysArgs.Metric.CPU).duration(1).sample(1));
155156
redis.set("durationkey", "testvalue");
156157
await().until(() -> !redis.hotkeysGet().isTrackingActive());
157158
reply = redis.hotkeysGet();

src/test/java/io/lettuce/core/commands/KeyCommandIntegrationTests.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333

3434
import javax.inject.Inject;
3535

36-
import org.junit.Ignore;
3736
import org.junit.jupiter.api.*;
3837
import org.junit.jupiter.api.extension.ExtendWith;
3938

@@ -52,7 +51,6 @@
5251
import io.lettuce.test.LettuceExtension;
5352
import io.lettuce.test.ListStreamingAdapter;
5453
import io.lettuce.test.condition.EnabledOnCommand;
55-
import io.lettuce.test.condition.RedisConditions;
5654

5755
/**
5856
* Integration tests for {@link io.lettuce.core.api.sync.RedisKeyCommands}.
@@ -307,11 +305,14 @@ void pexpireWithArgs() {
307305

308306
@Test
309307
void pexpireat() {
310-
Date expiration = new Date(System.currentTimeMillis() + 5000);
308+
long expiryMillis = System.currentTimeMillis() + 5000;
309+
Date expiration = new Date(expiryMillis);
311310
assertThat(redis.pexpireat(key, expiration)).isFalse();
312311
redis.set(key, value);
313312
assertThat(redis.pexpireat(key, expiration)).isTrue();
314-
assertThat(redis.pttl(key)).isGreaterThan(0).isLessThanOrEqualTo(5000);
313+
long clockSkewToleranceMs = 50;
314+
long upperBound = expiryMillis - System.currentTimeMillis() + clockSkewToleranceMs;
315+
assertThat(redis.pttl(key)).isGreaterThan(0).isLessThanOrEqualTo(upperBound);
315316

316317
assertThat(redis.pexpireat(key, Instant.now().plusSeconds(15))).isTrue();
317318
assertThat(redis.ttl(key)).isBetween(10L, 20L);
@@ -404,10 +405,12 @@ void restoreReplace() {
404405
assertThat(redis.pttl(key)).isGreaterThan(0).isLessThanOrEqualTo(1000);
405406

406407
redis.del(key);
407-
assertThat(redis.restore(key, bytes, RestoreArgs.Builder.ttl(System.currentTimeMillis() + 3000).replace().absttl()))
408-
.isEqualTo("OK");
408+
long expiryMillis = System.currentTimeMillis() + 5000;
409+
assertThat(redis.restore(key, bytes, RestoreArgs.Builder.ttl(expiryMillis).replace().absttl())).isEqualTo("OK");
409410
assertThat(redis.get(key)).isEqualTo(value);
410-
assertThat(redis.pttl(key)).isGreaterThan(0).isLessThanOrEqualTo(3000);
411+
long clockSkewToleranceMs = 50;
412+
long upperBound = expiryMillis - System.currentTimeMillis() + clockSkewToleranceMs;
413+
assertThat(redis.pttl(key)).isGreaterThan(0).isLessThanOrEqualTo(upperBound);
411414
}
412415

413416
@Test

0 commit comments

Comments
 (0)