[ 
https://issues.apache.org/jira/browse/GEODE-5404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

nabarun closed GEODE-5404.
--------------------------

> Optimize performance of client/server distinct order-by queries with 
> integrated security
> ----------------------------------------------------------------------------------------
>
>                 Key: GEODE-5404
>                 URL: https://issues.apache.org/jira/browse/GEODE-5404
>             Project: Geode
>          Issue Type: Bug
>          Components: querying
>            Reporter: Barry Oglesby
>            Assignee: Barry Oglesby
>            Priority: Major
>              Labels: pull-request-available
>             Fix For: 1.7.0
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The performance of distinct order-by queries along with integrated security 
> has degraded.
> With the query below and integrated security, \{{SelectResults.size}} 
> repeatedly causes the whitelist to be created while re-ordering the results. 
> \{{SelectResults.size}} is called every time through the loop in 
> \{{BaseCommandQuery.sendResultsAsObjectArray}}.
> {noformat}
> select distinct * from /data where cusip = $1 order by id asc limit 500
> {noformat}
> In current:
> {noformat}
> Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id 
> asc limit 500' returned 500 entries in 175979 ms
> Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id 
> asc limit 500' returned 500 entries in 173280 ms
> {noformat}
> In Geode 1.2.0:
> {noformat}
> Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id 
> asc limit 500' returned 500 entries in 7270 ms
> Query '<trace> select distinct * from /data where cusip = 'AAPL' order by id 
> asc limit 500' returned 500 entries in 7303 ms
> {noformat}
> Here is a stack trace showing ths issue:
> {noformat}
> "ServerConnection on port 59856 Thread 1" #83 prio=5 os_prio=31 
> tid=0x00007fe66191f000 nid=0xbf07 runnable [0x000070000ea9a000]
>  java.lang.Thread.State: RUNNABLE
>  at java.util.HashMap.putVal(HashMap.java:628)
>  at java.util.HashMap.put(HashMap.java:611)
>  at java.util.HashSet.add(HashSet.java:219)
>  at 
> org.apache.geode.cache.query.internal.RestrictedMethodInvocationAuthorizer.createWhiteList(RestrictedMethodInvocationAuthorizer.java:48)
>  at 
> org.apache.geode.cache.query.internal.RestrictedMethodInvocationAuthorizer.<init>(RestrictedMethodInvocationAuthorizer.java:42)
>  at 
> org.apache.geode.cache.query.internal.DefaultQueryService.<init>(DefaultQueryService.java:126)
>  at 
> org.apache.geode.internal.cache.GemFireCacheImpl.getQueryService(GemFireCacheImpl.java:4199)
>  at 
> org.apache.geode.cache.query.internal.PathUtils.evaluateAttribute(PathUtils.java:76)
>  at 
> org.apache.geode.cache.query.internal.CompiledPath.evaluate(CompiledPath.java:147)
>  at 
> org.apache.geode.cache.query.internal.CompiledSortCriterion.evaluate(CompiledSortCriterion.java:72)
>  at 
> org.apache.geode.cache.query.internal.OrderByComparator.evaluateSortCriteria(OrderByComparator.java:78)
>  at 
> org.apache.geode.cache.query.internal.OrderByComparator.compare(OrderByComparator.java:111)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeIterator.compare(NWayMergeResults.java:310)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeDistinctIterator.hasNext(NWayMergeResults.java:396)
>  at 
> org.apache.geode.cache.query.internal.utils.LimitIterator.hasNext(LimitIterator.java:39)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeIterator$IteratorWrapper.move(NWayMergeResults.java:346)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection$NWayMergeDistinctIterator.hasNext(NWayMergeResults.java:380)
>  at 
> org.apache.geode.cache.query.internal.utils.LimitIterator.hasNext(LimitIterator.java:39)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults$NWayMergeResultsCollection.size(NWayMergeResults.java:193)
>  at 
> org.apache.geode.cache.query.internal.NWayMergeResults.size(NWayMergeResults.java:68)
>  at 
> org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.sendResultsAsObjectArray(BaseCommandQuery.java:367)
>  at 
> org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQueryUsingParams(BaseCommandQuery.java:218)
>  at 
> org.apache.geode.internal.cache.tier.sockets.BaseCommandQuery.processQuery(BaseCommandQuery.java:60)
>  at 
> org.apache.geode.internal.cache.tier.sockets.command.Query.cmdExecute(Query.java:92)
>  at 
> org.apache.geode.internal.cache.tier.sockets.BaseCommand.execute(BaseCommand.java:164)
>  at 
> org.apache.geode.internal.cache.tier.sockets.ServerConnection.doNormalMsg(ServerConnection.java:869)
>  at 
> org.apache.geode.internal.cache.tier.sockets.OriginalServerConnection.doOneMessage(OriginalServerConnection.java:77)
>  at 
> org.apache.geode.internal.cache.tier.sockets.ServerConnection.run(ServerConnection.java:1248)
>  at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>  at 
> org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$4$1.run(AcceptorImpl.java:644)
>  at java.lang.Thread.run(Thread.java:745)
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to