[infinispan-issues] [JBoss JIRA] (ISPN-11910) Server should see application/octet-stream as protostream

Dan Berindei (Jira) issues at jboss.org
Thu May 28 09:24:23 EDT 2020


    [ https://issues.redhat.com/browse/ISPN-11910?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14119860#comment-14119860 ] 

Dan Berindei commented on ISPN-11910:
-------------------------------------

Looks like clients only use {{application/unknown}} for the initial PING operation. Instead {{StorageConfigurationManager}} has some logic (copied from {{DataConversion}}) that uses storage media type {{application/unknown}} in the server, if the storage type is {{OBJECT}}/{{HEAP}}.

This doesn't make any difference for read/write operations, where the conversion between the request media type (e.g. {{application/x-protostream}} or {{application/x-jboss-marshalling}}) and the storage media type {{application/unknown}} is a no-op. But event converters like {{KeyValueWithPreviousEventConverter}} use request media type (aka {{format}}) {{application/x-java-object}}, and the cache needs to use the right marshaller to transcode between {{application/unknown}} and {{application/x-java-object}}.

Since the server always forces {{BinaryTranscoder}} to use {{GenericJBossMarshaller}}, this means a server cache with {{OBJECT}}/{{HEAP}} storage will use {{GenericJBossMarshaller}} for transcoding {{application/unknown}} <-> {{application/x-java-object}}, even when the user marshaller is {{ProtostreamMarshaller}}.


> Server should see application/octet-stream as protostream
> ---------------------------------------------------------
>
>                 Key: ISPN-11910
>                 URL: https://issues.redhat.com/browse/ISPN-11910
>             Project: Infinispan
>          Issue Type: Enhancement
>          Components: Server
>    Affects Versions: 11.0.0.CR1
>            Reporter: Dan Berindei
>            Assignee: Dan Berindei
>            Priority: Major
>             Fix For: 11.0.0.Final
>
>
> The server, and Infinispan in general, should use the user marshaller to read {{application/octet-stream}} and {{application/unknown}} data.
> ISPN-10433 added a hack in the server (for backwards compatibility, I assume): if {{jboss-marshalling}} is on the classpath, {{org.infinispan.server.core.LifecycleCallbacks.cacheManagerStarting()}} changes the marshaller for {{application/unknown}} (but not for {{application/octet-stream}}) to {{GenericJBossMarshaller}}.
> This means that {{server/core}}, {{server/hotrod}}, and {{client/hotrod-client}} tests see {{application/unknown}} as protostream, but the server distribution in {{server/runtime}} always includes {{jboss-marshalling}}, so the server distribution sees {{application/unknown}} as {{GenericJBossMarshaller}} data.
> It would be much better if the server always used the user marshaller for {{application/unknown}}, and when a user needs backwards compatibility between a new server and an old client, they should configure {{GenericJBossMarshaller}} in the server.
> In addition, new clients should not use {{application/unknown}} unless the marshaller does not implement {{getMediaType()}}: they know the marshaller's media type, and they should send it to the server.



--
This message was sent by Atlassian Jira
(v7.13.8#713008)


More information about the infinispan-issues mailing list