You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by lh...@apache.org on 2021/05/13 20:00:18 UTC

[pulsar] branch master updated: Add workaround for failing PulsarFunctionsJavaProcessTest on JDK11 (#10566)

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5f09de8  Add workaround for failing PulsarFunctionsJavaProcessTest on JDK11 (#10566)
5f09de8 is described below

commit 5f09de86ca0cb97c68bd47f600dbe8cc1c896959
Author: Lari Hotari <lh...@users.noreply.github.com>
AuthorDate: Thu May 13 22:59:29 2021 +0300

    Add workaround for failing PulsarFunctionsJavaProcessTest on JDK11 (#10566)
    
    - testJavaLoggingFunction fails since "SSE4.2 CRC32C provider initialized"
      gets logged. Classloading seems to be postponed when running on JDK11.
      As a workaround, create a Crc32cIntChecksum class instance before
      starting the Pulsar Functions log appender.
---
 .../org/apache/pulsar/functions/instance/JavaInstanceRunnable.java  | 4 ++++
 .../pulsar/tests/integration/functions/PulsarFunctionsTest.java     | 6 +++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
index 8798e7b..3b9285c 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
@@ -22,6 +22,7 @@ package org.apache.pulsar.functions.instance;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.google.common.base.Preconditions;
 
+import com.scurrilous.circe.checksum.Crc32cIntChecksum;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
@@ -564,6 +565,9 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
     private void setupLogHandler() {
         if (instanceConfig.getFunctionDetails().getLogTopic() != null &&
                 !instanceConfig.getFunctionDetails().getLogTopic().isEmpty()) {
+            // make sure Crc32cIntChecksum class is loaded before logging starts
+            // to prevent "SSE4.2 CRC32C provider initialized" appearing in log topic
+            new Crc32cIntChecksum();
             logAppender = new LogAppender(client, instanceConfig.getFunctionDetails().getLogTopic(),
                     FunctionCommon.getFullyQualifiedName(instanceConfig.getFunctionDetails()));
             logAppender.start();
diff --git a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
index 9ecc6a4..1d51c2f 100644
--- a/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
+++ b/tests/integration/src/test/java/org/apache/pulsar/tests/integration/functions/PulsarFunctionsTest.java
@@ -323,7 +323,7 @@ public abstract class PulsarFunctionsTest extends PulsarFunctionsTestBase {
 
         getFunctionInfoNotFound(functionName);
     }
-    
+
     protected void testFunctionNegAck(Runtime runtime) throws Exception {
         if (functionRuntimeType == FunctionRuntimeType.THREAD) {
             return;
@@ -1510,8 +1510,8 @@ public abstract class PulsarFunctionsTest extends PulsarFunctionsTestBase {
         for (int i = 0; i < numMessages; i++) {
             Message<byte[]> msg = consumer.receive(30, TimeUnit.SECONDS);
             String logMsg = new String(msg.getValue(), UTF_8);
-            log.info("Received: {}", logMsg);
-            assertTrue(expectedMessages.contains(logMsg));
+            log.info("Received message: '{}'", logMsg);
+            assertTrue(expectedMessages.contains(logMsg), "Message '" + logMsg + "' not expected");
             expectedMessages.remove(logMsg);
         }