Balázs Bence Sári created AMBARI-24888:
------------------------------------------
Summary: Fix SingleHostTopologyUpdater
Key: AMBARI-24888
URL: https://issues.apache.org/jira/browse/AMBARI-24888
Project: Ambari
Issue Type: Task
Components: ambari-server
Affects Versions: 2.7.1
Reporter: Balázs Bence Sári
Assignee: Balázs Bence Sári
Fix For: trunk
Newer Ambari installations often require clusters with partially installed
services (some required components missing). These clusters typically connect
to other clusters and use some of the services from the external cluster.
Ambari provides support for this by accepting blueprints with
{{validate_topology=false}} flag, however the support is incomplete as usually
exceptions are thrown later during the installation process with such
blueprints.
Most of the exceptions are thrown in the {{SingleHostTopologyUpdater}} class
which acts as a validator in addition to being a property updater.
The property update logic in {{SingleHostTopologyUpdater}} is the following:
* All {{SingleHostTopologyUpdater}} instances are associated with a component
(e.g. NAMENODE)
* first, it does {{%HOSTGROUP%}} token replacement by calling the supertclas's
method. *If this is successful, the replaced value is returned without any
validation* (even with invalid topology)
* if there is only one matching hostgroup for the updater's associated
component, *validation will be skipped too*. If the property's value contains
{{localhost}}, it will be replaced with the FQDN of one of the host from the
matching host groups.
* In all other cases, a validation process starts which tries to match a
sequence of valid cases with the actual topology. If one of the cases match,
the property will be returned unchanged. In none matches, an exception is
thrown.
As it can be seen above, the validation logic is not completely consistent.
There are cases where validation is bypassed. E.g. if the updater encounters a
{{%HOSTROUP%}} token, it will do the replacement even if the topology is broken
and the associated component is missing.
*Proposed solution*
Features:
* A general solution
* Still protects from accidentally broken topology
* Permits properties to point to external services
* Very easy to implement (just a few lines).
The proposed solution would simply leave the update logic in
{{SingleHostTopologyUpdater}} as is and would restrict validation for the cases
when the property contains {{localhost}}. This latter indicates that the
property has the stack default value.
This way, validation would still be performed in most cases when a component is
left out from the blueprint by mistake.
However, when a component is left out intentionally and the respective
properties are intentionally set to point to an external FQDN or set to empty
values, validation would be skipped.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)