[ 
https://issues.apache.org/jira/browse/PHOENIX-3199?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15636883#comment-15636883
 ] 

Hadoop QA commented on PHOENIX-3199:
------------------------------------

{color:red}-1 overall{color}.  Here are the results of testing the latest 
attachment 
  http://issues.apache.org/jira/secure/attachment/12837169/PHOENIX-3199_v9.patch
  against master branch at commit e4e1570b83ca0141fc19421a0bd5217ebb37f512.
  ATTACHMENT ID: 12837169

    {color:green}+1 @author{color}.  The patch does not contain any @author 
tags.

    {color:red}-1 tests included{color}.  The patch doesn't appear to include 
any new or modified tests.
                        Please justify why no new tests are needed for this 
patch.
                        Also please list what manual steps were performed to 
verify this patch.

    {color:red}-1 patch{color}.  The patch command could not apply the patch.

Console output: 
https://builds.apache.org/job/PreCommit-PHOENIX-Build/676//console

This message is automatically generated.

> ServerCacheClient sends cache to all regions unnecessarily
> ----------------------------------------------------------
>
>                 Key: PHOENIX-3199
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3199
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.8.0
>            Reporter: chenglei
>            Assignee: chenglei
>             Fix For: 4.10.0, 4.8.2
>
>         Attachments: PHOENIX-3199_v8.patch, PHOENIX-3199_v9.patch
>
>
> The issue is caused by the htable's coprocessorService method,the third 
> parameter endKey is inclusive,not exclusive.When both  startKey and endKey 
> are HConstants.EMPTY_START_ROW,the coprocessorService method may send 
> callable to all regions:
> {code:borderStyle=solid} 
> coprocessorService(final Class<T> service,byte[] startKey, byte[] endKey, 
> final Batch.Call<T,R> callable)
> {code}
> In the addServerCache method of  org.apache.phoenix.cache.ServerCacheClient  
> class, once the first region can pass the if test in line 174, because the 
> startKey of the first region is HConstants.EMPTY_START_ROW, so the key  is 
> also  HConstants.EMPTY_START_ROW in line 180. When we invoke the htable's 
> coprocessorService method in line 189, the startKey and endKey(Inclusive) 
> parameters are both HConstants.EMPTY_START_ROW,and  the htable's 
> coprocessorService method internally  uses getKeysAndRegionsInRange method to 
> locate 
>  [HConstants.EMPTY_START_ROW,HConstants.EMPTY_START_ROW] to all regions, so 
> cache would be sent to all regions :
> {code:borderStyle=solid} 
> 170  for (HRegionLocation entry : locations) {
> 171               // Keep track of servers we've sent to and only send once
> 172                byte[] regionStartKey = 
> entry.getRegionInfo().getStartKey();
> 173                byte[] regionEndKey = entry.getRegionInfo().getEndKey();
> 174               if ( ! servers.contains(entry) && 
> 175                        keyRanges.intersectRegion(regionStartKey, 
> regionEndKey,
> 176                               cacheUsingTable.getIndexType() == 
> IndexType.LOCAL)) {  
> 177                   // Call RPC once per server
> 178                   servers.add(entry);
> 179                    if (LOG.isDebugEnabled()) 
> {LOG.debug(addCustomAnnotations("Adding cache entry to be sent for " + entry, 
> connection));}
> 180                    final byte[] key = entry.getRegionInfo().getStartKey();
> 181                    final HTableInterface htable = 
> services.getTable(cacheUsingTableRef.getTable().getPhysicalName().getBytes());
> 182                    closeables.add(htable);
> 183                    futures.add(executor.submit(new JobCallable<Boolean>() 
> {
> 184                      
> 185                        @Override
> 186                        public Boolean call() throws Exception {
> 187                            final Map<byte[], AddServerCacheResponse> 
> results;
> 188                            try {
> 189                                results = 
> htable.coprocessorService(ServerCachingService.class, key, key, 
> 190                                            new 
> Batch.Call<ServerCachingService, AddServerCacheResponse>() {
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to