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;

Reply via email to