phoenix-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Geoffrey Jacoby (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-5132) View indexes with different owners but of the same base table can be assigned same ViewIndexId
Date Tue, 12 Feb 2019 19:09:00 GMT

    [ 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)

Mime
View raw message