[
https://issues.redhat.com/browse/ISPN-11910?page=com.atlassian.jira.plugi...
]
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)