phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hadoop QA (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-3199) ServerCacheClient would send cache to all regions unnecessarily once it should send cache to the first region
Date Fri, 04 Nov 2016 05:54:58 GMT

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

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/12837052/PHOENIX-3199_v7.patch
  against master branch at commit 51918bb812f950f6882e9b731967fecf930b3674.
  ATTACHMENT ID: 12837052

    {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/674//console

This message is automatically generated.

> ServerCacheClient would send cache to all regions unnecessarily once it should send cache
to the first region
> -------------------------------------------------------------------------------------------------------------
>
>                 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_v6.patch, PHOENIX-3199_v7.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)

Mime
View raw message