Subject: Re: bug#40718: java-kafka-clients fails test on CI

From: Björn Höfling <[email-masked]>
Date: Thu, 30 Apr 2020 00:47:16 +0200

On Sun, 19 Apr 2020 18:22:31 +0200
Marius Bakke <[email-masked]> wrote:

> Hello,
> 
> 'java-kafka-clients' fails to build on Berlin:
> 
> https://ci.guix.gnu.org/log/9ky8skd03p7yvik2dms2h6d7l7fsc6cv-java-kafka-clients-1.0.0
> 
> The failing test is
> "org.apache.kafka.common.memory.GarbageCollectedMemoryPoolTest",
> possibly because of the large amount of memory on the CI machines.

Hi Marius,

I merged your 40554 and 40718 which stated the same bug within a week.
Or did I miss a difference?

The easiest thing probably would be to just turn off the failing
test.Instead I tried to investigate this bug, but with little success
yet. Here are my findings:

Locally it always built fine.

Due to #40966 my trust in CI results faded a bit away.

When searching for java-kafka-clients, I sometimes see also successful
builds:

https://ci.guix.gnu.org/search?query=java-kafka-clients++system%3Ax86_64-linux+spec%3Aguix-master

(Hit reload several times)
Yesterday I thought I saw it going red only 3 weeks ago, but now I
don't have that clear picture any more. The search results are strange.

LOGGING:

On the JUnit output, I saw lines like this:

    [junit] SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
    [junit] SLF4J: Defaulting to no-operation (NOP) logger implementation
    [junit] SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

In order to get logging, I added a logger implementation as native
input:

++       ("java-sl4fj-simple" ,java-slf4j-simple)

That showed some output on the console. Maybe that could help find the
issue?

Unfortunately, java-slf4j-simple fails to build on berlin, too
(locally, it built fine)...

MEMORY SIZE:

I modified the sources of the JUnit test to print out the actual memory
usage during test execution, and built that with the "--sources=..."
option. But that's nothing we can do on berlin. Or would there be an
administrator trying it out on their local account?

I wanted to change the heap size during tests on my computer with the
"ANT_OPTS" environment variable, where you could pass a "-Xmx=16G"
option or something. That did not have any effect on the reported heap
size. Problem is, that our generated build.xml file has a 

<junit fork="yes" ...>

line, which is in general a good idea, but meaning that tests are
executed under a new JVM other than ANT. We either need to say
fork="no" (I'm currently rebuilding the JVM-world with that) or we have
to give here an additional option "maxmemory".

BUILD GRAPH:

When looking at the reverse-dependency graph, you notice that only
java-log4j-core is using it directly. Can we get rid of that edge?
On the master of log4j, there is a separate module for the
Kafka-Appender, but it is not in any stabl release.

Björn