You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ambari.apache.org by "Jonathan Hurley (JIRA)" <ji...@apache.org> on 2017/02/16 20:52:41 UTC
[jira] [Created] (AMBARI-20053) Remove the clusterconfigmapping
Table
Jonathan Hurley created AMBARI-20053:
----------------------------------------
Summary: Remove the clusterconfigmapping Table
Key: AMBARI-20053
URL: https://issues.apache.org/jira/browse/AMBARI-20053
Project: Ambari
Issue Type: Epic
Components: ambari-server
Affects Versions: trunk
Reporter: Jonathan Hurley
Assignee: Jonathan Hurley
Priority: Critical
Fix For: trunk
The {{clusterconfigmapping}} table seems to serve no purpose any longer now that we track service versions via the {{serviceconfig}} table.
Take the following workflow:
- Create a new cluster; {{foo-site}} is created in {{clusterconfig}} at version 1 with tag {{INITIAL}}.
- Modify {{foo-site}}, creating a version 2. New entries are also created in both {{clusterconfig}} and {{clusterconfigmapping}}. The {{serviceconfig}} table updated to show v2.
- Revert back to v1 for the FOO service:
-- A new entry *is not* created in {{clusterconfig}} - in fact this table isn't touched.
-- A new entry *is* created in {{clusterconfigmapping}} which points to the original tag in {{clusterconfig}}
-- The {{serviceconfig}} table is updated to reflect v3, including the mappings back to the configs in {{clusterconfig}}.
In fact, it seems as though _nothing_ references {{clusterconfigmapping}}. There are two columns of interest in this table:
- {{selected}} - simply marks which config is active.
- {{user}} - the user who performed the action.
{{selected}} can be moved to {{clusterconfig}}, in addition to a new field to indicate the last time that a config was selected (for reversion of configurations). {{user}} is not used and the {{user}} column from the {{serviceconfig}} table can be used instead.
The proposal is to remove {{clusterconfigmapping}} entirely. When retrieving data from {{clusterconfig}}, the heavy columns which contain config data are lazily loaded from JPA, so there's no penalty for using this table as the source of truth for currently selected desired configs.
To Summarize:
- Remove the {{clusterconfigmapping}} table, which has redundant columns and causes nothing but headaches when it becomes out of sync with {{clusterconfig}}
- Change {{clusterconfig}} to track which configuration is selected and when the last time it was selected was
- Provide database upgrade scripts to convert existing databases
Some Thoughts:
- Configuration groups are problematic since they create configurations which are never "selected". They lack an entry in the {{clusterconfigmapping}} table. These new configurations can also can problems when applying the "latest" configurations from a stack since they would appear newer than other configurations. For this reason, we'll keep track of if/when a configuration was selected.
- The heavy fields on {{ClusterConfigEntity}} must remain lazily loaded. More documentation should be added to cover this.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)