[
https://issues.apache.org/jira/browse/PHOENIX-5132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16766339#comment-16766339
]
Geoffrey Jacoby commented on PHOENIX-5132:
------------------------------------------
[~tdsilva] - See my first comment above. I agree that for 2 tenant specific
view indexes, we probably "get lucky" because we'll still have a unique
IndexId + tenantId combination for each tenant-owned view.
The problem is if you create an index on a global view in the same table, and
insert data for the same tenants that also have tenant-owned views. Those rows
would have the same viewIndexId + tenantId as one of the tenant owned views, so
I don't see how Phoenix could successfully distinguish.
Found that while testing a (closed-source) HBase MapReduce job over an _IDX_
table and the code I'd written to distinguish between view indexes got confused
when I mixed global and tenant owned view indexes.
> View indexes with different owners but of the same base table can be assigned
> same ViewIndexId
> ----------------------------------------------------------------------------------------------
>
> Key: PHOENIX-5132
> URL: https://issues.apache.org/jira/browse/PHOENIX-5132
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 5.0.0, 4.14.1
> Reporter: Geoffrey Jacoby
> Assignee: Geoffrey Jacoby
> Priority: Critical
> Attachments: PHOENIX-5132-4.x-HBase-1.4.patch,
> PHOENIX-5132-repro.patch
>
>
> All indexes on views for a particular base table are stored in the same
> physical HBase table. Phoenix distinguishes them by prepending each row key
> with an encoded short or long integer called a ViewIndexId.
> The ViewIndexId is generated by using a sequence to guarantee that each view
> index id is unique. Unfortunately, the sequence used follows a convention of
> [SaltByte, Tenant, Schema, BaseTable] for its key, which means that there's a
> separate sequence for each tenant that owns an index in the view index table.
> (See MetaDataUtil.getViewIndexSequenceKey) Since all the sequences start at
> the same value, collisions are not only possible but likely.
> I've written a test that confirms the ViewIndexId collision. This means it's
> very likely that query results using one view index could mistakenly include
> rows from another index, but I haven't confirmed this.
> All view indexes for a base table, regardless of whether globally or
> tenant-owned, should use the same sequence.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)