You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@ambari.apache.org by Dmitro Lisnichenko <dl...@hortonworks.com> on 2017/09/26 15:55:40 UTC
Re: Review Request 62413: Ambari upgrade don't delete stale
constraints
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/62413/
-----------------------------------------------------------
(Updated Sept. 26, 2017, 6:55 p.m.)
Review request for Ambari, Jonathan Hurley and Nate Cole.
Summary (updated)
-----------------
Ambari upgrade don't delete stale constraints
Bugs: AMBARI-21998
https://issues.apache.org/jira/browse/AMBARI-21998
Repository: ambari
Description
-------
During Ambari upgrade from 2.2.2 to 2.5 I discovered that some UNIQUE constraints are definned without name in older Ambari versions, and then altered by name in UpgadeCatalogs/newer DDLs.
For example:
Ambari 2.2.2
https://github.com/apache/ambari/blob/branch-2.2.2/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
{code} UNIQUE (ldap_user, user_name));{code}
Ambari-2.4.0
https://github.com/apache/ambari/blob/branch-2.4/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql#L288
{code} CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type)){code}
As a result, during upgrade from Ambari 2.2.2 to Ambari 2.5.0, the stale unique constraint with default name is not deleted.
That will reproduce on Postgres for any upgrade path that includes these versions.
{code}ambari=# \d+ users
Table "ambari.users"
Column | Type | Modifiers | Storage | Description
-----------------------+-----------------------------+------------------------------------+----------+-------------
user_id | integer | not null | plain |
principal_id | bigint | not null | plain |
ldap_user | integer | not null default 0 | plain |
user_name | character varying(255) | not null | extended |
create_time | timestamp without time zone | default now() | plain |
user_password | character varying(255) | | extended |
active | integer | not null default 1 | plain |
active_widget_layouts | character varying(1024) | default NULL::character varying | extended |
user_type | character varying(255) | default 'LOCAL'::character varying | extended |
Indexes:
"users_pkey" PRIMARY KEY, btree (user_id)
"unq_users_0" UNIQUE, btree (user_name, user_type)
"users_ldap_user_key" UNIQUE, btree (ldap_user, user_name)
Foreign-key constraints:
"fk_users_principal_id" FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id)
Referenced by:
TABLE "members" CONSTRAINT "fk_members_user_id" FOREIGN KEY (user_id) REFERENCES users(user_id)
Has OIDs: no
{code}
Now we have two constraints here
"unq_users_0" UNIQUE, btree (user_name, user_type)
"users_ldap_user_key" UNIQUE, btree (ldap_user, user_name) <- WRONG
Diffs
-----
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog260.java 79c021c369
ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog260Test.java 63e3840a5d
Diff: https://reviews.apache.org/r/62413/diff/2/
Testing (updated)
-------
tests on live cluster
mvn clean test
Thanks,
Dmitro Lisnichenko