[
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)