[
https://issues.apache.org/jira/browse/HBASE-11764?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14102496#comment-14102496
]
Andrew Purtell edited comment on HBASE-11764 at 8/19/14 5:30 PM:
-----------------------------------------------------------------
bq. So you will add setter in Mutation (Non Delete) to pass the per cell TTL
right?
Yes.
Also, I realized this morning that this part of HBASE-11763 will need to be
changed in the patch on this issue:
{code}
@@ -362,9 +360,16 @@ public class ScanQueryMatcher {
}
// note the following next else if...
// delete marker are not subject to other delete markers
- } else if (!this.deletes.isEmpty()) {
- DeleteResult deleteResult = deletes.isDeleted(cell);
- switch (deleteResult) {
+ } else {
+ // If the cell is expired and we have enough versions, skip
+ if (columns.hasMinVersions() && HStore.isExpired(cell,
oldestUnexpiredTS)) {
+ return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
qualifierOffset,
+ qualifierLength);
+ }
+ // Check deletes
+ if (!this.deletes.isEmpty()) {
+ DeleteResult deleteResult = deletes.isDeleted(cell);
+ switch (deleteResult) {
case FAMILY_DELETED:
case COLUMN_DELETED:
return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
{code}
HStore#isExpired has been changed to do, if a cell TTL is available, a
comparison of the cell's timestamp with its TTL tag, ignoring the family
setting (oldestUnexpiredTS). We can't assume based on a cell TTL that we can
skip to the next column. We can only skip the current cell, because a cell TTL
overrides any family setting in the narrowest scope of a single cell. The
earlier assumption that once we hit an expired cell no "earlier" cell is alive
is no longer true. This may affect scanning performance unconditionally. Up to
now additional costs like the tag iterator would be avoided wherever cells do
not have tags.
was (Author: apurtell):
bq. So you will add setter in Mutation (Non Delete) to pass the per cell TTL
right?
Yes.
Also, I realized this morning that this part of HBASE-11763 will need to be
changed in the patch on this issue:
{code}
@@ -362,9 +360,16 @@ public class ScanQueryMatcher {
}
// note the following next else if...
// delete marker are not subject to other delete markers
- } else if (!this.deletes.isEmpty()) {
- DeleteResult deleteResult = deletes.isDeleted(cell);
- switch (deleteResult) {
+ } else {
+ // If the cell is expired and we have enough versions, skip
+ if (columns.hasMinVersions() && HStore.isExpired(cell,
oldestUnexpiredTS)) {
+ return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
qualifierOffset,
+ qualifierLength);
+ }
+ // Check deletes
+ if (!this.deletes.isEmpty()) {
+ DeleteResult deleteResult = deletes.isDeleted(cell);
+ switch (deleteResult) {
case FAMILY_DELETED:
case COLUMN_DELETED:
return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
{code}
We can't assume based on a cell TTL that we can skip to the next column. We can
only skip the current cell. This may affect scanning performance
unconditionally. Up to now additional costs like the tag iterator would be
avoided wherever cells do not have tags.
> Support per cell TTLs
> ---------------------
>
> Key: HBASE-11764
> URL: https://issues.apache.org/jira/browse/HBASE-11764
> Project: HBase
> Issue Type: Sub-task
> Reporter: Andrew Purtell
> Assignee: Andrew Purtell
> Fix For: 0.99.0, 0.98.6
>
> Attachments: HBASE-11764.patch
>
>
--
This message was sent by Atlassian JIRA
(v6.2#6252)