Uploaded image for project: 'Ignite'
  1. Ignite
  2. IGNITE-8886

Simultaneous using of BinaryWriter и BinaryRawWriter leads to BinaryObjectException and OOM

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.5
    • 2.7
    • binary

    Description

      When we use BinaryWriter and BinaryRawWriter simultaneously inside writeBinary method we can get the following exceptions in the process of deserializing objects:

      1. class org.apache.ignite.binary.BinaryObjectException: Invalid flag value: 115

      Exception in thread "main" javax.cache.CacheException: class org.apache.ignite.IgniteCheckedException: Failed to deserialize object [typeName=org.apache.ignite.reproducers.fd7550.BinarylizableInvalidFlag$TestBean]
         at org.apache.ignite.internal.processors.cache.GridCacheUtils.convertToCacheException(GridCacheUtils.java:1302)
         at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.cacheException(IgniteCacheProxyImpl.java:1732)
         at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:910)
         at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.get(GatewayProtectedCacheProxy.java:608)
         at org.apache.ignite.reproducers.fd7550.BinarylizableInvalidFlag.main(BinarylizableInvalidFlag.java:33)
      Caused by: class org.apache.ignite.IgniteCheckedException: Failed to deserialize object [typeName=org.apache.ignite.reproducers.fd7550.BinarylizableInvalidFlag$TestBean]
         at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:7322)
         at org.apache.ignite.internal.util.future.GridFutureAdapter.resolve(GridFutureAdapter.java:259)
         at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:171)
         at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:140)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4563)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4537)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:1350)
         at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.get(IgniteCacheProxyImpl.java:907)
         ... 2 more
      Caused by: class org.apache.ignite.binary.BinaryObjectException: Failed to deserialize object [typeName=org.apache.ignite.reproducers.fd7550.BinarylizableInvalidFlag$TestBean]
         at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:909)
         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:798)
         at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
         at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
         at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
         at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:125)
         at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1764)
         at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1752)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:679)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.localGet(GridPartitionedSingleGetFuture.java:461)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.mapKeyToNode(GridPartitionedSingleGetFuture.java:342)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.map(GridPartitionedSingleGetFuture.java:216)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.init(GridPartitionedSingleGetFuture.java:208)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.getAsync0(GridDhtAtomicCache.java:1390)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$1600(GridDhtAtomicCache.java:130)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$16.apply(GridDhtAtomicCache.java:469)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$16.apply(GridDhtAtomicCache.java:467)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.asyncOp(GridDhtAtomicCache.java:756)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.getAsync(GridDhtAtomicCache.java:467)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4556)
         ... 5 more
      Caused by: class org.apache.ignite.binary.BinaryObjectException: Invalid flag value: 115
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1969)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
         at org.apache.ignite.internal.binary.BinaryUtils.doReadObject(BinaryUtils.java:1778)
         at org.apache.ignite.internal.binary.BinaryUtils.deserializeOrUnmarshal(BinaryUtils.java:2141)
         at org.apache.ignite.internal.binary.BinaryUtils.doReadCollection(BinaryUtils.java:2072)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.readCollection0(BinaryReaderExImpl.java:1535)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.readCollection(BinaryReaderExImpl.java:1521)
         at org.apache.ignite.reproducers.fd7550.BinarylizableInvalidFlag$TestBean.readBinary(BinarylizableInvalidFlag.java:54)
         at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:860)
         ... 26 more
      
      

      2. java.lang.OutOfMemoryError: Java heap space

      Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
         at org.apache.ignite.internal.binary.BinaryUtils.doReadDecimalArray(BinaryUtils.java:1347)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1881)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716)
         at org.apache.ignite.internal.binary.BinaryUtils.doReadObject(BinaryUtils.java:1778)
         at org.apache.ignite.internal.binary.BinaryUtils.deserializeOrUnmarshal(BinaryUtils.java:2141)
         at org.apache.ignite.internal.binary.BinaryUtils.doReadCollection(BinaryUtils.java:2072)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.readCollection0(BinaryReaderExImpl.java:1535)
         at org.apache.ignite.internal.binary.BinaryReaderExImpl.readCollection(BinaryReaderExImpl.java:1521)
         at org.apache.ignite.reproducers.fd7550.BinarylizableOOM$TestBean.readBinary(BinarylizableOOM.java:54)
         at org.apache.ignite.internal.binary.BinaryClassDescriptor.read(BinaryClassDescriptor.java:860)
         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:798)
         at org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143)
         at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177)
         at org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:67)
         at org.apache.ignite.internal.processors.cache.CacheObjectContext.unwrapBinaryIfNeeded(CacheObjectContext.java:125)
         at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1764)
         at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapBinaryIfNeeded(GridCacheContext.java:1752)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.setResult(GridPartitionedSingleGetFuture.java:679)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.localGet(GridPartitionedSingleGetFuture.java:461)
      Disconnected from the target VM, address: '127.0.0.1:26915', transport: 'socket'
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.mapKeyToNode(GridPartitionedSingleGetFuture.java:342)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.map(GridPartitionedSingleGetFuture.java:216)
         at org.apache.ignite.internal.processors.cache.distributed.dht.GridPartitionedSingleGetFuture.init(GridPartitionedSingleGetFuture.java:208)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.getAsync0(GridDhtAtomicCache.java:1390)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$1600(GridDhtAtomicCache.java:130)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$16.apply(GridDhtAtomicCache.java:469)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$16.apply(GridDhtAtomicCache.java:467)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.asyncOp(GridDhtAtomicCache.java:756)
         at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.getAsync(GridDhtAtomicCache.java:467)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get0(GridCacheAdapter.java:4556)
         at org.apache.ignite.internal.processors.cache.GridCacheAdapter.get(GridCacheAdapter.java:4537)
      
      

      Reproducers for each exception are attached.

      The workaround here - do not use BinaryWriter и BinaryRawWriter simultaneously.

      Attachments

        1. Screenshot_20180830_142433.png
          57 kB
          Ilya Kasnacheev
        2. BinarylizableOOM.java
          3 kB
          Roman Guseinov
        3. BinarylizableInvalidFlag.java
          3 kB
          Roman Guseinov

        Issue Links

          Activity

            People

              ilyak Ilya Kasnacheev
              guseinov Roman Guseinov
              Votes:
              1 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: