citiususc / BigSeqKit

BigSeqKit: a parallel Big Data toolkit to process FASTA and FASTQ files at scale
GNU General Public License v3.0
55 stars 4 forks source link

Error when running ignis-submit in wsl2 #3

Open sh0rt2l0ng opened 9 months ago

sh0rt2l0ng commented 9 months ago

This should use jre and lib in ignis folder as I understand. But why it still report this error?

Exception in thread "main" java.lang.NoSuchMethodError: 'void com.fasterxml.jackson.core.JsonGenerator.writeStartArray(java.lang.Object, int)' at com.fasterxml.jackson.databind.ser.impl.StringArraySerializer.serialize(StringArraySerializer.java:170) at com.fasterxml.jackson.databind.ser.impl.StringArraySerializer.serialize(StringArraySerializer.java:22) at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727) at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:722) at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:166) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider._serialize(DefaultSerializerProvider.java:480) at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:319) at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:4110) at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsBytes(ObjectMapper.java:3437) at com.github.dockerjava.core.DefaultInvocationBuilder.encode(DefaultInvocationBuilder.java:292) at com.github.dockerjava.core.DefaultInvocationBuilder.post(DefaultInvocationBuilder.java:121) at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute(CreateContainerCmdExec.java:37) at com.github.dockerjava.core.exec.CreateContainerCmdExec.execute(CreateContainerCmdExec.java:13) at com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21) at com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35) at com.github.dockerjava.core.command.CreateContainerCmdImpl.exec(CreateContainerCmdImpl.java:609) at org.ignis.scheduler.Docker.createDriverContainer(Docker.java:318) at org.ignis.submitter.Submit.call(Submit.java:186) at org.ignis.submitter.Submit.call(Submit.java:46) at picocli.CommandLine.executeUserObject(CommandLine.java:1953) at picocli.CommandLine.access$1300(CommandLine.java:145) at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352) at picocli.CommandLine$RunLast.handle(CommandLine.java:2346) at picocli.CommandLine$RunLast.handle(CommandLine.java:2311) at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179) at picocli.CommandLine.execute(CommandLine.java:2078) at org.ignis.submitter.Submit.main(Submit.java:284)

cesarpomar commented 9 months ago

The error you're seeing, java.lang.NoSuchMethodError, indicates that the method writeStartArray(Object, int) is not found in the class com.fasterxml.jackson.core.JsonGenerator. This suggests that there's a discrepancy between the versions of the libraries you're using.

Are you running the submit within a container or on your local machine? In the latter case, could there be any other libraries in the CLASSPATH that might interfere with those from IgnisHPC?

sh0rt2l0ng commented 9 months ago

I am just following the guide and run like this.

./ignis/bin/ignis-submit ignishpc/full bigseqkit

I created a clean environment for bigseqkit with conda. Everything is fine until running into this. Not sure what libraries you are mentioning. Contents in submit script:

!/bin/bash #script is inside IGNIS_HOME so if it is not set, we can discover it. if [[ -z "${IGNIS_HOME}" ]]; then export IGNIS_HOME=$(builtin cd $(dirname "$0"); cd ..; pwd) fi exec ${IGNIS_HOME}/backend/jre/bin/java -cp "${IGNIS_HOME}/lib/java/*" org.ignis.submitter.Submit "$@"

Do I miss anything here?

Is this because of incompatible jackson lib in wsl2? This is the wsl2 version. Package: libjackson-json-java Version: 1.9.13-1

From submit script, I just thought bigseqkit should use own jre and lib in ${IGNIS_HOME}. But maybe I am wrong.

cesarpomar commented 9 months ago

The image "ignishpc/full", did you build it yourself?

I downloaded the latest version from DockerHub and here are the Java libraries (ls ./ignis/lib/java/jackson*):

jackson-annotations-2.10.3.jar jackson-core-2.10.3.jar jackson-databind-2.10.3.jar jackson-dataformat-cbor-2.6.7.jar jackson-datatype-jdk8-2.9.9.jar jackson-annotations-2.9.9.jar jackson-core-2.9.9.jar jackson-databind-2.9.9.3.jar jackson-datatype-guava-2.9.9.jar jackson-datatype-protobuf-0.9.10-jackson2.9-proto3.jar

The version you mentioned isn't included.

sh0rt2l0ng commented 9 months ago

I just pulled the docker not built it. What I mean is that whether the jackson version in wsl2 will affect ignis. The exported lib dir contains those you list here.

jackson-annotations-2.10.3.jar jackson-core-2.10.3.jar jackson-databind-2.10.3.jar jackson-dataformat-cbor-2.6.7.jar jackson-datatype-jdk8-2.9.9.jar jackson-annotations-2.9.9.jar jackson-core-2.9.9.jar jackson-databind-2.9.9.3.jar jackson-datatype-guava-2.9.9.jar jackson-datatype-protobuf-0.9.10-jackson2.9-proto3.jar

I assumed ignis should use them instead of jackson lib in wsl2, right?

cesarpomar commented 9 months ago

Yes, to avoid incompatibilities, you shouldn't add any extra libraries. The error you showed is because you're trying to use jackson-core-2.10.3.jar with libjackson-json-java-1.*. Remove 1.9.13-1 from your WSL2's CLASSPATH, and the issue should disappear.

sh0rt2l0ng commented 9 months ago

My WSL2's CLASSPATH is empty. I don't think we are using anything other than those in $IGNIS_HOME/lib/java/. But the error is still the same. Any other thing needs to be set in order to run this tool? Thanks.

cesarpomar commented 9 months ago

Is this because of incompatible jackson lib in wsl2? This is the wsl2 version. Package: libjackson-json-java Version: 1.9.13-1

Where is that Java library located then?

As you can see in the stack trace, the error indicates that the method com.fasterxml.jackson.core.JsonGenerator.writeStartArray(java.lang.Object, int) does not exist. And it matches with that library because if we look at the Javadoc for version 1.9.13 (link), we can see that this method doesn't exist with those parameters, whereas if we look at version 2.10 (link), we see that it does exist.

Can you remove that library and try again?