Matteo Bertozzi created HBASE-15208:
---------------------------------------
Summary: AsyncProcess seems to rely on regionId() to be unique
which is not
Key: HBASE-15208
URL: https://issues.apache.org/jira/browse/HBASE-15208
Project: HBase
Issue Type: Bug
Components: Client
Affects Versions: 0.98.16.1, 1.1.3, 1.0.3, 2.0.0, 1.2.0, 1.3.0
Reporter: Matteo Bertozzi
AsyncProcess is using getRegionId() to identify a region. It looks like the
original implementation was using encodedName which is unique, but then we
switched to regionIds with HBASE-9988.
{code}
protected boolean canTakeOperation(HRegionLocation loc,
Map<Long, Boolean> regionsIncluded,
Map<ServerName, Boolean> serversIncluded) {
long regionId = loc.getRegionInfo().getRegionId();
Boolean regionPrevious = regionsIncluded.get(regionId);
if (regionPrevious != null) {
// We already know what to do with this region.
return regionPrevious;
}
{code}
The RegionId is not unique, since it is a timestamp. and specifically in case
we create a table with splits each region get the same regionId. (from the doc
of HRegionInfo about regionId, looks like that field should be named
creationTimestamp or something like that for a more expressive name).
I'm unsure on what are the consequences. from a couple of tests and the code
looks like it may just allow more tasks than the one configured by the max task
allowed conf. but I'd let someone else familiar with this code look into it.
Also TestAsyncProcess has the HRegionInfo hr1, hr2, hr3 with different
regionIds, if we switch them to be the same id we have a
testSubmitBusyRegionServer() failing
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)