You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Ankit Singhal (JIRA)" <ji...@apache.org> on 2015/11/30 19:53:11 UTC
[jira] [Commented] (PHOENIX-2249) SYSTEM.STATS not update after
region merge occurs.
[ https://issues.apache.org/jira/browse/PHOENIX-2249?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15032238#comment-15032238 ]
Ankit Singhal commented on PHOENIX-2249:
----------------------------------------
[~jamestaylor],[~chrajeshbabu32@gmail.com]
how about deleting the stale stats for a merge daughter regions immediately at the start of the compaction (As stats for a new merged region will be automatically added during the compaction run).
Otherwise this will return the duplicate results to the user.
In UngroupedAggregateRegionObserver.java
{code}
@Override
public InternalScanner preCompact(ObserverContext<RegionCoprocessorEnvironment> c, final Store store,
InternalScanner scanner, final ScanType scanType) throws IOException {
TableName table = c.getEnvironment().getRegion().getRegionInfo().getTable();
ClusterConnection conn = c.getEnvironment().getRegionServerServices().getConnection();
InternalScanner internalScanner = scanner;
if (scanType.equals(ScanType.COMPACT_DROP_DELETES)) {
try {
Pair<HRegionInfo, HRegionInfo> mergeRegions = MetaTableAccessor.getRegionsFromMergeQualifier(conn,
c.getEnvironment().getRegion().getRegionInfo().getRegionName());
boolean useCurrentTime = c.getEnvironment().getConfiguration().getBoolean(
QueryServices.STATS_USE_CURRENT_TIME_ATTRIB,
QueryServicesOptions.DEFAULT_STATS_USE_CURRENT_TIME);
// Provides a means of clients controlling their timestamps to not use current time
// when background tasks are updating stats. Instead we track the max timestamp of
// the cells and use that.
long clientTimeStamp = useCurrentTime ? TimeKeeper.SYSTEM.getCurrentTime()
: StatisticsCollector.NO_TIMESTAMP;
StatisticsCollector stats = new StatisticsCollector(c.getEnvironment(), table.getNameAsString(),
clientTimeStamp, store.getFamily().getName());
if (mergeRegions != null) {
ImmutableBytesPtr fam = new ImmutableBytesPtr(store.getFamily().getName());
stats.deleteStatistic(mergeRegions.getFirst().getRegionName(), fam);
stats.deleteStatistic(mergeRegions.getSecond().getRegionName(), fam);
}
internalScanner = stats.createCompactionScanner(c.getEnvironment().getRegion(), store, scanner);
} catch (IOException e) {
// If we can't reach the stats table, don't interrupt the normal
// compaction operation, just log a warning.
if (logger.isWarnEnabled()) {
logger.warn("Unable to collect stats for " + table, e);
}
}
}
return internalScanner;
}
{code}
> SYSTEM.STATS not update after region merge occurs.
> --------------------------------------------------
>
> Key: PHOENIX-2249
> URL: https://issues.apache.org/jira/browse/PHOENIX-2249
> Project: Phoenix
> Issue Type: Bug
> Environment: Ubuntu server 14.04
> Hadoop 2.6.0
> HBase 1.0.0
> Phoenix 4.4.0-HBase-1.0.0
> Reporter: Kuan-Po Tseng
> Assignee: Ankit Singhal
>
> When region merge occurs, SYSTEM.STATS does not update, it will leave stale information behind. And then if region splits on the merged region, this may cause
> "org.apache.phoenix.schema.StaleRegionBoundaryCacheException: ERROR 1108 (XCL08): Cache of region boundaries are out of date"
> after creating parallel scans since the stale information in SYSTEM.STATS will let guide post list not sorted in ascending order and this will cause scans over regions.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)