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
{