This is an automated email from the ASF dual-hosted git repository.
ptupitsyn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new d7d4d6cbf7 IGNITE-18796 Fix testRetryReadPolicyRetriesReadOperations
flakiness (#1671)
d7d4d6cbf7 is described below
commit d7d4d6cbf782c0ec7754989f33994ecef74a1c23
Author: Pavel Tupitsyn <[email protected]>
AuthorDate: Tue Feb 14 18:56:22 2023 +0200
IGNITE-18796 Fix testRetryReadPolicyRetriesReadOperations flakiness (#1671)
`shouldDropConnection` predicate was not accounting for
`PARTITION_ASSIGNMENT_GET` request, dropping the connection too early.
---
.../org/apache/ignite/client/IgniteClient.java | 2 +-
.../ignite/internal/client/ReliableChannel.java | 2 +-
.../org/apache/ignite/client/RetryPolicyTest.java | 25 ++++++++++++++++++----
.../apache/ignite/client/TestLoggerFactory.java | 8 ++++++-
4 files changed, 30 insertions(+), 7 deletions(-)
diff --git
a/modules/client/src/main/java/org/apache/ignite/client/IgniteClient.java
b/modules/client/src/main/java/org/apache/ignite/client/IgniteClient.java
index 5580f2f331..045baf2578 100644
--- a/modules/client/src/main/java/org/apache/ignite/client/IgniteClient.java
+++ b/modules/client/src/main/java/org/apache/ignite/client/IgniteClient.java
@@ -136,7 +136,7 @@ public interface IgniteClient extends Ignite {
* @param loggerFactory A factory.
* @return This instance.
*/
- public Builder loggerFactory(LoggerFactory loggerFactory) {
+ public Builder loggerFactory(@Nullable LoggerFactory loggerFactory) {
this.loggerFactory = loggerFactory;
return this;
diff --git
a/modules/client/src/main/java/org/apache/ignite/internal/client/ReliableChannel.java
b/modules/client/src/main/java/org/apache/ignite/internal/client/ReliableChannel.java
index d3542a7c98..ce517a0bd9 100644
---
a/modules/client/src/main/java/org/apache/ignite/internal/client/ReliableChannel.java
+++
b/modules/client/src/main/java/org/apache/ignite/internal/client/ReliableChannel.java
@@ -500,7 +500,7 @@ public final class ReliableChannel implements AutoCloseable
{
private CompletableFuture<ClientChannel> getCurChannelAsync() {
if (closed) {
- return CompletableFuture.failedFuture(new
IgniteClientConnectionException(CONNECTION_ERR, "Channel is closed"));
+ return CompletableFuture.failedFuture(new
IgniteClientConnectionException(CONNECTION_ERR, "ReliableChannel is closed"));
}
curChannelsGuard.readLock().lock();
diff --git
a/modules/client/src/test/java/org/apache/ignite/client/RetryPolicyTest.java
b/modules/client/src/test/java/org/apache/ignite/client/RetryPolicyTest.java
index 5029a38525..c0bd49c23a 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/RetryPolicyTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/RetryPolicyTest.java
@@ -35,9 +35,11 @@ import
org.apache.ignite.internal.client.RetryPolicyContextImpl;
import org.apache.ignite.internal.client.proto.ClientOp;
import org.apache.ignite.internal.util.IgniteUtils;
import org.apache.ignite.lang.IgniteException;
+import org.apache.ignite.lang.LoggerFactory;
import org.apache.ignite.table.RecordView;
import org.apache.ignite.table.Tuple;
import org.apache.ignite.tx.Transaction;
+import org.jetbrains.annotations.Nullable;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
@@ -171,12 +173,22 @@ public class RetryPolicyTest {
@Test
public void testRetryReadPolicyRetriesReadOperations() throws Exception {
- initServer(reqId -> reqId % 3 == 0);
+ // Standard requests are:
+ // 1: Handshake
+ // 2: SCHEMAS_GET
+ // 3: PARTITION_ASSIGNMENT_GET
+ // => fail on 4th request
+ initServer(reqId -> reqId % 4 == 0);
- try (var client = getClient(new RetryReadPolicy())) {
+ var loggerFactory = new TestLoggerFactory("c");
+
+ try (var client = getClient(new RetryReadPolicy(), loggerFactory)) {
RecordView<Tuple> recView =
client.tables().table("t").recordView();
recView.get(null, Tuple.create().set("id", 1L));
recView.get(null, Tuple.create().set("id", 1L));
+
+ loggerFactory.assertLogContains("Disconnected from server");
+ loggerFactory.assertLogContains("Going to retry operation because
of error [op=TUPLE_GET");
}
}
@@ -214,7 +226,7 @@ public class RetryPolicyTest {
}
@Test
- public void testRetryReadPolicyAllOperationsSupported() throws
IllegalAccessException {
+ public void testRetryReadPolicyAllOperationsSupported() {
var plc = new RetryReadPolicy();
var cfg = new IgniteClientConfigurationImpl(null, null, 0, 0, 0, null,
0, 0, null, null);
@@ -250,11 +262,16 @@ public class RetryPolicyTest {
}
}
- private IgniteClient getClient(RetryPolicy retryPolicy) {
+ private IgniteClient getClient(@Nullable RetryPolicy retryPolicy) {
+ return getClient(retryPolicy, null);
+ }
+
+ private IgniteClient getClient(@Nullable RetryPolicy retryPolicy,
@Nullable LoggerFactory loggerFactory) {
return IgniteClient.builder()
.addresses("127.0.0.1:" + server.port())
.retryPolicy(retryPolicy)
.reconnectThrottlingPeriod(0)
+ .loggerFactory(loggerFactory)
.build();
}
diff --git
a/modules/client/src/test/java/org/apache/ignite/client/TestLoggerFactory.java
b/modules/client/src/test/java/org/apache/ignite/client/TestLoggerFactory.java
index 35e8f630f5..dfe39118fb 100644
---
a/modules/client/src/test/java/org/apache/ignite/client/TestLoggerFactory.java
+++
b/modules/client/src/test/java/org/apache/ignite/client/TestLoggerFactory.java
@@ -17,6 +17,8 @@
package org.apache.ignite.client;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
import java.lang.System.Logger;
import java.util.ArrayList;
import java.util.List;
@@ -28,7 +30,7 @@ import org.apache.ignite.lang.LoggerFactory;
* Logger factory for tests.
*/
public class TestLoggerFactory implements LoggerFactory {
- public final ListLogger logger;
+ final ListLogger logger;
TestLoggerFactory(String factoryName) {
this.logger = new ListLogger(factoryName);
@@ -39,6 +41,10 @@ public class TestLoggerFactory implements LoggerFactory {
return logger;
}
+ void assertLogContains(String msg) {
+ assertTrue(logger.entries().stream().anyMatch(x -> x.contains(msg)));
+ }
+
/** Logger that stores all messages in a list. */
public static class ListLogger implements System.Logger {
private final String name;