fury icon indicating copy to clipboard operation
fury copied to clipboard

Meta context must be set before serialization, please set meta context by SerializationContext.setMetaContext

Open naah69 opened this issue 1 year ago • 1 comments

Search before asking

  • [X] I had searched in the issues and found no similar issues.

Version

java:jdk17 fury:0.5.0

Component(s)

Java

Minimal reproduce step

when use multithread

    private static ThreadSafeFury getBuildThreadSafeFury() {
        return Fury.builder().withLanguage(Language.JAVA)
                   .requireClassRegistration(false)
                   .withRefTracking(false)
                   .withMetaContextShare(true)
                   .withIntCompressed(true)
                   .withLongCompressed(true)
                   .withStringCompressed(true)
                   .withCompatibleMode(CompatibleMode.COMPATIBLE)
                   .withClassLoader(CLASS_LOADER)
                   .buildThreadSafeFury();
    }

 fury.serialize(source);

What did you expect to see?

no exception

What did you see instead?

java.lang.NullPointerException: Meta context must be set before serialization, please set meta context by SerializationContext.setMetaContext
    at org.apache.fury.util.Preconditions.checkNotNull(Preconditions.java:33)
    at org.apache.fury.resolver.ClassResolver.writeClassWithMetaShare(ClassResolver.java:1256)
    at org.apache.fury.resolver.ClassResolver.writeClass(ClassResolver.java:1240)
    at org.apache.fury.Fury.write(Fury.java:313)
    at org.apache.fury.Fury.serialize(Fury.java:248)
    at org.apache.fury.Fury.serialize(Fury.java:220)
    at org.apache.fury.ThreadLocalFury.serialize(ThreadLocalFury.java:91)
    at com.mindflow.common.event.recovery.EventBusExceptionRecover.serializeObject(EventBusExceptionRecover.java:157)
    at com.mindflow.common.event.recovery.EventBusExceptionRecover.save(EventBusExceptionRecover.java:108)
    at com.mindflow.common.exception.mapper.EventExceptionMapper.lambda$handle$1(EventExceptionMapper.java:66)
    at java.util.Optional.ifPresent(Optional.java:178)
    at com.mindflow.common.exception.mapper.EventExceptionMapper.lambda$handle$2(EventExceptionMapper.java:66)
    at java.util.Optional.ifPresent(Optional.java:178)
    at com.mindflow.common.exception.mapper.EventExceptionMapper.handle(EventExceptionMapper.java:66)
    at com.mindflow.common.exception.mapper.EventExceptionMapper.handle(EventExceptionMapper.java:30)
    at io.vertx.core.impl.ContextBase.reportException(ContextBase.java:199)
    at io.vertx.core.impl.DuplicatedContext.reportException(DuplicatedContext.java:108)
    at io.vertx.core.impl.future.FutureImpl$2.onFailure(FutureImpl.java:117)
    at io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:69)
    at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569)
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:833)

Anything Else?

image image

Are you willing to submit a PR?

  • [ ] I'm willing to submit a PR!

naah69 avatar Jun 20 '24 02:06 naah69

As the error message said, you need to set meta context before serializing. This is an advanced feature. We have a new option scopedMetaShare, which can set meta context automatically, but it is still in main branch

chaokunyang avatar Jun 20 '24 04:06 chaokunyang