[
https://issues.apache.org/jira/browse/PHOENIX-8016?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jing Yu reassigned PHOENIX-8016:
--------------------------------
Assignee: Jing Yu
> Uncovered-index read-repair never deletes a stale index entry when the data
> row is actively updated
> ---------------------------------------------------------------------------------------------------
>
> Key: PHOENIX-8016
> URL: https://issues.apache.org/jira/browse/PHOENIX-8016
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.2.0, 5.2.1, 5.3.0, 5.2.2, 5.3.1, 5.3.2
> Reporter: Tanuj Khurana
> Assignee: Jing Yu
> Priority: Major
>
> Orphaned/stale uncovered-index entries (e.g. a NULL-keyed entry left behind
> after a row's indexed value changes from NULL to non-null) are supposed to be
> cleaned by lazy read-repair, but for an actively-updated data row they are
> *never* deleted, no matter how old the stale index cell is.
> Read-repair for uncovered indexes runs on the read path in
> {{UncoveredIndexRegionScanner.verifyIndexRowAndRepairIfNecessary}} (:321-362)
> and
> the {{dataRow == null}} branch of {{getNextCoveredIndexRow}} (:384-393),
> gated on
> {{ageThreshold}} ({{phoenix.global.index.row.age.threshold.to.delete.ms}},
> default 7 days, {{QueryServicesOptions.java:439-440}}).
> A stale (but non-orphan) entry hits the "data row exists but index row is
> stale"
> case (:353-360). The tenant's data row still exists (now with a non-null
> indexed
> value), so {{checkIndexRow}} fails, and the delete is gated on *the data
> row's*
> max timestamp:
> {code:java}
> if (indexMaintainer.isAgedEnough(IndexUtil.getMaxTimestamp(put),
> ageThreshold) ...) { // :354
> region.delete(indexMaintainer.createDelete(indexRowKey,
> IndexUtil.getMaxTimestamp(put), false));
> {code}
> If the data table keeps getting updated frequently, the isAgedEnough check
> will never be true because it takes the latest timestamp of the data table
> row instead of the orphaned index row
--
This message was sent by Atlassian Jira
(v8.20.10#820010)