You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "Chinmay Kulkarni (Jira)" <ji...@apache.org> on 2020/10/28 20:54:00 UTC

[jira] [Assigned] (PHOENIX-6030) When phoenix.allow.system.catalog.rollback=true, a view still sees data for columns that were dropped from its parent view

     [ https://issues.apache.org/jira/browse/PHOENIX-6030?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Chinmay Kulkarni reassigned PHOENIX-6030:
-----------------------------------------

    Assignee: Chinmay Kulkarni

> When phoenix.allow.system.catalog.rollback=true, a view still sees data for columns that were dropped from its parent view
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-6030
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6030
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 5.0.0, 4.15.0
>            Reporter: Chinmay Kulkarni
>            Assignee: Chinmay Kulkarni
>            Priority: Blocker
>             Fix For: 5.1.0, 4.16.0
>
>
> Start a 4.x server with phoenix.allow.system.catalog.rollback=true, phoenix.system.catalog.splittable=false. Connect to it from a 4.x client with phoenix.allow.system.catalog.rollback=true. Run the following from the 4.x client:
> {code:sql}
> CREATE TABLE IF NOT EXISTS T (A INTEGER PRIMARY KEY, B INTEGER, C VARCHAR, D INTEGER);
> CREATE VIEW IF NOT EXISTS V (VA INTEGER, VB INTEGER) AS SELECT * FROM T WHERE B=200;
> UPSERT INTO V(A,B,C,D,VA,VB) VALUES (2, 200, 'def', -20, 91, 101);
> SELECT * FROM T;
> +----+------+------+------+
> | A  |  B   |  C   |  D   |
> +----+------+------+------+
> | 2  | 200  | def  | -20  |
> +----+------+------+------+
> SELECT * FROM V;
> +----+------+------+------+-----+------+
> | A  |  B   |  C   |  D   | VA  |  VB  |
> +----+------+------+------+-----+------+
> | 2  | 200  | def  | -20  | 91  | 101  |
> +----+------+------+------+-----+------+
> -- as expected
> -- below view can be either a tenant-specific view or a global view, as long as its parent is V.
> CREATE VIEW V_t001 AS SELECT * FROM V;
> ALTER VIEW V DROP COLUMN VA;
> SELECT * FROM V;
> +----+------+------+------+------+
> | A  |  B   |  C   |  D   |  VB  |
> +----+------+------+------+------+
> | 2  | 200  | def  | -20  | 101  |
> +----+------+------+------+------+
> -- We shouldn't see VA below since it was dropped from the parent
> SELECT * FROM V_T001;
> +----+------+------+------+-----+------+
> | A  |  B   |  C   |  D   | VA  |  VB  |
> +----+------+------+------+-----+------+
> | 2  | 200  | def  | -20  | 91  | 101  |
> +----+------+------+------+-----+------+
> {code}
> If rollback is enabled, we prevent adding/dropping a column to/from a *table* that has child views (see [this|https://github.com/apache/phoenix/blob/2fcb8541c9dd7317e62239bd208ff4377ba794e2/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java#L2602-L2615]). However, we don't prevent adding/dropping columns to/from a *view* that has child views (see [here|https://github.com/apache/phoenix/blob/2fcb8541c9dd7317e62239bd208ff4377ba794e2/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java#L2591]). Either we should also prevent column mutations in case of views that have children or make sure that dropped columns don't show up when querying a child view.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)