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

ScanQuery without a filter triggers object's deserialization on the server side

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • ignite-1.4, 2.0
    • 2.3
    • cache

    Description

      The issue is reproduced on version 1.4 where legacy PortableMarshaller is used. However, I'm quiet sure that the issue happens when BinaryMarshaller is used as well in 1.5.

      1) Start a server using ignite.sh/bat

      2) Create a simple app, that uses binary or portable marshaller, creates a cache dynamically and executes a ScanQuery like below
      int size=employees1.query(new ScanQuery()).getAll().size();

      3) As you see the query doesn't use any filters. However on the server side some filter is still being checked org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.checkPredicate(GridCacheQueryManager.java:963) which makes the server to deserialize a value.

      According to the stack trace there is some internal filter that triggered checkPredicate function - filter=o.a.i.i.processors.cache.IgniteCacheProxy$1@3224ff7b.

      [11:05:22,725][SEVERE][ignite-#25%sys-null%][GridCacheDistributedQueryManager] <testCache> Failed to run query [qry=GridCacheQueryInfo [loc=false, trans=null, rdc=null, qry=GridCacheQueryAdapter [type=SCAN, clsName=null, clause=null, filter=o.a.i.i.processors.cache.IgniteCacheProxy$1@3224ff7b, part=null, incMeta=false, metrics=null, pageSize=1024, timeout=0, keepAll=false, incBackups=false, dedup=false, prj=null, keepPortable=false, subjId=c6aeb542-1693-4b5f-89db-96db50e3435f, taskHash=0], locFut=null, sndId=c6aeb542-1693-4b5f-89db-96db50e3435f, reqId=14, incMeta=false, all=false], node=209c237a-9e33-4d05-abe4-bbc14f93c439]
      class org.apache.ignite.IgniteCheckedException: **********************.SubMessageB
      at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:6979)
      at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:166)
      at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:115)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$CachedResult.iterator(GridCacheQueryManager.java:2784)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.runQuery(GridCacheQueryManager.java:1376)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager.processQueryRequest(GridCacheDistributedQueryManager.java:226)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager$2.apply(GridCacheDistributedQueryManager.java:105)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager$2.apply(GridCacheDistributedQueryManager.java:103)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:580)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:280)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:198)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$000(GridCacheIoManager.java:77)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:160)
      at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:811)
      at org.apache.ignite.internal.managers.communication.GridIoManager.access$1500(GridIoManager.java:106)
      at org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:774)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.ClassNotFoundException: **********************.SubMessageB
      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
      at java.lang.Class.forName0(Native Method)
      at java.lang.Class.forName(Class.java:348)
      at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8137)
      at org.apache.ignite.internal.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:185)
      at org.gridgain.grid.internal.util.portable.GridPortableContext.descriptorForTypeId(GridPortableContext.java:510)
      at org.gridgain.grid.internal.util.portable.GridPortableReaderImpl.deserialize(GridPortableReaderImpl.java:2092)
      at org.gridgain.grid.internal.util.portable.GridPortableObjectImpl.deserialize(GridPortableObjectImpl.java:262)
      at org.gridgain.grid.internal.processors.portable.CacheObjectEntContext.unwrapPortable(CacheObjectEntContext.java:165)
      at org.gridgain.grid.internal.processors.portable.CacheObjectEntContext.unwrapPortableIfNeeded(CacheObjectEntContext.java:65)
      at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapPortableIfNeeded(GridCacheContext.java:1759)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.checkPredicate(GridCacheQueryManager.java:963)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.advance(GridCacheQueryManager.java:931)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.<init>(GridCacheQueryManager.java:876)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.scanIterator(GridCacheQueryManager.java:831)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.executeQuery(GridCacheQueryManager.java:595)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.queryResult(GridCacheQueryManager.java:1673)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.queryResult(GridCacheQueryManager.java:1640)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.runQuery(GridCacheQueryManager.java:1371)
      ... 14 more
      [11:05:22,736][SEVERE][ignite-#25%sys-null%][GridCacheDistributedQueryManager] <testCache> Failed to close iterator.
      class org.apache.ignite.IgniteCheckedException: ********************************.SubMessageB
      at org.apache.ignite.internal.util.IgniteUtils.cast(IgniteUtils.java:6979)
      at org.apache.ignite.internal.util.future.GridFutureAdapter.get0(GridFutureAdapter.java:166)
      at org.apache.ignite.internal.util.future.GridFutureAdapter.get(GridFutureAdapter.java:115)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$CachedResult.closeIfNotShared(GridCacheQueryManager.java:2724)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.removeQueryResult(GridCacheQueryManager.java:1707)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.runQuery(GridCacheQueryManager.java:1594)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager.processQueryRequest(GridCacheDistributedQueryManager.java:226)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager$2.apply(GridCacheDistributedQueryManager.java:105)
      at org.apache.ignite.internal.processors.cache.query.GridCacheDistributedQueryManager$2.apply(GridCacheDistributedQueryManager.java:103)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:580)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:280)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:198)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$000(GridCacheIoManager.java:77)
      at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:160)
      at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:811)
      at org.apache.ignite.internal.managers.communication.GridIoManager.access$1500(GridIoManager.java:106)
      at org.apache.ignite.internal.managers.communication.GridIoManager$5.run(GridIoManager.java:774)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
      at java.lang.Thread.run(Thread.java:745)
      Caused by: java.lang.ClassNotFoundException: ******************************.SubMessageB
      at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
      at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
      at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
      at java.lang.Class.forName0(Native Method)
      at java.lang.Class.forName(Class.java:348)
      at org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8137)
      at org.apache.ignite.internal.MarshallerContextAdapter.getClass(MarshallerContextAdapter.java:185)
      at org.gridgain.grid.internal.util.portable.GridPortableContext.descriptorForTypeId(GridPortableContext.java:510)
      at org.gridgain.grid.internal.util.portable.GridPortableReaderImpl.deserialize(GridPortableReaderImpl.java:2092)
      at org.gridgain.grid.internal.util.portable.GridPortableObjectImpl.deserialize(GridPortableObjectImpl.java:262)
      at org.gridgain.grid.internal.processors.portable.CacheObjectEntContext.unwrapPortable(CacheObjectEntContext.java:165)
      at org.gridgain.grid.internal.processors.portable.CacheObjectEntContext.unwrapPortableIfNeeded(CacheObjectEntContext.java:65)
      at org.apache.ignite.internal.processors.cache.GridCacheContext.unwrapPortableIfNeeded(GridCacheContext.java:1759)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.checkPredicate(GridCacheQueryManager.java:963)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.advance(GridCacheQueryManager.java:931)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$5.<init>(GridCacheQueryManager.java:876)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.scanIterator(GridCacheQueryManager.java:831)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.executeQuery(GridCacheQueryManager.java:595)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.queryResult(GridCacheQueryManager.java:1673)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.queryResult(GridCacheQueryManager.java:1640)
      at org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager.runQuery(GridCacheQueryManager.java:1371)
      ... 14 more
      ^C[11:05:50] Ignite node stopped OK [uptime=00:00:45:276]
      

      Attachments

        1. ScanQueryBug.java
          1 kB
          Denis A. Magda

        Activity

          People

            nizhikov Nikolay Izhikov
            dmagda Denis A. Magda
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: