Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Communication: Trivial class with enum cannot be transferred #121

Closed
zdenek-jonas opened this issue May 29, 2020 · 7 comments
Closed

Communication: Trivial class with enum cannot be transferred #121

zdenek-jonas opened this issue May 29, 2020 · 7 comments
Assignees

Comments

@zdenek-jonas
Copy link
Contributor

I have a problem to send this class:

    static class CustomEnumTrivialData  {
        CustomEnumTrivialEnumData value;

        public void fillSampleData() {
            value = CustomEnumTrivialEnumData.FIRST_VALUE;
        }

        CustomEnumTrivialEnumData getValue() {
            return value;
        }


        private enum CustomEnumTrivialEnumData {
            FIRST_VALUE
        }
    }

I received:

/usr/lib/jvm/java-8-openjdk-amd64/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:/snap/intellij-idea-community/226/lib/idea_rt.jar=35497:/snap/intellij-idea-community/226/bin -Dfile.encoding=UTF-8 -classpath /snap/intellij-idea-community/226/lib/idea_rt.jar:/snap/intellij-idea-community/226/plugins/junit/lib/junit5-rt.jar:/snap/intellij-idea-community/226/plugins/junit/lib/junit-rt.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/cldrdata.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/dnsns.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/icedtea-sound.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/jaccess.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/nashorn.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunec.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/ext/zipfs.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jce.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/jsse.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/management-agent.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/resources.jar:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/rt.jar:/home/jonas/devel/microstream-test/communication/target/test-classes:/home/jonas/devel/microstream-test/communication/target/classes:/home/jonas/.m2/repository/one/microstream/communication.binary/03.01.00-MS-CO-SNAPSHOT/communication.binary-03.01.00-MS-CO-SNAPSHOT.jar:/home/jonas/.m2/repository/one/microstream/communication/03.01.00-MS-CO-SNAPSHOT/communication-03.01.00-MS-CO-20200528.100330-2.jar:/home/jonas/.m2/repository/one/microstream/persistence/03.01.00-MS-CO-SNAPSHOT/persistence-03.01.00-MS-CO-SNAPSHOT.jar:/home/jonas/.m2/repository/one/microstream/base/03.01.00-MS-CO-SNAPSHOT/base-03.01.00-MS-CO-SNAPSHOT.jar:/home/jonas/.m2/repository/one/microstream/persistence.binary/03.01.00-MS-CO-SNAPSHOT/persistence.binary-03.01.00-MS-CO-20200528.100320-2.jar:/home/jonas/.m2/repository/org/assertj/assertj-core/3.16.1/assertj-core-3.16.1.jar:/home/jonas/.m2/repository/org/junit/jupiter/junit-jupiter/5.5.2/junit-jupiter-5.5.2.jar:/home/jonas/.m2/repository/org/junit/jupiter/junit-jupiter-api/5.5.2/junit-jupiter-api-5.5.2.jar:/home/jonas/.m2/repository/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.jar:/home/jonas/.m2/repository/org/junit/platform/junit-platform-commons/1.5.2/junit-platform-commons-1.5.2.jar:/home/jonas/.m2/repository/org/junit/jupiter/junit-jupiter-params/5.5.2/junit-jupiter-params-5.5.2.jar:/home/jonas/.m2/repository/org/junit/jupiter/junit-jupiter-engine/5.5.2/junit-jupiter-engine-5.5.2.jar:/home/jonas/.m2/repository/org/junit/platform/junit-platform-surefire-provider/1.3.2/junit-platform-surefire-provider-1.3.2.jar:/home/jonas/.m2/repository/org/apiguardian/apiguardian-api/1.0.0/apiguardian-api-1.0.0.jar:/home/jonas/.m2/repository/org/apache/maven/surefire/surefire-api/2.22.0/surefire-api-2.22.0.jar:/home/jonas/.m2/repository/org/apache/maven/surefire/surefire-logger-api/2.22.0/surefire-logger-api-2.22.0.jar:/home/jonas/.m2/repository/org/apache/maven/surefire/common-java5/2.22.0/common-java5-2.22.0.jar:/home/jonas/.m2/repository/org/junit/platform/junit-platform-launcher/1.5.2/junit-platform-launcher-1.5.2.jar:/home/jonas/.m2/repository/org/junit/platform/junit-platform-engine/1.5.2/junit-platform-engine-1.5.2.jar:/home/jonas/.m2/repository/commons-io/commons-io/2.6/commons-io-2.6.jar:/home/jonas/.m2/repository/com/github/javafaker/javafaker/0.18/javafaker-0.18.jar:/home/jonas/.m2/repository/org/apache/commons/commons-lang3/3.5/commons-lang3-3.5.jar:/home/jonas/.m2/repository/org/yaml/snakeyaml/1.23/snakeyaml-1.23-android.jar:/home/jonas/.m2/repository/com/github/mifmif/generex/1.0.2/generex-1.0.2.jar:/home/jonas/.m2/repository/dk/brics/automaton/automaton/1.11-8/automaton-1.11-8.jar:/home/jonas/.m2/repository/org/jacoco/org.jacoco.agent/0.8.5/org.jacoco.agent-0.8.5-runtime.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 one.microstream.communication.BinaryHandlerCustomEnumTrivialTest

Exception in thread "Thread-1" one.microstream.com.ComException
	at one.microstream.com.ComChannelExceptionHandler.defaultHandleException(ComChannelExceptionHandler.java:18)
	at one.microstream.com.ComChannelExceptionHandler$Default.handleException(ComChannelExceptionHandler.java:46)
	at one.microstream.com.ComConnectionAcceptor$Default.acceptConnection(ComConnectionAcceptor.java:111)
	at one.microstream.com.ComHost$Default.synchAcceptConnection(ComHost.java:155)
	at one.microstream.com.ComHost$Default.acceptConnections(ComHost.java:147)
	at one.microstream.com.ComHost$Default.run(ComHost.java:113)
	at one.microstream.communication.AbstractComTest.lambda$startServer$1(AbstractComTest.java:73)
	at java.lang.Thread.run(Thread.java:748)
Caused by: one.microstream.persistence.exceptions.PersistenceExceptionTypeHandlerConsistencyUnhandledTypeId: No type handler found for type id "1000060".
	at one.microstream.persistence.binary.types.BinaryLoader$Default.lookupTypeHandler(BinaryLoader.java:190)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.createBuildItem(BinaryLoader.java:198)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.internalReadBinaryEntitiesByteReversing(BinaryLoader.java:168)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.readBinaryEntities(BinaryLoader.java:138)
	at one.microstream.persistence.binary.types.ChunksWrapper.iterateEntityData(ChunksWrapper.java:70)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.addChunks(BinaryLoader.java:801)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.readLoadOnce(BinaryLoader.java:707)
	at one.microstream.persistence.binary.types.BinaryLoader$Default.get(BinaryLoader.java:824)
	at one.microstream.persistence.types.PersistenceManager$Default.get(PersistenceManager.java:379)
	at one.microstream.com.binarydynamic.ComChannelDynamic.requestUnhandled(ComChannelDynamic.java:44)
	at one.microstream.com.binarydynamic.ComHandlerSendMessageNewType.sendMessage(ComHandlerSendMessageNewType.java:34)
	at one.microstream.com.binarydynamic.ComHandlerSendMessageNewType.sendMessage(ComHandlerSendMessageNewType.java:48)
	at one.microstream.com.binarydynamic.ComChannelDynamic.send(ComChannelDynamic.java:59)
	at one.microstream.com.binarydynamic.ComTypeDescriptionRegistrationObserver.observeTypeDefinitionRegistration(ComTypeDescriptionRegistrationObserver.java:34)
	at one.microstream.persistence.types.PersistenceTypeDictionary$Default.synchRegisterType(PersistenceTypeDictionary.java:303)
	at one.microstream.persistence.types.PersistenceTypeDictionary$Default.registerTypeDefinition(PersistenceTypeDictionary.java:356)
	at one.microstream.persistence.types.PersistenceTypeDictionary$Default.registerRuntimeTypeDefinition(PersistenceTypeDictionary.java:393)
	at one.microstream.persistence.types.PersistenceTypeDictionaryManager$Abstract.registerRuntimeTypeDefinition(PersistenceTypeDictionaryManager.java:134)
	at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.synchUnvalidatedRegisterTypeHandler(PersistenceTypeHandlerManager.java:639)
	at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.registerTypeHandler(PersistenceTypeHandlerManager.java:608)
	at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.internalEnsureTypeHandler(PersistenceTypeHandlerManager.java:588)
	at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandler(PersistenceTypeHandlerManager.java:357)
	at one.microstream.persistence.types.PersistenceTypeHandlerManager$Default.ensureTypeHandler(PersistenceTypeHandlerManager.java:333)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.registerGuaranteed(BinaryStorer.java:557)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.registerLazyOptional(BinaryStorer.java:572)
	at one.microstream.persistence.types.PersistenceObjectManager$Default.ensureObjectId(PersistenceObjectManager.java:182)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.register(BinaryStorer.java:591)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.apply(BinaryStorer.java:298)
	at one.microstream.persistence.binary.types.BinaryValueFunctions$17.storeValueFromMemory(BinaryValueFunctions.java:296)
	at one.microstream.persistence.binary.types.Binary.storeFixedSize(Binary.java:1149)
	at one.microstream.persistence.binary.internal.AbstractBinaryHandlerReflective.store(AbstractBinaryHandlerReflective.java:497)
	at one.microstream.persistence.binary.internal.AbstractBinaryHandlerReflective.store(AbstractBinaryHandlerReflective.java:1)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.storeItem(BinaryStorer.java:414)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.storeGraph(BinaryStorer.java:403)
	at one.microstream.persistence.binary.types.BinaryStorer$Default.store(BinaryStorer.java:421)
	at one.microstream.persistence.types.PersistenceManager$Default.store(PersistenceManager.java:274)
	at one.microstream.com.binarydynamic.ComChannelDynamic.send(ComChannelDynamic.java:63)
	at one.microstream.communication.AbstractComTest.lambda$null$0(AbstractComTest.java:62)
	at one.microstream.com.ComConnectionAcceptor$Default.acceptConnection(ComConnectionAcceptor.java:107)
	... 5 more

Process finished with exit code 130 (interrupted by signal 2: SIGINT)

@hg-ms
Copy link
Contributor

hg-ms commented May 29, 2020

The issue is related to the client's answer after the client registered the new type. The host can't find an type handler for the "OK" StatusMessage from the client.

@hg-ms
Copy link
Contributor

hg-ms commented Jun 3, 2020

After the client received a new type that has an enum the roots collection is modified during the type registration. On the next store the BinaryStorer checks for not stored root instances and appends them to the current data that is stored (one.microstream.persistence.binary.types.BinaryStorer.Default.commit()). This store is the new type confirmation message. The appended root objects are transferred to the host causing the described exception.

@hg-ms
Copy link
Contributor

hg-ms commented Jun 3, 2020

Theoretically this could be bypassed by using a new storer instead of the one.microstream.persistence.types.PersistenceManager.Default.store(Object) method for network store. Need to check this in detail.

@hg-ms
Copy link
Contributor

hg-ms commented Jun 4, 2020

Ok, the idea to use a new storer does not solve the problem, the correctly also store the pending root elements.

@hg-ms
Copy link
Contributor

hg-ms commented Jun 4, 2020

What is needed is a option to disable the automated storing of those pending roots. In the Com it is not required to send those to the peer.

Maybe the hard coded logic in one.microstream.persistence.binary.types.BinaryStorer.Default.commit() could extended by an interface to allow the Com to provide a special no storing implementation for the pending root handling.

@hg-ms
Copy link
Contributor

hg-ms commented Sep 11, 2020

Added a custom BinaryPersistenceRootsProvider implementation for the com that solve this issue

@hg-ms hg-ms assigned zdenek-jonas and hg-ms and unassigned zdenek-jonas Sep 11, 2020
@zdenek-jonas
Copy link
Contributor Author

Ok fixed

@fh-ms fh-ms transferred this issue from another repository Apr 27, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants