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

[jira] [Commented] (PHOENIX-6124) Block adding/dropping a column on a parent view for clients <4.15 and for clients that have phoenix.allow.system.catalog.rollback=true

    [ https://issues.apache.org/jira/browse/PHOENIX-6124?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17201115#comment-17201115 ] 

Chinmay Kulkarni commented on PHOENIX-6124:
-------------------------------------------

A worse side-effect of this is that we won't validate an add/drop column request on a view which has child views, and so conflicting column types can be added (not even necessary to be concurrently issued requests). For ex:
{code:sql}
CREATE TABLE S.T (A INTEGER NOT NULL PRIMARY KEY, B INTEGER, C INTEGER);
CREATE VIEW S1.V AS SELECT * FROM S.T WHERE B = 10;
CREATE VIEW S1.GC (NEW_COL1 INTEGER) AS SELECT * FROM S1.V;
UPSERT INTO S1.GC(A, B, C, NEW_COL1) VALUES (1, 10, 20, 30);

ALTER TABLE S.T ADD NEW_COL1 VARCHAR; -- fails as expected
SELECT * FROM S1.GC;
SELECT * FROM S1.V;
SELECT * FROM S.T;
-- as expected
ALTER VIEW S1.V ADD NEW_COL1 VARCHAR; -- does not fail and masks previously upserted values for NEW_COL1

SELECT * FROM S1.GC; -- shows no value for NEW_COL1
{code}

The original value for NEW_COL1 inside the grandchild view can be seen after we issue a DROP COLUMN on its parent view.
Promoting this Jira to a blocker [~yanxinyi] [~jisaac] [~sukumaddineni]
FYI [~gjacoby] [~kozdemir] [~larsh]

> Block adding/dropping a column on a parent view for clients <4.15 and for clients that have phoenix.allow.system.catalog.rollback=true
> --------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-6124
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-6124
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 5.0.0, 4.15.0
>            Reporter: Chinmay Kulkarni
>            Priority: Blocker
>             Fix For: 5.1.0, 4.16.0
>
>
> For pre-4.15 clients, we have to block adding/dropping a column to a table if it has child views since we can’t do any checkAndPut distributed locking (see [this|https://github.com/apache/phoenix/blob/6ecc66738e576a5349605c2f5b20003df03f95de/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java#L2595-L2616]). 
> However, this is only prevented if the parent is a table and not if the parent is a view. We should extend [the condition|https://github.com/apache/phoenix/blob/6ecc66738e576a5349605c2f5b20003df03f95de/phoenix-core/src/main/java/org/apache/phoenix/coprocessor/MetaDataEndpointImpl.java#L2591] to also cover views since conflicting mutations on its children can also lead to inconsistencies.



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