You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Aleksey Plekhanov (Jira)" <ji...@apache.org> on 2020/02/05 10:49:00 UTC

[jira] [Created] (IGNITE-12624) Java thin client: Wrong typeId generation for system types

Aleksey Plekhanov created IGNITE-12624:
------------------------------------------

             Summary: Java thin client: Wrong typeId generation for system types
                 Key: IGNITE-12624
                 URL: https://issues.apache.org/jira/browse/IGNITE-12624
             Project: Ignite
          Issue Type: Bug
          Components: binary, thin client
            Reporter: Aleksey Plekhanov
            Assignee: Aleksey Plekhanov


Thin client generates wrong {{typeId}} for system types. This is caused by {{ClientMarshallerContext}} implementation, which always returns {{false}} for {{isSystemType}} method. These leads to {{typeId}} duplication for the same class and assertions when trying to get object by thick client. Reproducer:
{code:java}
thinClient.cache(DEFAULT_CACHE_NAME).put(1, CacheAtomicityMode.ATOMIC);
thickClient.cache(DEFAULT_CACHE_NAME).get(1);
{code}
Assertion:

 
{noformat}
java.lang.AssertionError: Duplicate typeId [typeId=1984564222, cls=class org.apache.ignite.cache.CacheAtomicityMode, desc=BinaryClassDescriptor [cls=class org.apache.ignite.cache.CacheAtomicityMode, serializer=null, initialSerializer=null, mapper=BinaryInternalMapper [nameMapper=BinaryBaseNameMapper [isSimpleName=true], idMapper=BinaryBaseIdMapper [isLowerCase=true], checkOnZeroId=false], mode=OPTIMIZED, userType=false, typeId=329149470, typeName=org.apache.ignite.cache.CacheAtomicityMode, affKeyFieldName=null, ctor=null, writeReplacer=null, readResolveMtd=null, stableSchema=null, schemaReg=org.apache.ignite.internal.binary.BinarySchemaRegistry@167f45f8, registered=true, useOptMarshaller=true, excluded=false, stableSchemaPublished=false]]
  at org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:775)
  at org.apache.ignite.internal.binary.BinaryUtils.resolveClass(BinaryUtils.java:1669)
  at org.apache.ignite.internal.binary.BinaryEnumObjectImpl.deserialize(BinaryEnumObjectImpl.java:178)
  at org.apache.ignite.internal.binary.BinaryEnumObjectImpl.value(BinaryEnumObjectImpl.java:284)
  at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:176)
  at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
  at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:136)
  at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1814)
{noformat}
If we perform "put" operation with value of the same type from thick client before "get" operation, there is no assertion anymore, but {{typeId}} is still duplicated. And there is another issue: different marshallers can be used to marshal the same class for thin and thick clients, wrong class descriptor is returned for class name and there is assertion again. Reproducer:
{code:java}
thickClient.cache(DEFAULT_CACHE_NAME).put(3, Collections.emptyList());
thinClient.cache(DEFAULT_CACHE_NAME).put(2, Collections.emptyList());
thickClient.cache(DEFAULT_CACHE_NAME).get(2);
{code}
Assertion:
{noformat}
java.lang.AssertionError: OptimizedMarshaller should not be used here: java.util.Collections$EmptyList
  at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:865)
  at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1764)
  at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
  at org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:792)
  at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:142)
  at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:176)

{noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)