-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/38269/#review98871
-----------------------------------------------------------


This looks good. Thank you for the contribution.
Please also include Nate Cole and Jonathan Hurley in the code review.


ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 
(line 190)
<https://reviews.apache.org/r/38269/#comment155504>

    If this is no longer used, can remove it.



ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
 (line 54)
<https://reviews.apache.org/r/38269/#comment155502>

    If this is no longer used, can remove it.



ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
 (line 2845)
<https://reviews.apache.org/r/38269/#comment155501>

    Can remove this.



ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
 (line 2867)
<https://reviews.apache.org/r/38269/#comment155505>

    Typo, has => have.
    Let's change the logging level to ERROR, and note that it was in the 
"applyLatestConfigurations" method.



ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
 (line 346)
<https://reviews.apache.org/r/38269/#comment155507>

    Please add some doc outlining the situation this is testing.


- Alejandro Fernandez


On Sept. 10, 2015, 9:37 p.m., Di Li wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/38269/
> -----------------------------------------------------------
> 
> (Updated Sept. 10, 2015, 9:37 p.m.)
> 
> 
> Review request for Ambari and Alejandro Fernandez.
> 
> 
> Bugs: AMBARI-12949
>     https://issues.apache.org/jira/browse/AMBARI-12949
> 
> 
> Repository: ambari
> 
> 
> Description
> -------
> 
> This seems to be an issue that happens when the "latest" configuration stored 
> in the "clusterconfig" table is for a conf group instead of the default 
> configurations. The named query 
> "ClusterConfigEntity.findLatestConfigsByStack" returns the latest 
> configuration to be set with "selected = 1" in the clusterconfigmapping 
> table. When the "latest" config is for a conf group, this record will not 
> have a corresponding entry in the clusterconfigmapping table. So the 
> clusterconfigmapping table is left with a type that does not have the 
> selected column set to 1.
> 
> My proposed fix is the new named query 
> "ClusterConfigEntity.findLatestConfigsOfClusterConfigMappingEntriesByStack" 
> in ClusterConfigEntity.java, which searches the clusterconfig table for the 
> latest version of a type_name and version_tag specified in the 
> clusterconfigmapping table. This is different from the current 
> "ClusterConfigEntity.findLatestConfigsByStack" query, which simply pulls the 
> latest config of a type_name from the clusterconfig table regardless whether 
> the corresponding version_tag is in the clusterconfigmapping table or not.
> 
> 
> Investigation:
> 
> I used Oozie for debugging.
> 
> When a user clicks the Downgrade button from the Finalize page. The request 
> eventually hits ClusterImpl.applyLatestConfigurations method where the Ambari 
> server updates the database to reverse back to the "latest" configuration of 
> each type for the older stack (HDP 2.2)
> 
> The workflow goes as
> 1. Set ALL entries in clusterconfigmapping table to have selected value set 
> to 0
> 2. Ambari server uses ClusterImpl.applyLatestConfigurations method to get the 
> "latest" configuration of each type for the older stack (HDP 2.2)
> 3. Loop through all the entries in the clusterconfigmapping table, and set 
> the selected to 1 if this entry also happens to be in the "latest" 
> configuration returned in step 2.
> 
> The ClusterImpl.applyLatestConfigurations method calls ClusterDAO.java 
> getLatestConfigurations to get the latest configuration for each type for the 
> older stack. The DAO class simply runs the following SQL query (cluster id 
> and stack id are the parameters) and passes the results back.
> 
> SELECT clusterConfig1 FROM clusterconfig clusterConfig1 WHERE 
> clusterConfig1.cluster_id='2' AND clusterConfig1.create_timestamp = (SELECT 
> MAX(clusterConfig2.create_timestamp) FROM clusterconfig clusterConfig2 WHERE 
> clusterConfig2.cluster_id='2' AND clusterConfig2.stack_id= '3' AND 
> clusterConfig2.type_name = clusterConfig1.type_name);
> 
> For downgrade, in our particular use case, the oozie-env configuration stored 
> in the clusterconfig table, when the stack id is the HDP 2.2 version, only 
> contains TWO conf, the original version1 and the one for the config group.
> 
> The query above will return the entry corresponding to the oozie config 
> group, as it was the last configuration entry added to the clusterconfig 
> table for oozie-site with stack id = 3. However, because the config group 
> entry is NEVER stored into the clusterconfigmapping table, the logic in 
> ClusterImpl.applyLatestConfigurations method to re-select a version for a 
> type in the clusterconfigmapping will not be able to update the 
> clusterconfigmapping table. Thus no oozie-site is set with selected = 1 in 
> the clusterconfigmapping table.
> 
> for( ClusterConfigEntity clusterConfigToMakeSelected : 
> clusterConfigsToMakeSelected ){
> LOG.info("Checking " + clusterConfigToMakeSelected.getType() + " with tag " + 
> clusterConfigToMakeSelected.getTag());
> for (ClusterConfigMappingEntity configMappingEntity : configMappingEntities) {
> String tag = configMappingEntity.getTag();
> String type = configMappingEntity.getType();
> 
> if (clusterConfigToMakeSelected.getTag().equals(tag)
> && clusterConfigToMakeSelected.getType().equals(type))
> { LOG.info(type + " with tag " + tag + " is selected"); 
> configMappingEntity.setSelected(1); }
> 
> }
> }
> 
> 
> Diffs
> -----
> 
>   
> ambari-server/src/main/java/org/apache/ambari/server/orm/dao/ClusterDAO.java 
> 6e55128 
>   
> ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ClusterConfigEntity.java
>  899ffe8 
>   
> ambari-server/src/main/java/org/apache/ambari/server/state/cluster/ClusterImpl.java
>  a48fb54 
>   
> ambari-server/src/test/java/org/apache/ambari/server/orm/dao/ServiceConfigDAOTest.java
>  4c186b5 
> 
> Diff: https://reviews.apache.org/r/38269/diff/
> 
> 
> Testing
> -------
> 
> unit test: added more test cases to ambari-server code
> test on a rolling upgrade then downgrade.
> 
> 
> Thanks,
> 
> Di Li
> 
>

Reply via email to