You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pt...@apache.org on 2021/11/17 07:09:18 UTC

[ignite] branch master updated: IGNITE-14294 .NET: Fix ClientServerCompatibilityTest flakiness (#9567)

This is an automated email from the ASF dual-hosted git repository.

ptupitsyn pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new e560cff  IGNITE-14294 .NET: Fix ClientServerCompatibilityTest flakiness (#9567)
e560cff is described below

commit e560cff14c05f717a0a47447faf7f5d387cc6d88
Author: Pavel Tupitsyn <pt...@apache.org>
AuthorDate: Wed Nov 17 10:08:36 2021 +0300

    IGNITE-14294 .NET: Fix ClientServerCompatibilityTest flakiness (#9567)
    
    Pass Java 9+ specific JVM arguments when necessary (`illegal-access=permit`, `add-exports`).
---
 .../org/apache/ignite/platform/PlatformProcessUtils.java    | 13 ++++++++++++-
 .../platforms/dotnet/Apache.Ignite.Core.Tests/JavaServer.cs |  3 +++
 .../dotnet/Apache.Ignite.Core.Tests/TestUtilsJni.cs         | 13 ++++++++-----
 .../dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs |  2 +-
 .../dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs     |  4 ++--
 5 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/modules/core/src/test/java/org/apache/ignite/platform/PlatformProcessUtils.java b/modules/core/src/test/java/org/apache/ignite/platform/PlatformProcessUtils.java
index 15f5f1a..bc5cf73 100644
--- a/modules/core/src/test/java/org/apache/ignite/platform/PlatformProcessUtils.java
+++ b/modules/core/src/test/java/org/apache/ignite/platform/PlatformProcessUtils.java
@@ -41,10 +41,11 @@ public class PlatformProcessUtils {
      * @param file Executable name.
      * @param arg1 Argument.
      * @param arg2 Argument.
+     * @param env Environment.
      * @param workDir Work directory.
      * @param waitForOutput A string to look for in the output.
      */
-    public static void startProcess(String file, String arg1, String arg2, String workDir, String waitForOutput)
+    public static void startProcess(String file, String arg1, String arg2, String env, String workDir, String waitForOutput)
             throws Exception {
         if (process != null)
             throw new Exception("PlatformProcessUtils can't start more than one process at a time.");
@@ -52,6 +53,16 @@ public class PlatformProcessUtils {
         ProcessBuilder pb = new ProcessBuilder(file, arg1, arg2);
         pb.directory(new File(workDir));
         pb.redirectErrorStream(true);
+        
+        if (env != null && !env.isEmpty()) {
+            for (String pair : env.split("\\|")) {
+                String[] kv = pair.split("#");
+                assert kv.length == 2;
+                
+                pb.environment().put(kv[0], kv[1]);
+            }
+        }
+        
         process = pb.start();
 
         InputStreamReader isr = new InputStreamReader(process.getInputStream());
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/JavaServer.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/JavaServer.cs
index 40a02c8..5117fca 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/JavaServer.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/JavaServer.cs
@@ -73,6 +73,9 @@ namespace Apache.Ignite.Core.Tests
                 file: Os.IsWindows ? "cmd.exe" : "/bin/bash",
                 arg1: Os.IsWindows ? "/c" : "-c",
                 arg2: string.Format("{0} {1}", MavenPath, MavenCommandExec),
+                envVars: Jvm.IsJava9()
+                    ? "MAVEN_OPTS#" + string.Join(" ", Jvm.Java9Options)
+                    : string.Empty,
                 workDir: JavaServerSourcePath,
                 waitForOutput: "Ignite node started OK");
 
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtilsJni.cs b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtilsJni.cs
index 139bbd0..b830e71 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtilsJni.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core.Tests/TestUtilsJni.cs
@@ -56,10 +56,11 @@ namespace Apache.Ignite.Core.Tests
         /// <param name="file">Executable name.</param>
         /// <param name="arg1">Argument.</param>
         /// <param name="arg2">Argument.</param>
+        /// <param name="envVars">Environment variables. Pairs are separated by |, key and value by #.</param>
         /// <param name="workDir">Work directory.</param>
         /// <param name="waitForOutput">A string to look for in the output.</param>
         public static unsafe void StartProcess(
-            string file, string arg1, string arg2, string workDir, string waitForOutput)
+            string file, string arg1, string arg2, string envVars, string workDir, string waitForOutput)
         {
             Debug.Assert(file != null);
             Debug.Assert(arg1 != null);
@@ -70,20 +71,22 @@ namespace Apache.Ignite.Core.Tests
             using (var cls = env.FindClass(ClassPlatformProcessUtils))
             {
                 var methodId = env.GetStaticMethodId(cls, "startProcess",
-                    "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
+                    "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
 
                 using (var fileRef = env.NewStringUtf(file))
                 using (var arg1Ref = env.NewStringUtf(arg1))
                 using (var arg2Ref = env.NewStringUtf(arg2))
+                using (var envRef = env.NewStringUtf(envVars))
                 using (var workDirRef = env.NewStringUtf(workDir))
                 using (var waitForOutputRef = env.NewStringUtf(waitForOutput))
                 {
-                    var methodArgs = stackalloc long[5];
+                    var methodArgs = stackalloc long[6];
                     methodArgs[0] = fileRef.Target.ToInt64();
                     methodArgs[1] = arg1Ref.Target.ToInt64();
                     methodArgs[2] = arg2Ref.Target.ToInt64();
-                    methodArgs[3] = workDirRef.Target.ToInt64();
-                    methodArgs[4] = waitForOutputRef == null ? 0 : waitForOutputRef.Target.ToInt64();
+                    methodArgs[3] = envRef.Target.ToInt64();
+                    methodArgs[4] = workDirRef.Target.ToInt64();
+                    methodArgs[5] = waitForOutputRef == null ? 0 : waitForOutputRef.Target.ToInt64();
 
                     env.CallStaticVoidMethod(cls, methodId, methodArgs);
                 }
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs
index 53ba61b..029c66d 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Binary/TypeNameParser.cs
@@ -419,7 +419,7 @@ namespace Apache.Ignite.Core.Impl.Binary
                 {
                     // Ignore escaped characters in compiler-generated type names.
                     // Return any non-separator character to continue parsing.
-                    return default;
+                    return default(char);
                 }
 
                 return _typeName[_pos];
diff --git a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
index f0914f2..1d3c5f3 100644
--- a/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
+++ b/modules/platforms/dotnet/Apache.Ignite.Core/Impl/Unmanaged/Jni/Jvm.cs
@@ -43,7 +43,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged.Jni
         private const int JNI_VERSION_9 = 0x00090000;
 
         /** Options to enable startup on Java 9. */
-        private static readonly string[] Java9Options =
+        public static readonly string[] Java9Options =
         {
             "--add-exports=java.base/jdk.internal.misc=ALL-UNNAMED",
             "--add-exports=java.base/sun.nio.ch=ALL-UNNAMED",
@@ -246,7 +246,7 @@ namespace Apache.Ignite.Core.Impl.Unmanaged.Jni
         /// <summary>
         /// Determines whether we are on Java 9.
         /// </summary>
-        private static bool IsJava9()
+        public static bool IsJava9()
         {
             var args = new JvmInitArgs
             {