Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
Description
Between HBase 1.x and 2.0, the RegionObserver pre*ScannerOpen coprocessors were significantly changed so that the coproc implementer no longer has access to the actual Scanner, just a ScanOptions object that can be changed in limited ways. This is safer and prevents resource leaks and other bugs.
While ScanOptions provides support for changing TTL, KeepDeletedCells, and MaxVersions, a fourth column family config parameter, MinVersions, appears to have been missed. This prevents coproc implementers from changing MinVersions dynamically. An example of this is PHOENIX-5645, which in the forthcoming Phoenix 4.16 (based on HBase 1.x) will allow users to configure a moving window where all versions are kept, and thus point-in-time queries are safe. This cannot be put in the forthcoming Phoenix 5.1 (based on HBase 2.1 and 2.2) because of the coproc changes.
Relatedly, preStoreScannerOpen lacks access to the Scan in HBase 2.0 and up. This prevents coprocs from reading the Scan parameters to check if, for example, a Scan has set the max time to a point in the past, and thus needs to override KeepDeletedCells. This can lead to incorrect behavior when doing point-in-time queries or using transactional engines that treat physically committed HBase writes as logically uncommitted parts of a transaction. It's also a correctness problem for PHOENIX-5645. Please note that only read-only access to the Scan from the store scanner coproc hook is in scope for this change.
Attachments
Issue Links
- is depended upon by
-
PHOENIX-5881 Port MaxLookbackAge logic to 5.x
- Closed
- links to