You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by rl...@apache.org on 2017/06/14 21:19:32 UTC
[01/26] ambari git commit: AMBARI-21170. Upgrade Dialog Is Missing
the Version Information (alexantonenko)
Repository: ambari
Updated Branches:
refs/heads/branch-feature-AMBARI-20859 f09670d94 -> 5b9454ef4
AMBARI-21170. Upgrade Dialog Is Missing the Version Information (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4767389b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4767389b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4767389b
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 4767389b655cba8e6062f06d8390a1a22bf60e41
Parents: 9a42d40
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu Jun 1 17:04:36 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu Jun 1 17:04:36 2017 +0300
----------------------------------------------------------------------
ambari-web/app/messages.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4767389b/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 02a54f7..2f915ec 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1776,8 +1776,8 @@ Em.I18n.translations = {
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.allPassed.msg':'All checks passed',
'admin.stackVersions.version.upgrade.upgradeOptions.preCheck.failed.tooltip':'Option not available',
'admin.stackVersions.version.upgrade.upgradeOptions.notAllowed':'Not allowed by the current version',
- 'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> to <b>{1}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
- 'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> to <b>{1}</b>. Are you sure you want to proceed?',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.EU.confirm.msg': 'You are about to perform an <b>Express Upgrade</b> to <b>{0}</b>. This will incur cluster downtime. Are you sure you want to proceed?',
+ 'admin.stackVersions.version.upgrade.upgradeOptions.RU.confirm.msg': 'You are about to perform a <b>Rolling Upgrade</b> to <b>{0}</b>. Are you sure you want to proceed?',
'admin.stackVersions.version.upgrade.upgradeOptions.error': 'Could not proceed with upgrade:',
'admin.stackVersions.version.upgrade.upgradeOptions.loading': 'Checking for supported upgrade types...',
[07/26] ambari git commit: AMBARI-21188 - Configuration Symlink Is
Incorrect After Stack Distribution (jonathanhurley)
Posted by rl...@apache.org.
AMBARI-21188 - Configuration Symlink Is Incorrect After Stack Distribution (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7750c9a4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7750c9a4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7750c9a4
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 7750c9a4672e692f6389698698335596d8bf4925
Parents: 5a1bd71
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Tue Jun 6 14:42:20 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Tue Jun 6 14:42:20 2017 -0400
----------------------------------------------------------------------
.../libraries/functions/conf_select.py | 1 -
.../custom_actions/scripts/install_packages.py | 17 +++++------------
2 files changed, 5 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/7750c9a4/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
index facf186..3e01cf6 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
@@ -26,7 +26,6 @@ import os
import subprocess
# Local Imports
-import version
import stack_select
from resource_management.core import shell
from resource_management.libraries.functions.format import format
http://git-wip-us.apache.org/repos/asf/ambari/blob/7750c9a4/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index c12dff1..d6da0fc 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -197,18 +197,11 @@ class InstallPackages(Script):
return
for package_name, directories in conf_select.get_package_dirs().iteritems():
- # if already on HDP 2.3, then we should skip making conf.backup folders
- if self.current_stack_version_formatted and check_stack_feature(StackFeature.CONFIG_VERSIONING, self.current_stack_version_formatted):
- conf_selector_name = stack_tools.get_stack_tool_name(stack_tools.CONF_SELECTOR_NAME)
- Logger.info("The current cluster stack of {0} does not require backing up configurations; "
- "only {1} versioned config directories will be created.".format(stack_version, conf_selector_name))
- # only link configs for all known packages
- conf_select.select(self.stack_name, package_name, stack_version, ignore_errors = True)
- else:
- # link configs and create conf.backup folders for all known packages
- # this will also call conf-select select
- conf_select.convert_conf_directories_to_symlinks(package_name, stack_version, directories,
- skip_existing_links = False, link_to = "backup")
+ conf_selector_name = stack_tools.get_stack_tool_name(stack_tools.CONF_SELECTOR_NAME)
+ Logger.info("The current cluster stack of {0} does not require backing up configurations; "
+ "only {1} versioned config directories will be created.".format(stack_version, conf_selector_name))
+ # only link configs for all known packages
+ conf_select.select(self.stack_name, package_name, stack_version, ignore_errors = True)
def compute_actual_version(self):
[19/26] ambari git commit: AMBARI-21233. ambari-web hits JS error in
dev mode (alexantonenko)
Posted by rl...@apache.org.
AMBARI-21233. ambari-web hits JS error in dev mode (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f80c6ee4
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f80c6ee4
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f80c6ee4
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f80c6ee45b5c6708aa9db98b9afe7ebbeba2afe7
Parents: fc00b2c
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue Jun 13 15:33:14 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Jun 13 15:33:14 2017 +0300
----------------------------------------------------------------------
ambari-web/app/controllers/global/cluster_controller.js | 2 +-
ambari-web/app/controllers/global/user_settings_controller.js | 3 +++
ambari-web/app/mappers/repository_version_mapper.js | 2 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
ambari-web/app/views/main/dashboard/widgets.js | 2 +-
ambari-web/test/controllers/wizard/step8_test.js | 4 ++--
ambari-web/test/views/main/dashboard/widgets_test.js | 4 ++--
7 files changed, 11 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/controllers/global/cluster_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js
index 29c979e..e68f281 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -144,7 +144,7 @@ App.ClusterController = Em.Controller.extend(App.ReloadPopupMixin, {
setServerClock: function (data) {
var clientClock = new Date().getTime();
- var serverClock = (data.RootServiceComponents.server_clock).toString();
+ var serverClock = (Em.getWithDefault(data, 'RootServiceComponents.server_clock', '')).toString();
serverClock = serverClock.length < 13 ? serverClock + '000' : serverClock;
App.set('clockDistance', serverClock - clientClock);
App.set('currentServerTime', parseInt(serverClock));
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/controllers/global/user_settings_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/user_settings_controller.js b/ambari-web/app/controllers/global/user_settings_controller.js
index 68d7e65..f2542bd 100644
--- a/ambari-web/app/controllers/global/user_settings_controller.js
+++ b/ambari-web/app/controllers/global/user_settings_controller.js
@@ -119,6 +119,9 @@ App.UserSettingsController = Em.Controller.extend(App.Persist, {
var userSettings = {};
var self = this;
this.dataLoading().done(function (json) {
+ if (!json) {
+ return;
+ }
Object.keys(userSettingsKeys).forEach(function (k) {
var value = userSettingsKeys[k].defaultValue;
if (undefined === json[userSettingsKeys[k].name]) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/mappers/repository_version_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/repository_version_mapper.js b/ambari-web/app/mappers/repository_version_mapper.js
index 8ef50db..f4858ba 100644
--- a/ambari-web/app/mappers/repository_version_mapper.js
+++ b/ambari-web/app/mappers/repository_version_mapper.js
@@ -145,7 +145,7 @@ App.repoVersionMapper = App.QuickDataMapper.create({
resultService.push(this.parseIt(serviceObj, this.get('modelService')));
}, this);
}
- repo.use_redhat_satellite = item.operating_systems[0].OperatingSystems.ambari_managed_repositories === false;
+ repo.use_redhat_satellite = Em.get(item, 'operating_systems.0.OperatingSystems.ambari_managed_repositories') === false;
repo.operating_systems = osArray;
repo.stack_services = serviceArray;
resultRepoVersion.push(this.parseIt(repo, this.modelRepoVersion(isCurrentStackOnly)));
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index c595181..5919091 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -3101,7 +3101,7 @@ var ajax = Em.Object.extend({
MAX_GET_URL_LENGTH: 2048,
consoleMsg: function(name, url) {
- return Em.I18n.t('app.logger.ajax').format(name, url.substr(7, 100));
+ return Em.I18n.t('app.logger.ajax').format(name, url ? url.substr(7, 100) : '');
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/app/views/main/dashboard/widgets.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/dashboard/widgets.js b/ambari-web/app/views/main/dashboard/widgets.js
index 2850200..ec10eae 100644
--- a/ambari-web/app/views/main/dashboard/widgets.js
+++ b/ambari-web/app/views/main/dashboard/widgets.js
@@ -157,7 +157,7 @@ App.MainDashboardWidgetsView = Em.View.extend(App.Persist, App.LocalStorage, App
},
resolveConfigDependencies: function(widgetsDefinition) {
- var clusterEnv = App.router.get('clusterController.clusterEnv').properties;
+ var clusterEnv = App.router.get('clusterController.clusterEnv.properties') || {};
if (clusterEnv.hide_yarn_memory_widget === 'true') {
widgetsDefinition.findProperty('id', 20).isHiddenByDefault = true;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/test/controllers/wizard/step8_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/wizard/step8_test.js b/ambari-web/test/controllers/wizard/step8_test.js
index 92668ff..29e6ae4 100644
--- a/ambari-web/test/controllers/wizard/step8_test.js
+++ b/ambari-web/test/controllers/wizard/step8_test.js
@@ -2342,7 +2342,7 @@ describe('App.WizardStep8Controller', function () {
describe('#generateBlueprint', function () {
beforeEach(function () {
- var configs = Em.A([
+ var configsForTest = Em.A([
Em.Object.create({filename: 'cluster-env.xml', name: 'p0', value: 'v0'}),
Em.Object.create({filename: 'site1.xml', name: 'p11', value: 'v11'}),
Em.Object.create({filename: 'site1.xml', name: 'p12', value: 'v12'}),
@@ -2376,7 +2376,7 @@ describe('App.WizardStep8Controller', function () {
]);
installerStep8Controller = getController();
- installerStep8Controller.set('configs', configs);
+ installerStep8Controller.set('configs', configsForTest);
installerStep8Controller.set('allHosts', hosts);
installerStep8Controller.set('content.services', services.filterProperty('isSelected'));
installerStep8Controller.set('content.hosts', hosts);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f80c6ee4/ambari-web/test/views/main/dashboard/widgets_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/dashboard/widgets_test.js b/ambari-web/test/views/main/dashboard/widgets_test.js
index 6e8a6eb..08269b5 100644
--- a/ambari-web/test/views/main/dashboard/widgets_test.js
+++ b/ambari-web/test/views/main/dashboard/widgets_test.js
@@ -211,14 +211,14 @@ describe('App.MainDashboardWidgetsView', function () {
it('isHiddenByDefault should be undefined', function() {
var widgets = [{id: 20}];
- this.mock.returns({properties: {'hide_yarn_memory_widget': 'false'}});
+ this.mock.returns({'hide_yarn_memory_widget': 'false'});
view.resolveConfigDependencies(widgets);
expect(widgets[0].isHiddenByDefault).to.be.undefined;
});
it('isHiddenByDefault should be true', function() {
var widgets = [{id: 20}];
- this.mock.returns({properties: {'hide_yarn_memory_widget': 'true'}});
+ this.mock.returns({'hide_yarn_memory_widget': 'true'});
view.resolveConfigDependencies(widgets);
expect(widgets[0].isHiddenByDefault).to.be.true;
});
[21/26] ambari git commit: Updated team page. (yusaku)
Posted by rl...@apache.org.
Updated team page. (yusaku)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/df685b92
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/df685b92
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/df685b92
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: df685b92d9c99f55757dc36858653130eaddf30c
Parents: 31ac3c2
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Tue Jun 13 13:36:33 2017 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Tue Jun 13 13:36:33 2017 -0700
----------------------------------------------------------------------
docs/pom.xml | 12 ++++++++++++
1 file changed, 12 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/df685b92/docs/pom.xml
----------------------------------------------------------------------
diff --git a/docs/pom.xml b/docs/pom.xml
index 95478e4..e936c0d 100644
--- a/docs/pom.xml
+++ b/docs/pom.xml
@@ -458,6 +458,18 @@
</organization>
</developer>
<developer>
+ <id>hapylestat</id>
+ <name>Dmytro Grinenko</name>
+ <email>hapylestat@apache.org</email>
+ <timezone>+2</timezone>
+ <roles>
+ <role>Committer</role>
+ </roles>
+ <organization>
+ Hortonworks
+ </organization>
+ </developer>
+ <developer>
<id>hitesh</id>
<name>Hitesh Shah</name>
<email>hitesh@apache.org</email>
[02/26] ambari git commit: AMBARI-21175 - Host Versions Remain on
CURRENT During STANDARD (Full) Upgrades (jonathanhurley)
Posted by rl...@apache.org.
AMBARI-21175 - Host Versions Remain on CURRENT During STANDARD (Full) Upgrades (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/7847e4b6
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/7847e4b6
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/7847e4b6
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 7847e4b6cf65b777e516a4806cbf5f45cdd207ee
Parents: 4767389
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Jun 2 08:28:51 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Jun 2 10:30:06 2017 -0400
----------------------------------------------------------------------
.../ambari/server/orm/dao/HostVersionDAO.java | 16 +++
.../server/orm/entities/HostVersionEntity.java | 5 +
.../upgrades/FinalizeUpgradeAction.java | 57 ++++++++--
.../upgrades/UpgradeActionTest.java | 109 +++++++++++++++++--
4 files changed, 164 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
index ad34ec7..7be7691 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
@@ -130,6 +130,22 @@ public class HostVersionDAO extends CrudDAO<HostVersionEntity, Long> {
}
/**
+ * Retrieve all of the host versions for the given cluster name, and state. <br/>
+ * @param clusterName Cluster name
+ * @param state repository version state
+ * @return Return all of the host versions that match the criteria.
+ */
+ @RequiresSession
+ public List<HostVersionEntity> findByClusterAndState(String clusterName, RepositoryVersionState state) {
+ final TypedQuery<HostVersionEntity> query = entityManagerProvider.get()
+ .createNamedQuery("findByClusterAndState", HostVersionEntity.class);
+ query.setParameter("clusterName", clusterName);
+ query.setParameter("state", state);
+
+ return daoUtils.selectList(query);
+ }
+
+ /**
* Retrieve all of the host versions for the given cluster name, host name, and state. <br/>
* @param clusterName Cluster name
* @param hostName FQDN of host
http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
index dbe4fe0..4a030af 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostVersionEntity.java
@@ -61,6 +61,11 @@ import org.apache.ambari.server.state.RepositoryVersionState;
"SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host " +
"WHERE hostVersion.hostEntity.hostName=:hostName"),
+ @NamedQuery(
+ name = "findByClusterAndState",
+ query = "SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters "
+ + "WHERE clusters.clusterName=:clusterName AND hostVersion.state=:state"),
+
@NamedQuery(name = "hostVersionByClusterHostnameAndState", query =
"SELECT hostVersion FROM HostVersionEntity hostVersion JOIN hostVersion.hostEntity host JOIN host.clusterEntities clusters " +
"WHERE clusters.clusterName=:clusterName AND hostVersion.hostEntity.hostName=:hostName AND hostVersion.state=:state"),
http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
index 475a8c9..8f206bf 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
@@ -140,8 +140,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
throw new AmbariException(messageBuff.toString());
}
- // for all hosts participating in this upgrade, update thei repository
- // versions and upgrade state
+ // find every host version for this upgrade and ensure it has transitioned
+ // to CURRENT if required
List<HostVersionEntity> hostVersions = hostVersionDAO.findHostVersionByClusterAndRepository(
cluster.getClusterId(), repositoryVersion);
@@ -165,7 +165,8 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
}
- // throw an exception if there are hosts which are not not fully upgraded
+ // throw an exception if there are hosts which did not transition the
+ // repository to CURRENT
if (hostsWithoutCorrectVersionState.size() > 0) {
message = String.format(
"The following %d host(s) have not been upgraded to version %s. "
@@ -178,10 +179,11 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
outSB.append(
- String.format("Finalizing the upgrade state of %d host(s).",
+ String.format("Finalizing the upgrade state and repository version for %d host(s).",
hostVersionsAllowed.size())).append(System.lineSeparator());
- // Reset the upgrade state
+ // at this point, all host versions are correct - do some cleanup like
+ // resetting the upgrade state
for (HostVersionEntity hostVersion : hostVersionsAllowed) {
Collection<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(hostVersion.getHostName());
for (HostComponentStateEntity hostComponentStateEntity: hostComponentStates) {
@@ -190,16 +192,16 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
}
}
- // Impacts all hosts that have a version
- outSB.append(
- String.format("Finalizing the version for %d host(s).",
- hostVersionsAllowed.size())).append(System.lineSeparator());
-
- versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
+ // move host versions from CURRENT to INSTALLED if their repos are no
+ // longer used
+ finalizeHostRepositoryVersions(cluster);
// Reset upgrade state
cluster.setUpgradeEntity(null);
+ // the upgrade is done!
+ versionEventPublisher.publish(new StackUpgradeFinishEvent(cluster));
+
message = String.format("The upgrade to %s has completed.", version);
outSB.append(message).append(System.lineSeparator());
return createCommandReport(0, HostRoleStatus.COMPLETED, "{}", outSB.toString(), errSB.toString());
@@ -372,6 +374,39 @@ public class FinalizeUpgradeAction extends AbstractUpgradeServerAction {
return errors;
}
+ /**
+ * Moves any {@link HostVersionEntity}s which are
+ * {@link RepositoryVersionState#CURRENT} to either
+ * {@link RepositoryVersionState#INSTALLED} or
+ * {@link RepositoryVersionState#NOT_REQUIRED} if their assocaited
+ * repositories are no longer in use.
+ *
+ * @param cluster
+ * @throws AmbariException
+ */
+ private void finalizeHostRepositoryVersions(Cluster cluster) throws AmbariException {
+ // create a set of all of the repos that the services are on
+ Set<RepositoryVersionEntity> desiredRepoVersions = new HashSet<>();
+ Set<String> serviceNames = cluster.getServices().keySet();
+ for (String serviceName : serviceNames) {
+ Service service = cluster.getService(serviceName);
+ desiredRepoVersions.add(service.getDesiredRepositoryVersion());
+ }
+
+ // if any CURRENT host version is for a repo which is no longer desired by
+ // ANY service, move it to INSTALLED
+ List<HostVersionEntity> currentHostVersions = hostVersionDAO.findByClusterAndState(
+ cluster.getClusterName(), RepositoryVersionState.CURRENT);
+
+ for (HostVersionEntity hostVersion : currentHostVersions) {
+ RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+ if (!desiredRepoVersions.contains(hostRepoVersion)) {
+ hostVersion.setState(RepositoryVersionState.INSTALLED);
+ hostVersion = hostVersionDAO.merge(hostVersion);
+ }
+ }
+ }
+
protected static class InfoTuple implements Comparable<InfoTuple> {
protected final String serviceName;
protected final String componentName;
http://git-wip-us.apache.org/repos/asf/ambari/blob/7847e4b6/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index 35fffda..e3ffae0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -100,7 +100,6 @@ public class UpgradeActionTest {
private static final String HDP_2_1_1_1 = "2.1.1.1-2";
private static final String HDP_2_2_0_1 = "2.2.0.1-3";
- private static final String HDP_2_2_0_2 = "2.2.0.2-4";
private static final StackId HDP_21_STACK = new StackId("HDP-2.1.1");
private static final StackId HDP_22_STACK = new StackId("HDP-2.2.0");
@@ -147,7 +146,6 @@ public class UpgradeActionTest {
private RepositoryVersionEntity repositoryVersion2110;
private RepositoryVersionEntity repositoryVersion2111;
private RepositoryVersionEntity repositoryVersion2201;
- private RepositoryVersionEntity repositoryVersion2202;
@Before
public void setup() throws Exception {
@@ -167,7 +165,6 @@ public class UpgradeActionTest {
repositoryVersion2110 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_0);
repositoryVersion2111 = m_helper.getOrCreateRepositoryVersion(HDP_21_STACK, HDP_2_1_1_1);
repositoryVersion2201 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_1);
- repositoryVersion2202 = m_helper.getOrCreateRepositoryVersion(HDP_22_STACK, HDP_2_2_0_2);
}
@After
@@ -199,11 +196,11 @@ public class UpgradeActionTest {
hostVersionDAO.create(entity);
}
- private void createUpgradeCluster(
+ private Cluster createUpgradeCluster(
RepositoryVersionEntity sourceRepoVersion, String hostName) throws Exception {
clusters.addCluster(clusterName, sourceRepoVersion.getStackId());
- Cluster c = clusters.getCluster(clusterName);
+ Cluster cluster = clusters.getCluster(clusterName);
// add a host component
clusters.addHost(hostName);
@@ -222,6 +219,8 @@ public class UpgradeActionTest {
sourceRepoVersion, RepositoryVersionState.INSTALLED);
hostVersionDAO.create(entity);
+
+ return cluster;
}
private void createHostVersions(RepositoryVersionEntity targetRepoVersion,
@@ -313,13 +312,13 @@ public class UpgradeActionTest {
Cluster cluster = clusters.getCluster(clusterName);
// Install ZK and HDFS with some components
- Service zk = installService(cluster, "ZOOKEEPER");
+ Service zk = installService(cluster, "ZOOKEEPER", repositoryVersion2110);
addServiceComponent(cluster, zk, "ZOOKEEPER_SERVER");
addServiceComponent(cluster, zk, "ZOOKEEPER_CLIENT");
createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_SERVER", "h1");
createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_CLIENT", "h1");
- Service hdfs = installService(cluster, "HDFS");
+ Service hdfs = installService(cluster, "HDFS", repositoryVersion2110);
addServiceComponent(cluster, hdfs, "NAMENODE");
addServiceComponent(cluster, hdfs, "DATANODE");
createNewServiceComponentHost(cluster, "HDFS", "NAMENODE", "h1");
@@ -393,7 +392,7 @@ public class UpgradeActionTest {
for (HostVersionEntity entity : hostVersionDAO.findByClusterAndHost(clusterName, "h1")) {
if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2110.getVersion())) {
assertEquals(RepositoryVersionState.CURRENT, entity.getState());
- } else if (StringUtils.equals(entity.getRepositoryVersion().getVersion(), repositoryVersion2111.getVersion())) {
+ } else {
assertEquals(RepositoryVersionState.INSTALLED, entity.getState());
}
}
@@ -497,10 +496,95 @@ public class UpgradeActionTest {
assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
}
+ /**
+ * Tests that all host versions are correct after upgrade. This test will
+ * ensure that the prior CURRENT versions are moved to INSTALLED while not
+ * touching any others.
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testHostVersionsAfterUpgrade() throws Exception {
+ String hostName = "h1";
+ Cluster cluster = createUpgradeCluster(repositoryVersion2110, hostName);
+ createHostVersions(repositoryVersion2111, hostName);
+ createHostVersions(repositoryVersion2201, hostName);
+
+ // Install ZK with some components
+ Service zk = installService(cluster, "ZOOKEEPER", repositoryVersion2110);
+ addServiceComponent(cluster, zk, "ZOOKEEPER_SERVER");
+ addServiceComponent(cluster, zk, "ZOOKEEPER_CLIENT");
+ createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_SERVER", hostName);
+ createNewServiceComponentHost(cluster, "ZOOKEEPER", "ZOOKEEPER_CLIENT", hostName);
+
+ List<HostVersionEntity> hostVersions = hostVersionDAO.findAll();
+ assertEquals(3, hostVersions.size());
+
+ // repo 2110 - CURRENT (upgrading from)
+ // repo 2111 - CURRENT (all hosts reported in during upgrade)
+ // repo 2201 - NOT_REQUIRED (different stack)
+ for (HostVersionEntity hostVersion : hostVersions) {
+ RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+ if (repositoryVersion2110.equals(hostRepoVersion)) {
+ hostVersion.setState(RepositoryVersionState.CURRENT);
+ } else if (repositoryVersion2111.equals(hostRepoVersion)) {
+ hostVersion.setState(RepositoryVersionState.CURRENT);
+ } else {
+ hostVersion.setState(RepositoryVersionState.NOT_REQUIRED);
+ }
+
+ hostVersionDAO.merge(hostVersion);
+ }
+
+ // upgrade to 2111
+ createUpgrade(cluster, repositoryVersion2111);
+
+ // push all services to the correct repo version for finalize
+ Map<String, Service> services = cluster.getServices();
+ assertTrue(services.size() > 0);
+ for (Service service : services.values()) {
+ service.setDesiredRepositoryVersion(repositoryVersion2111);
+ }
+
+ // push all components to the correct version
+ List<HostComponentStateEntity> hostComponentStates = hostComponentStateDAO.findByHost(hostName);
+ for (HostComponentStateEntity hostComponentState : hostComponentStates) {
+ hostComponentState.setVersion(repositoryVersion2111.getVersion());
+ hostComponentStateDAO.merge(hostComponentState);
+ }
+
+ Map<String, String> commandParams = new HashMap<>();
+ ExecutionCommand executionCommand = new ExecutionCommand();
+ executionCommand.setCommandParams(commandParams);
+ executionCommand.setClusterName(clusterName);
+
+ HostRoleCommand hostRoleCommand = hostRoleCommandFactory.create(null, null, null, null);
+ hostRoleCommand.setExecutionCommandWrapper(new ExecutionCommandWrapper(executionCommand));
+
+ finalizeUpgradeAction.setExecutionCommand(executionCommand);
+ finalizeUpgradeAction.setHostRoleCommand(hostRoleCommand);
+
+ // finalize
+ CommandReport report = finalizeUpgradeAction.execute(null);
+ assertNotNull(report);
+ assertEquals(HostRoleStatus.COMPLETED.name(), report.getStatus());
+
+ for (HostVersionEntity hostVersion : hostVersions) {
+ RepositoryVersionEntity hostRepoVersion = hostVersion.getRepositoryVersion();
+ if (repositoryVersion2110.equals(hostRepoVersion)) {
+ assertEquals(RepositoryVersionState.INSTALLED, hostVersion.getState());
+ } else if (repositoryVersion2111.equals(hostRepoVersion)) {
+ assertEquals(RepositoryVersionState.CURRENT, hostVersion.getState());
+ } else {
+ assertEquals(RepositoryVersionState.NOT_REQUIRED, hostVersion.getState());
+ }
+ }
+ }
+
private ServiceComponentHost createNewServiceComponentHost(Cluster cluster, String svc,
String svcComponent, String hostName) throws AmbariException {
Assert.assertNotNull(cluster.getConfigGroups());
- Service s = installService(cluster, svc);
+ Service s = installService(cluster, svc, sourceRepositoryVersion);
ServiceComponent sc = addServiceComponent(cluster, s, svcComponent);
ServiceComponentHost sch = serviceComponentHostFactory.createNew(sc, hostName);
@@ -511,13 +595,14 @@ public class UpgradeActionTest {
return sch;
}
- private Service installService(Cluster cluster, String serviceName) throws AmbariException {
+ private Service installService(Cluster cluster, String serviceName,
+ RepositoryVersionEntity repositoryVersionEntity) throws AmbariException {
Service service = null;
try {
service = cluster.getService(serviceName);
} catch (ServiceNotFoundException e) {
- service = serviceFactory.createNew(cluster, serviceName, sourceRepositoryVersion);
+ service = serviceFactory.createNew(cluster, serviceName, repositoryVersionEntity);
cluster.addService(service);
}
@@ -525,7 +610,7 @@ public class UpgradeActionTest {
}
private ServiceComponent addServiceComponent(Cluster cluster, Service service,
- String componentName) throws AmbariException {
+ String componentName) throws AmbariException {
ServiceComponent serviceComponent = null;
try {
serviceComponent = service.getServiceComponent(componentName);
[22/26] ambari git commit: AMBARI-21226. Add two new Spark thrift
server related configurations in Spark stack (Saisai Shao via smohanty)
Posted by rl...@apache.org.
AMBARI-21226. Add two new Spark thrift server related configurations in Spark stack (Saisai Shao via smohanty)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/24e2cacb
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/24e2cacb
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/24e2cacb
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 24e2cacb8ede081824b9162ba124acdffa33e0ec
Parents: df685b9
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Tue Jun 13 19:57:06 2017 -0700
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Tue Jun 13 19:57:12 2017 -0700
----------------------------------------------------------------------
.../configuration/spark-thrift-sparkconf.xml | 40 ++++++++++++++++++++
.../configuration/spark2-thrift-sparkconf.xml | 40 ++++++++++++++++++++
.../stacks/HDP/2.6/upgrades/config-upgrade.xml | 24 ++++++++++++
.../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 26 +++++++++----
.../stacks/HDP/2.6/upgrades/upgrade-2.6.xml | 32 ++++++++++------
5 files changed, 142 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
new file mode 100644
index 0000000..001ef1e
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK/configuration/spark-thrift-sparkconf.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<configuration supports_final="true">
+ <property>
+ <name>spark.yarn.executor.failuresValidityInterval</name>
+ <value>2h</value>
+ <description>
+ Defines the validity interval for executor failure tracking.
+ Executor failures which are older than the validity interval will be ignored.
+ </description>
+ <on-ambari-upgrade add="false"/>
+ </property>
+ <property>
+ <name>spark.yarn.maxAppAttempts</name>
+ <value>1</value>
+ <description>
+ The maximum number of attempts that will be made to submit the application.
+ It should be no larger than the global number of max attempts in the YARN configuration.
+ </description>
+ <on-ambari-upgrade add="false"/>
+ </property>
+</configuration>
http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
new file mode 100644
index 0000000..001ef1e
--- /dev/null
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/SPARK2/configuration/spark2-thrift-sparkconf.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+-->
+<configuration supports_final="true">
+ <property>
+ <name>spark.yarn.executor.failuresValidityInterval</name>
+ <value>2h</value>
+ <description>
+ Defines the validity interval for executor failure tracking.
+ Executor failures which are older than the validity interval will be ignored.
+ </description>
+ <on-ambari-upgrade add="false"/>
+ </property>
+ <property>
+ <name>spark.yarn.maxAppAttempts</name>
+ <value>1</value>
+ <description>
+ The maximum number of attempts that will be made to submit the application.
+ It should be no larger than the global number of max attempts in the YARN configuration.
+ </description>
+ <on-ambari-upgrade add="false"/>
+ </property>
+</configuration>
http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
index 1610bb5..564dead 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/config-upgrade.xml
@@ -168,5 +168,29 @@
</component>
</service>
+ <service name="SPARK">
+ <component name="SPARK_THRIFTSERVER">
+ <changes>
+ <definition xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver">
+ <type>spark-thrift-sparkconf</type>
+ <set key="spark.yarn.executor.failuresValidityInterval" value="2h"/>
+ <set key="spark.yarn.maxAppAttempts" value="1"/>
+ </definition>
+ </changes>
+ </component>
+ </service>
+
+ <service name="SPARK2">
+ <component name="SPARK2_THRIFTSERVER">
+ <changes>
+ <definition xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver">
+ <type>spark2-thrift-sparkconf</type>
+ <set key="spark.yarn.executor.failuresValidityInterval" value="2h"/>
+ <set key="spark.yarn.maxAppAttempts" value="1"/>
+ </definition>
+ </changes>
+ </component>
+ </service>
+
</services>
</upgrade-config-changes>
http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
index 1cdd184..6b827c9 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml
@@ -75,7 +75,7 @@
<service name="FLUME">
<component>FLUME_HANDLER</component>
</service>
-
+
<service name="ACCUMULO">
<component>ACCUMULO_TRACER</component>
<component>ACCUMULO_GC</component>
@@ -284,7 +284,7 @@
</execute-stage>
</group>
-
+
<group xsi:type="cluster" name="Upgrade service configs" title="Upgrade service configs">
<direction>UPGRADE</direction> <!-- prevent config changes on downgrade -->
<skippable>true</skippable> <!-- May fix configuration problems manually -->
@@ -322,7 +322,7 @@
<execute-stage service="YARN" component="RESOURCEMANAGER" title="Apply config changes for Ranger Yarn plugin">
<task xsi:type="configure" id="hdp_2_6_maint_ranger_yarn_plugin_cluster_name"/>
</execute-stage>
-
+
<execute-stage service="YARN" component="RESOURCEMANAGER" title="Apply config changes for YARN Preemption">
<task xsi:type="configure" id="hdp_2_6_yarn_preemption"/>
</execute-stage>
@@ -353,8 +353,18 @@
<task xsi:type="configure" id="hdp_2_6_maint_ranger_kms_plugin_cluster_name"/>
</execute-stage>
+ <!--SPARK-->
+ <execute-stage service="SPARK" component="SPARK_THRIFTSERVER" title="Apply config changes for Spark ThriftServer">
+ <task xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver"/>
+ </execute-stage>
+
+ <!--SPARK2-->
+ <execute-stage service="SPARK2" component="SPARK2_THRIFTSERVER" title="Apply config changes for Spark2 ThriftServer">
+ <task xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver"/>
+ </execute-stage>
+
</group>
-
+
<!--
After processing this group, the user-specified Kerberos descriptor will be updated to work with
@@ -383,7 +393,7 @@
</task>
</execute-stage>
</group>
-
+
<!-- Now, restart all of the services. -->
<group xsi:type="restart" name="ZOOKEEPER" title="ZooKeeper">
<service-check>false</service-check>
@@ -747,7 +757,7 @@
<component>FLUME_HANDLER</component>
</service>
</group>
-
+
<group xsi:type="restart" name="ACCUMULO" title="Accumulo">
<service-check>false</service-check>
<skippable>true</skippable>
@@ -790,7 +800,7 @@
<group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
<direction>UPGRADE</direction>
-
+
<execute-stage title="Check Component Versions">
<task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
</execute-stage>
@@ -870,7 +880,7 @@
<function>setup_ranger_java_patches</function>
</task>
</pre-upgrade>
-
+
<pre-downgrade copy-upgrade="true" />
<upgrade>
http://git-wip-us.apache.org/repos/asf/ambari/blob/24e2cacb/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
index 3e7e3d7..9227669 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/upgrades/upgrade-2.6.xml
@@ -168,7 +168,7 @@
<component>HBASE_MASTER</component>
</service>
</group>
-
+
<group name="SERVICE_CHECK_1" title="All Service Checks" xsi:type="service-check">
<direction>UPGRADE</direction>
<skippable>true</skippable>
@@ -184,7 +184,7 @@
<service>LOGSEARCH</service>
</exclude>
</group>
-
+
<group name="CORE_SLAVES" title="Core Slaves" xsi:type="colocated">
<service-check>false</service-check>
<skippable>true</skippable>
@@ -192,7 +192,7 @@
<component>DATANODE</component>
<component>NFS_GATEWAY</component>
</service>
-
+
<service name="HBASE">
<component>HBASE_REGIONSERVER</component>
<component>PHOENIX_QUERY_SERVER</component>
@@ -208,7 +208,7 @@
<message>The initial batch of {{components}} hosts have been {{direction.past}}. You are advised to check the hosts and perform cluster/workload-specific tests against your cluster to ensure proper operation before proceeding with {{direction.text}} of the remaining services.</message>
</batch>
</group>
-
+
<group name="SERVICE_CHECK_2" title="All Service Checks" xsi:type="service-check">
<direction>UPGRADE</direction>
<skippable>true</skippable>
@@ -460,7 +460,7 @@
<group xsi:type="cluster" name="FINALIZE_PRE_CHECK" title="Finalize {{direction.text.proper}} Pre-Check">
<direction>UPGRADE</direction>
-
+
<execute-stage title="Check Component Versions">
<task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.ComponentVersionCheckAction" />
</execute-stage>
@@ -469,7 +469,7 @@
<group xsi:type="cluster" name="POST_CLUSTER" title="Finalize {{direction.text.proper}}">
<skippable>true</skippable>
<supports-auto-skip-failure>false</supports-auto-skip-failure>
-
+
<execute-stage title="Confirm Finalize">
<direction>UPGRADE</direction>
<task xsi:type="manual">
@@ -493,7 +493,7 @@
<function>finalize_rolling_upgrade</function>
</task>
</execute-stage>
-
+
<execute-stage title="Save Cluster State">
<task xsi:type="server_action" class="org.apache.ambari.server.serveraction.upgrades.FinalizeUpgradeAction">
</task>
@@ -544,7 +544,7 @@
<function>setup_ranger_java_patches</function>
</task>
</pre-upgrade>
-
+
<pre-downgrade copy-upgrade="true" />
<upgrade>
@@ -645,7 +645,7 @@
</upgrade>
</component>
</service>
-
+
<service name="SLIDER">
<component name="SLIDER">
<upgrade>
@@ -667,7 +667,7 @@
<summary>Verifying LZO codec path for mapreduce</summary>
</task>
</pre-upgrade>
-
+
<pre-downgrade copy-upgrade="true" />
<upgrade>
@@ -748,9 +748,9 @@
<summary>Verifying LZO codec path for Tez</summary>
</task>
</pre-upgrade>
-
+
<pre-downgrade copy-upgrade="true" />
-
+
<upgrade>
<task xsi:type="restart-task" />
</upgrade>
@@ -830,6 +830,10 @@
</upgrade>
</component>
<component name="SPARK_THRIFTSERVER">
+ <pre-upgrade>
+ <task xsi:type="configure" id="hdp_2_6_0_0_spark_thriftserver"/>
+ </pre-upgrade>
+ <pre-downgrade />
<upgrade>
<task xsi:type="restart-task" />
</upgrade>
@@ -853,6 +857,10 @@
</upgrade>
</component>
<component name="SPARK2_THRIFTSERVER">
+ <pre-upgrade>
+ <task xsi:type="configure" id="hdp_2_6_0_0_spark2_thriftserver"/>
+ </pre-upgrade>
+ <pre-downgrade />
<upgrade>
<task xsi:type="restart-task" />
</upgrade>
[24/26] ambari git commit: AMBARI-21238. Kafka userprincipal to
shortname is not using AUTH_TO_LOCAL rules for authorization (echekanskiy)
Posted by rl...@apache.org.
AMBARI-21238. Kafka userprincipal to shortname is not using AUTH_TO_LOCAL rules for authorization (echekanskiy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f1e89e4d
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f1e89e4d
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f1e89e4d
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f1e89e4d2cc81d8ba14d465fd5badfe77f329a69
Parents: 03812cb
Author: Eugene Chekanskiy <ec...@hortonworks.com>
Authored: Wed Jun 14 16:31:28 2017 +0300
Committer: Eugene Chekanskiy <ec...@hortonworks.com>
Committed: Wed Jun 14 16:31:28 2017 +0300
----------------------------------------------------------------------
.../ambari/server/controller/AuthToLocalBuilder.java | 10 ++++++++--
.../common-services/KAFKA/0.10.0.3.0/kerberos.json | 3 +++
.../resources/common-services/KAFKA/0.10.0/kerberos.json | 3 +++
.../resources/common-services/KAFKA/0.9.0/kerberos.json | 3 +++
.../resources/stacks/HDF/2.0/services/KAFKA/kerberos.json | 3 +++
5 files changed, 20 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
index 33c8f3b..1d4abdd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AuthToLocalBuilder.java
@@ -242,6 +242,9 @@ public class AuthToLocalBuilder implements Cloneable {
case SPACES:
stringBuilder.append(" ");
break;
+ case COMMA:
+ stringBuilder.append(",");
+ break;
default:
throw new UnsupportedOperationException(String.format("The auth-to-local rule concatenation type is not supported: %s",
concatenationType.name()));
@@ -661,8 +664,11 @@ public class AuthToLocalBuilder implements Cloneable {
/**
* Each rule is appended to the set of rules using a space - the ruleset exists on a single line
*/
- SPACES;
-
+ SPACES,
+ /**
+ * Each rule is appended to the set of rules using comma - the ruleset exists on a single line.
+ */
+ COMMA;
/**
* Translate a string declaring a concatenation type to the enumerated value.
* <p/>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
index eb31ad6..b4d0018 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0.3.0/kerberos.json
@@ -29,6 +29,9 @@
}
}
],
+ "auth_to_local_properties" : [
+ "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+ ],
"components": [
{
"name": "KAFKA_BROKER",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
index eb31ad6..b4d0018 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.10.0/kerberos.json
@@ -29,6 +29,9 @@
}
}
],
+ "auth_to_local_properties" : [
+ "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+ ],
"components": [
{
"name": "KAFKA_BROKER",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
index 7500891..247a602 100644
--- a/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
+++ b/ambari-server/src/main/resources/common-services/KAFKA/0.9.0/kerberos.json
@@ -19,6 +19,9 @@
}
}
],
+ "auth_to_local_properties" : [
+ "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+ ],
"components": [
{
"name": "KAFKA_BROKER",
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1e89e4d/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
----------------------------------------------------------------------
diff --git a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
index e1e6461..aa351d1 100644
--- a/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
+++ b/contrib/management-packs/hdf-ambari-mpack/src/main/resources/stacks/HDF/2.0/services/KAFKA/kerberos.json
@@ -28,6 +28,9 @@
}
}
],
+ "auth_to_local_properties" : [
+ "kafka-broker/sasl.kerberos.principal.to.local.rules|comma"
+ ],
"components": [
{
"name": "KAFKA_BROKER",
[23/26] ambari git commit: AMBARI-21207. Extend Swagger Maven plugin
to handle nested APIs (Balazs Bence Sari via adoroszlai)
Posted by rl...@apache.org.
AMBARI-21207. Extend Swagger Maven plugin to handle nested APIs (Balazs Bence Sari via adoroszlai)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/03812cba
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/03812cba
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/03812cba
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 03812cba4fff24093cf10035667d1a99d71e9a80
Parents: 24e2cac
Author: Balazs Bence Sari <bs...@hortonworks.com>
Authored: Wed Jun 14 14:38:10 2017 +0200
Committer: Attila Doroszlai <ad...@hortonworks.com>
Committed: Wed Jun 14 14:38:24 2017 +0200
----------------------------------------------------------------------
ambari-project/pom.xml | 47 +++-
ambari-server/pom.xml | 28 +--
.../server/api/services/ClusterService.java | 2 +-
.../server/api/services/ServiceService.java | 3 +-
utility/pom.xml | 20 ++
.../ambari/swagger/AmbariSwaggerReader.java | 222 +++++++++++++++++++
.../ambari/swagger/AmbariSwaggerReaderTest.java | 182 +++++++++++++++
utility/src/test/resources/log4j.properties | 19 ++
8 files changed, 499 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 9bb2e26..b06bd18 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -32,6 +32,8 @@
<powermock.version>1.6.3</powermock.version>
<jetty.version>8.1.19.v20160209</jetty.version>
<checkstyle.version>6.19</checkstyle.version> <!-- last version that does not require Java 8 -->
+ <swagger.version>1.5.10</swagger.version>
+ <slf4j.version>1.7.20</slf4j.version>
<forkCount>4</forkCount>
<reuseForks>false</reuseForks>
</properties>
@@ -210,12 +212,22 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.20</version>
+ <version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.20</version>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
@@ -312,7 +324,6 @@
<artifactId>ant-launcher</artifactId>
<version>1.7.1</version>
</dependency>
-
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
@@ -486,6 +497,36 @@
<artifactId>checkstyle</artifactId>
<version>${checkstyle.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>3.4</version>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-annotations</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-core</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-jaxrs</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-models</artifactId>
+ <version>${swagger.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.github.kongchen</groupId>
+ <artifactId>swagger-maven-plugin</artifactId>
+ <version>3.1.4</version>
+ </dependency>
</dependencies>
</dependencyManagement>
<build>
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index a1cd239..ac78595 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -48,7 +48,6 @@
<tarballResourcesFolder>src/main/resources</tarballResourcesFolder>
<skipPythonTests>false</skipPythonTests>
<hadoop.version>2.7.2</hadoop.version>
- <swagger.version>1.5.10</swagger.version>
<empty.dir>src/main/package</empty.dir> <!-- any directory in project with not very big amount of files (not to waste-load them) -->
<el.log>ALL</el.log> <!-- log level for EclipseLink eclipselink-staticweave-maven-plugin -->
<xlint>none</xlint> <!-- passed to Java compiler -Xlint: flag -->
@@ -413,10 +412,10 @@
<plugin>
<groupId>com.github.kongchen</groupId>
<artifactId>swagger-maven-plugin</artifactId>
- <version>3.1.4</version>
<configuration>
<apiSources>
<apiSource>
+ <swaggerApiReader>org.apache.ambari.swagger.AmbariSwaggerReader</swaggerApiReader>
<springmvc>false</springmvc>
<locations>org.apache.ambari.server.api.services</locations>
<schemes>http,https</schemes>
@@ -1291,12 +1290,18 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.20</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jul-to-slf4j</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
<groupId>log4j</groupId>
@@ -1426,17 +1431,14 @@
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-jaxrs</artifactId>
- <version>${swagger.version}</version>
<exclusions>
<exclusion>
<!-- Because it is already in the jersey one and causes the shade plugin to be confused -->
@@ -1448,7 +1450,6 @@
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
- <version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
@@ -1477,7 +1478,6 @@
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
- <version>3.4</version>
<scope>test</scope>
</dependency>
<dependency>
@@ -1651,16 +1651,6 @@
<scope>compile</scope>
</dependency>
<dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jul-to-slf4j</artifactId>
- <version>1.7.20</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- <version>1.7.20</version>
- </dependency>
- <dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.1.0</version>
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
index f61fb2a..44d50731 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ClusterService.java
@@ -505,7 +505,7 @@ public class ClusterService extends BaseService {
* @return the services service
*/
@Path("{clusterName}/services")
- public ServiceService getServiceHandler(@Context javax.ws.rs.core.Request request, @PathParam("clusterName") String clusterName) {
+ public ServiceService getServiceHandler(@Context javax.ws.rs.core.Request request, @ApiParam @PathParam("clusterName") String clusterName) {
return new ServiceService(clusterName);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
index a28c4aa..6ab2704 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
@@ -51,7 +51,7 @@ import io.swagger.annotations.ApiResponses;
/**
* Service responsible for services resource requests.
*/
-@Api(value = "Services", description = "Endpoint for service specific operations")
+@Api(value = "Cluster Services", description = "Endpoint for service specific operations")
public class ServiceService extends BaseService {
private static final String SERVICE_REQUEST_TYPE = "org.apache.ambari.server.controller.ServiceRequestSwagger";
private static final String ARTIFACT_REQUEST_TYPE = "org.apache.ambari.server.controller.ClusterServiceArtifactRequest";
@@ -112,6 +112,7 @@ public class ServiceService extends BaseService {
* @return service collection resource representation
*/
@GET
+ @Path("") // This is needed if class level path is not present otherwise no Swagger docs will be generated for this method
@Produces(MediaType.TEXT_PLAIN)
@ApiOperation(value = "Get all services",
nickname = "ServiceService#getServices",
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/pom.xml
----------------------------------------------------------------------
diff --git a/utility/pom.xml b/utility/pom.xml
index 918080e..ac91474 100644
--- a/utility/pom.xml
+++ b/utility/pom.xml
@@ -33,6 +33,21 @@
<dependencies>
<dependency>
+ <groupId>com.github.kongchen</groupId>
+ <artifactId>swagger-maven-plugin</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope> <!-- has to be compile-time dependency on junit -->
@@ -53,6 +68,11 @@
<artifactId>guava</artifactId>
<version>19.0</version> <!-- required for checkstyle -->
</dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
----------------------------------------------------------------------
diff --git a/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java b/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
new file mode 100644
index 0000000..e258fc4
--- /dev/null
+++ b/utility/src/main/java/org/apache/ambari/swagger/AmbariSwaggerReader.java
@@ -0,0 +1,222 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.swagger;
+
+import java.lang.reflect.Method;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.ws.rs.Path;
+
+import org.apache.maven.plugin.logging.Log;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.core.annotation.AnnotationUtils;
+
+import com.github.kongchen.swagger.docgen.reader.JaxrsReader;
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+
+import io.swagger.annotations.Api;
+import io.swagger.models.Operation;
+import io.swagger.models.Swagger;
+import io.swagger.models.Tag;
+import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.PathParameter;
+
+/**
+ * Customized {@link com.github.kongchen.swagger.docgen.reader.ClassSwaggerReader} implementation to
+ * treat nested API's.
+ */
+public class AmbariSwaggerReader extends JaxrsReader {
+
+ /**
+ * Logger instance.
+ */
+ protected final static Logger logger = LoggerFactory.getLogger(AmbariSwaggerReader.class);
+
+ public AmbariSwaggerReader(Swagger swagger, Log LOG) {
+ super(swagger, LOG);
+ }
+
+ private final Map<Class<?>, NestedApiRecord> nestedAPIs = Maps.newHashMap();
+
+ @Override
+ public Swagger getSwagger() {
+ if (null == this.swagger) {
+ this.swagger = new Swagger();
+ }
+ return this.swagger;
+ }
+
+ /**
+ * Original method is overwritten so that to gather information about top level api - nested api relations
+ */
+ @Override
+ public Swagger read(Set<Class<?>> classes) {
+ // scan for and register nested API classes
+ logger.debug("Looking for nested API's");
+ for (Class<?> cls: classes) {
+ logger.debug("Examining API {}", cls.getSimpleName());
+ for (Method method: cls.getMethods()) {
+ Path methodPath = AnnotationUtils.findAnnotation(method, Path.class);
+ if (null != methodPath) {
+ Class<?> returnType = method.getReturnType();
+ Api nestedApi = AnnotationUtils.findAnnotation(returnType, Api.class);
+ Path nestedApiPath = AnnotationUtils.findAnnotation(returnType, Path.class);
+ logger.debug("Examinig API method {}#{}, path={}, returnType={}", cls.getSimpleName(), method.getName(),
+ nestedApiPath != null ? nestedApiPath.value() : null, returnType.getSimpleName());
+ if (null != nestedApi) {
+ if (null != nestedApiPath) {
+ logger.info("This class exists both as top level and nested API: {}, treating it as top level API",
+ returnType.getName());
+ }
+ else {
+ Path apiPath = AnnotationUtils.findAnnotation(cls, Path.class);
+ String apiPathValue;
+ if (null == apiPath) {
+ logger.warn("Parent api {} also seems to be a nested API. The current version does not support " +
+ "multi-level nesting.");
+ apiPathValue = "";
+ }
+ else {
+ apiPathValue = apiPath.value();
+ }
+ NestedApiRecord nar = new NestedApiRecord(returnType, cls, apiPathValue, method, methodPath.value());
+ if (nestedAPIs.containsKey(returnType)) {
+ logger.warn("{} is a nested API of multiple top level API's. Ignoring top level API {}", returnType, cls);
+ }
+ else {
+ logger.info("Registering nested API: {}", returnType);
+ nestedAPIs.put(returnType, nar);
+ }
+ }
+ }
+ }
+ }
+ }
+ logger.info("Found {} nested API's", nestedAPIs.size());
+ // With all information gathered, call superclass implementation
+ return super.read(classes);
+ }
+
+ /**
+ * Original method is overwritten to handle nested api's properly
+ */
+ @Override
+ protected Swagger read(Class<?> cls, String parentPath,
+ String parentMethod,
+ boolean readHidden,
+ String[] parentConsumes,
+ String[] parentProduces,
+ Map<String, Tag> parentTags,
+ List<Parameter> parentParameters) {
+ NestedApiRecord nestedApiRecord = nestedAPIs.get(cls);
+ if (null != nestedApiRecord) {
+ logger.info("Processing nested API: {}", nestedApiRecord);
+ // Get the path parameters of the parent API method. All methods of the nested API class should include these
+ // parameters.
+ Operation operation = parseMethod(nestedApiRecord.parentMethod);
+ List<Parameter> pathParameters = ImmutableList.copyOf(
+ Collections2.filter(operation.getParameters(), Predicates.instanceOf(PathParameter.class)));
+ logger.info("Will copy path params from parent method: {}",
+ Lists.transform(pathParameters, new ParameterToName()));
+ return super.read(cls,
+ joinPaths(nestedApiRecord.parentApiPath, nestedApiRecord.parentMethodPath, parentPath),
+ parentMethod, readHidden,
+ parentConsumes, parentProduces, parentTags, pathParameters);
+ }
+ else {
+ logger.info("Processing top level API: {}", cls.getSimpleName());
+ return super.read(cls, parentPath, parentMethod, readHidden, parentConsumes, parentProduces, parentTags, parentParameters);
+ }
+ }
+
+ /**
+ * Joins path elements properly with slashes avoiding duplicate slashes.
+ *
+ * @param firstPath the first path element
+ * @param paths optionally other path elements
+ * @return the joined path
+ */
+ static String joinPaths(String firstPath, String... paths) {
+ StringBuilder joined = new StringBuilder(firstPath);
+ for(String path: paths) {
+ if (path.isEmpty()) { /* NOP */ }
+ else if (joined.length() == 0) {
+ joined.append(path);
+ }
+ else if (joined.charAt(joined.length() - 1) == '/') {
+ if (path.startsWith("/")) {
+ joined.append(path.substring(1, path.length()));
+ }
+ else {
+ joined.append(path);
+ }
+ }
+ else {
+ if (path.startsWith("/")) {
+ joined.append(path);
+ }
+ else {
+ joined.append('/').append(path);
+ }
+
+ }
+ }
+ return joined.toString();
+ }
+}
+
+class ParameterToName implements Function<Parameter, String> {
+ public String apply(Parameter input) {
+ return input.getName();
+ }
+}
+
+class NestedApiRecord {
+ final Class<?> nestedApi;
+ final Class<?> parentApi;
+ final String parentApiPath;
+ final Method parentMethod;
+ final String parentMethodPath;
+
+ public NestedApiRecord(Class<?> nestedApi, Class<?> parentApi, String parentApiPath, Method parentMethod, String parentMethodPath) {
+ this.nestedApi = nestedApi;
+ this.parentApi = parentApi;
+ this.parentApiPath = parentApiPath;
+ this.parentMethod = parentMethod;
+ this.parentMethodPath = parentMethodPath;
+ }
+
+ @Override
+ public String toString() {
+ return "NestedApiRecord {" +
+ "nestedApi=" + nestedApi +
+ ", parentApi=" + parentApi +
+ ", parentApiPath='" + parentApiPath + '\'' +
+ ", parentMethod=" + parentMethod +
+ ", parentMethodPath='" + parentMethodPath + '\'' +
+ '}';
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
----------------------------------------------------------------------
diff --git a/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java b/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
new file mode 100644
index 0000000..a102152
--- /dev/null
+++ b/utility/src/test/java/org/apache/ambari/swagger/AmbariSwaggerReaderTest.java
@@ -0,0 +1,182 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.ambari.swagger;
+
+import static org.easymock.EasyMock.createMock;
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+
+import org.apache.commons.collections.set.ListOrderedSet;
+import org.apache.maven.plugin.logging.Log;
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import io.swagger.models.Response;
+import io.swagger.models.Swagger;
+import io.swagger.models.parameters.Parameter;
+import io.swagger.models.parameters.PathParameter;
+
+public class AmbariSwaggerReaderTest {
+
+
+ /**
+ * Test the {@link AmbariSwaggerReader#joinPaths(String, String...)} method
+ */
+ @Test
+ public void testJoinPaths() {
+ assertEquals("/toplevel/nested/{param}/list",
+ AmbariSwaggerReader.joinPaths("", "/", "/", "", "toplevel", "/nested/", "/{param}", "list"));
+ assertEquals("/toplevel/nested/{param}/list",
+ AmbariSwaggerReader.joinPaths("/", "toplevel", "", "/nested/", "/", "/{param}", "list", ""));
+ }
+
+ /**
+ * Test the basic case: one top level API and one nested API, each with one operation
+ */
+ @Test
+ public void swaggerBasicCase() {
+ AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+ Swagger swagger = asr.read(ImmutableSet.of(TopLevelAPI.class, NestedAPI.class));
+ assertEquals(ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list"),
+ swagger.getPaths().keySet());
+ assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param");
+ }
+
+ /**
+ * Test conflicting nested API's (the same API's are returned from different top level API's).
+ * In this case the nested API should be associated to the first processed top level API.
+ */
+ @Test
+ public void swaggerConflictingNestedApis() {
+ AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+ ListOrderedSet classes = ListOrderedSet.decorate(
+ Lists.newArrayList(TopLevelAPI.class, AnotherTopLevelAPI.class, NestedAPI.class));
+ Swagger swagger = asr.read(classes);
+ assertEquals(
+ ImmutableSet.of("/toplevel/top", "/toplevel/{param}/nested/list", "/toplevel2/anotherTop"),
+ swagger.getPaths().keySet());
+ assertPathParamsExist(swagger, "/toplevel/{param}/nested/list", "param");
+ }
+
+ /**
+ * If an API is both top level (the class has a @Path annotation) and nested (class is a return type of an
+ * API operation) then it should be treated as top level.
+ */
+ @Test
+ public void swaggerApiThatIsBothTopLevelAndNestedIsCountedAsTopLevel() {
+ AmbariSwaggerReader asr = new AmbariSwaggerReader(null, createMock(Log.class));
+ Swagger swagger = asr.read(ImmutableSet.of(YetAnotherTopLevelAPI.class, NestedAndTopLevelAPI.class));
+ assertEquals(ImmutableSet.of("/toplevel3/yetAnotherTop", "/canBeReachedFromTopToo/list"),
+ swagger.getPaths().keySet());
+ }
+
+
+ /**
+ * Verify that the top level API's path parameters are transferred to the nested API.
+ */
+ private static void assertPathParamsExist(Swagger swagger, String path, String... expectedPathParams) {
+ List<Parameter> parameters = swagger.getPath(path).getGet().getParameters();
+ assertNotNull("No path parameters for path: " + path, parameters);
+ Set<String> pathParamNames = new HashSet<>();
+ for (Parameter param: parameters) {
+ if (param instanceof PathParameter) {
+ pathParamNames.add(param.getName());
+ }
+ }
+ Set<String> missingPathParams = Sets.difference(ImmutableSet.copyOf(expectedPathParams), pathParamNames);
+ assertTrue("Expected path params for [" + path + "] are missing: " + missingPathParams, missingPathParams.isEmpty());
+ }
+
+}
+
+@Path("/toplevel")
+@Api(value = "Top Level", description = "A top level API")
+abstract class TopLevelAPI {
+
+ @GET
+ @Path("/top")
+ @ApiOperation(value = "list")
+ public abstract Response getList();
+
+ @Path("{param}/nested")
+ public abstract NestedAPI getNested(@ApiParam @PathParam(value = "param") String param);
+}
+
+@Path("/toplevel2")
+@Api(value = "Top Level 2", description = "Another top level API")
+abstract class AnotherTopLevelAPI {
+
+ @GET
+ @Path("/anotherTop")
+ @ApiOperation(value = "list")
+ public abstract Response getList();
+
+ @Path("{param}/anotherNested")
+ public abstract NestedAPI getSecondNested(@ApiParam @PathParam(value = "param") String param);
+
+}
+
+@Path("/toplevel3")
+@Api(value = "Top Level 3", description = "Yet another top level API")
+abstract class YetAnotherTopLevelAPI {
+
+ @GET
+ @Path("/yetAnotherTop")
+ @ApiOperation(value = "list")
+ public abstract Response getList();
+
+ @Path("{param}/nested")
+ public abstract NestedAPI getFirstNested(@ApiParam @PathParam(value = "param") String param);
+
+}
+
+@Api(value = "Nested", description = "A nested API")
+abstract class NestedAPI {
+
+ @GET
+ @Path("/list")
+ @ApiOperation(value = "list")
+ public abstract Response getList();
+
+}
+
+@Path("/canBeReachedFromTopToo")
+@Api(value = "Nested and Top Level", description = "An API that is both nested and top level")
+abstract class NestedAndTopLevelAPI {
+
+ @GET
+ @Path("/list")
+ @ApiOperation(value = "list")
+ public abstract Response getList();
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/03812cba/utility/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/utility/src/test/resources/log4j.properties b/utility/src/test/resources/log4j.properties
new file mode 100644
index 0000000..c088bb7
--- /dev/null
+++ b/utility/src/test/resources/log4j.properties
@@ -0,0 +1,19 @@
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# log4j configuration used during build and unit tests
+
+log4j.rootLogger=INFO,stdout
+log4j.threshold=ALL
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2} (%F:%M(%L)) - %m%n
[09/26] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by rl...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/382da979
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/382da979
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/382da979
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 382da97990dfe673bb6d4d69590444ddbbb455eb
Parents: 871f85b 8d129d4
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 12 12:44:40 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Jun 12 12:44:40 2017 -0400
----------------------------------------------------------------------
.../org/apache/ambari/tools/zk/ZkMigrator.java | 44 +-
.../apache/ambari/tools/zk/ZkMigratorTest.java | 60 +-
.../main/python/ambari_commons/inet_utils.py | 32 ++
.../src/main/python/ambari_commons/os_check.py | 6 +
.../ambari_commons/resources/os_family.json | 10 +
.../core/providers/__init__.py | 19 +-
.../core/resources/zkmigrator.py | 17 +-
.../libraries/providers/__init__.py | 3 -
.../InfraKerberosHostValidator.java | 54 --
.../InfraRuleBasedAuthorizationPlugin.java | 542 -------------------
.../InfraUserRolesLookupStrategy.java | 49 --
.../security/InfraKerberosHostValidator.java | 54 ++
.../InfraRuleBasedAuthorizationPlugin.java | 542 +++++++++++++++++++
.../security/InfraUserRolesLookupStrategy.java | 49 ++
ambari-logsearch/docker/Dockerfile | 6 +-
ambari-metrics/ambari-metrics-common/pom.xml | 5 +
.../timeline/AbstractTimelineMetricsSink.java | 64 ++-
.../sink/timeline/AppCookieManager.java | 219 ++++++++
.../sink/timeline/AppCookieManagerTest.java | 52 ++
.../ambari-metrics-host-aggregator/pom.xml | 30 +-
.../AbstractMetricPublisherThread.java | 134 -----
.../aggregator/AggregatedMetricsPublisher.java | 101 ----
.../host/aggregator/AggregatorApplication.java | 98 ++--
.../host/aggregator/AggregatorWebService.java | 2 +-
.../host/aggregator/RawMetricsPublisher.java | 60 --
.../host/aggregator/TimelineMetricsHolder.java | 26 +-
.../sink/timeline/AbstractMetricPublisher.java | 169 ++++++
.../timeline/AggregatedMetricsPublisher.java | 103 ++++
.../sink/timeline/RawMetricsPublisher.java | 65 +++
.../aggregator/AggregatorApplicationTest.java | 55 ++
.../aggregator/AggregatorWebServiceTest.java | 135 +++++
.../aggregator/TimelineMetricsHolderTest.java | 107 ++++
.../timeline/AbstractMetricPublisherTest.java | 82 +++
.../AggregatedMetricsPublisherTest.java | 154 ++++++
.../sink/timeline/RawMetricsPublisherTest.java | 151 ++++++
.../src/main/python/core/aggregator.py | 6 +-
.../src/main/python/core/controller.py | 2 +-
ambari-project/pom.xml | 5 +
.../security/kerberos/kerberos_descriptor.md | 5 +-
ambari-server/pom.xml | 24 +-
.../server/KdcServerConnectionVerification.java | 2 +-
.../ambari/server/StateRecoveryManager.java | 2 +-
.../actionmanager/ActionDBAccessorImpl.java | 6 +-
.../server/actionmanager/ActionManager.java | 8 +-
.../server/actionmanager/ActionScheduler.java | 18 +-
.../ambari/server/actionmanager/Stage.java | 6 +-
.../apache/ambari/server/agent/ActionQueue.java | 2 +-
.../ambari/server/agent/AgentRequests.java | 10 +-
.../ambari/server/agent/ExecutionCommand.java | 6 +-
.../ambari/server/agent/HeartBeatHandler.java | 17 +-
.../ambari/server/agent/HeartbeatMonitor.java | 14 +-
.../ambari/server/agent/HeartbeatProcessor.java | 4 +-
.../apache/ambari/server/agent/HostInfo.java | 2 +-
.../apache/ambari/server/agent/Register.java | 2 +-
.../ambari/server/agent/rest/AgentResource.java | 18 +-
.../ambari/server/api/query/QueryImpl.java | 4 +-
.../server/api/rest/BootStrapResource.java | 6 +-
.../server/api/services/AmbariMetaInfo.java | 12 +-
.../ambari/server/api/services/BaseRequest.java | 2 +-
.../api/services/PersistKeyValueService.java | 16 +-
.../services/parsers/JsonRequestBodyParser.java | 2 +-
.../StackAdvisorBlueprintProcessor.java | 2 +-
.../commands/StackAdvisorCommand.java | 10 +-
.../views/ViewDataMigrationService.java | 6 +-
.../server/bootstrap/BSHostStatusCollector.java | 12 +-
.../ambari/server/bootstrap/BSRunner.java | 14 +-
.../ambari/server/bootstrap/BootStrapImpl.java | 6 +-
.../server/checks/AbstractCheckDescriptor.java | 7 -
.../checks/ServiceCheckValidityCheck.java | 9 +-
.../server/checks/UpgradeCheckRegistry.java | 4 +-
.../server/configuration/Configuration.java | 17 +
.../controller/AmbariActionExecutionHelper.java | 9 +-
.../AmbariCustomCommandExecutionHelper.java | 17 +-
.../server/controller/AmbariHandlerList.java | 2 +-
.../AmbariManagementControllerImpl.java | 96 ++--
.../ambari/server/controller/AmbariServer.java | 2 +-
.../server/controller/ControllerModule.java | 2 +-
.../server/controller/KerberosHelperImpl.java | 21 +-
.../internal/AbstractPropertyProvider.java | 4 +-
.../internal/AbstractProviderModule.java | 15 +-
.../internal/ActionResourceProvider.java | 3 +-
.../controller/internal/AppCookieManager.java | 8 +-
.../controller/internal/BaseProvider.java | 10 +-
.../BlueprintConfigurationProcessor.java | 28 +-
.../internal/ClientConfigResourceProvider.java | 2 +-
.../internal/ClusterControllerImpl.java | 4 +-
.../internal/ClusterResourceProvider.java | 6 +-
...atibleRepositoryVersionResourceProvider.java | 2 +-
.../internal/ComponentResourceProvider.java | 6 +-
.../internal/ConfigGroupResourceProvider.java | 15 +-
.../internal/GroupResourceProvider.java | 4 +-
.../internal/HostComponentResourceProvider.java | 2 +-
.../internal/HostResourceProvider.java | 12 +-
.../controller/internal/HostStatusHelper.java | 2 +-
.../internal/JobResourceProvider.java | 12 +-
.../internal/MemberResourceProvider.java | 4 +-
.../PreUpgradeCheckResourceProvider.java | 8 +-
.../internal/RequestResourceProvider.java | 6 +-
.../internal/RequestStageContainer.java | 2 +-
.../internal/ServiceResourceProvider.java | 53 +-
.../internal/TaskAttemptResourceProvider.java | 6 +-
.../controller/internal/URLStreamProvider.java | 10 +-
.../internal/UpgradeResourceProvider.java | 5 -
.../internal/UserResourceProvider.java | 4 +-
.../internal/WidgetLayoutResourceProvider.java | 4 +-
.../internal/WorkflowResourceProvider.java | 6 +-
.../server/controller/jmx/JMXMetricHolder.java | 2 +-
.../logging/LogSearchDataRetrievalService.java | 4 +-
.../logging/LoggingRequestHelperImpl.java | 15 +-
.../logging/LoggingSearchPropertyProvider.java | 4 +-
.../metrics/MetricsCollectorHAManager.java | 2 +-
.../metrics/MetricsDownsamplingMethod.java | 5 +-
.../metrics/timeline/AMSPropertyProvider.java | 2 +-
.../metrics/timeline/MetricsRequestHelper.java | 20 +-
.../timeline/cache/TimelineMetricCache.java | 28 +-
.../cache/TimelineMetricCacheEntryFactory.java | 46 +-
.../cache/TimelineMetricsCacheSizeOfEngine.java | 6 +-
.../controller/utilities/KerberosChecker.java | 2 +-
.../ServiceCalculatedStateFactory.java | 2 +-
.../server/credentialapi/CredentialUtil.java | 2 +-
.../customactions/ActionDefinitionManager.java | 6 +-
.../alerts/AlertHashInvalidationListener.java | 2 +-
.../alerts/AlertLifecycleListener.java | 2 +-
.../alerts/AlertMaintenanceModeListener.java | 2 +-
.../AlertServiceComponentHostListener.java | 2 +-
.../alerts/AlertServiceStateListener.java | 2 +-
.../alerts/AlertStateChangedListener.java | 2 +-
.../upgrade/HostVersionOutOfSyncListener.java | 2 -
.../CachedRoleCommandOrderProvider.java | 2 +-
.../server/metadata/RoleCommandOrder.java | 7 +-
.../system/impl/AmbariPerformanceMonitor.java | 4 +-
.../system/impl/DatabaseMetricsSource.java | 2 +-
.../metrics/system/impl/JvmMetricsSource.java | 2 +-
.../system/impl/MetricsConfiguration.java | 2 +-
.../metrics/system/impl/MetricsServiceImpl.java | 2 +-
.../dispatchers/AlertScriptDispatcher.java | 45 +-
.../ambari/server/orm/DBAccessorImpl.java | 2 +-
.../server/orm/dao/AlertDefinitionDAO.java | 2 +-
.../ambari/server/orm/dao/HostVersionDAO.java | 6 +-
.../ambari/server/orm/dao/ServiceConfigDAO.java | 1 -
.../orm/entities/RepositoryVersionEntity.java | 2 +-
.../orm/helpers/dbms/GenericDbmsHelper.java | 4 +-
.../server/resources/ResourceManager.java | 11 +-
.../server/resources/api/rest/GetResource.java | 9 +-
.../scheduler/AbstractLinearExecutionJob.java | 6 +-
.../scheduler/ExecutionScheduleManager.java | 12 +-
.../scheduler/ExecutionSchedulerImpl.java | 4 +-
.../server/security/CertificateManager.java | 6 +-
.../ambari/server/security/SecurityFilter.java | 12 +-
.../AmbariLdapBindAuthenticator.java | 2 +-
.../AmbariPamAuthenticationProvider.java | 2 +-
.../jwt/JwtAuthenticationFilter.java | 2 +-
.../encryption/MasterKeyServiceImpl.java | 8 +-
.../unsecured/rest/CertificateDownload.java | 6 +-
.../unsecured/rest/CertificateSign.java | 6 +-
.../security/unsecured/rest/ConnectionInfo.java | 6 +-
.../kerberos/ADKerberosOperationHandler.java | 6 +-
.../kerberos/CreateKeytabFilesServerAction.java | 6 +-
.../kerberos/DestroyPrincipalsServerAction.java | 2 +-
.../kerberos/IPAKerberosOperationHandler.java | 18 +-
.../kerberos/MITKerberosOperationHandler.java | 2 +-
.../serveraction/upgrades/ConfigureAction.java | 2 +-
.../upgrades/FinalizeUpgradeAction.java | 4 +-
.../upgrades/UpdateDesiredStackAction.java | 2 +-
.../ambari/server/stack/ExtensionDirectory.java | 2 +-
.../ambari/server/stack/ExtensionModule.java | 4 +-
.../ambari/server/stack/MasterHostResolver.java | 2 +-
.../ambari/server/stack/ServiceDirectory.java | 2 +-
.../ambari/server/stack/ServiceModule.java | 4 +-
.../ambari/server/stack/StackDirectory.java | 7 +-
.../ambari/server/stack/StackManager.java | 9 +-
.../apache/ambari/server/stack/StackModule.java | 20 +-
.../ambari/server/stageplanner/RoleGraph.java | 51 +-
.../apache/ambari/server/state/CheckHelper.java | 39 +-
.../org/apache/ambari/server/state/Cluster.java | 6 +-
.../ambari/server/state/ConfigFactory.java | 8 -
.../server/state/ServiceComponentImpl.java | 21 +-
.../apache/ambari/server/state/ServiceImpl.java | 21 +-
.../apache/ambari/server/state/StackInfo.java | 2 +-
.../ambari/server/state/UpgradeContext.java | 2 -
.../ambari/server/state/action/ActionImpl.java | 23 +-
.../ambari/server/state/alert/AlertUri.java | 2 +-
.../server/state/cluster/ClusterImpl.java | 45 +-
.../server/state/cluster/ClustersImpl.java | 6 +-
.../ambari/server/state/host/HostImpl.java | 32 +-
.../state/kerberos/KerberosDescriptor.java | 51 ++
.../kerberos/VariableReplacementHelper.java | 23 +-
.../server/state/stack/ConfigUpgradePack.java | 2 +-
.../ambari/server/state/stack/OsFamily.java | 12 +
.../state/stack/StackRoleCommandOrder.java | 2 +-
.../ambari/server/state/stack/UpgradePack.java | 2 +-
.../state/stack/upgrade/ColocatedGrouping.java | 2 +-
.../upgrade/ConfigUpgradeChangeDefinition.java | 2 +-
.../state/stack/upgrade/ConfigureTask.java | 2 +-
.../state/stack/upgrade/HostOrderGrouping.java | 2 +-
.../stack/upgrade/RepositoryVersionHelper.java | 4 +-
.../state/stack/upgrade/RestartGrouping.java | 2 +-
.../stack/upgrade/ServiceCheckGrouping.java | 2 +-
.../state/stack/upgrade/StartGrouping.java | 2 +-
.../state/stack/upgrade/StopGrouping.java | 2 +-
.../state/stack/upgrade/TaskWrapperBuilder.java | 2 +-
.../svccomphost/ServiceComponentHostImpl.java | 23 +-
.../server/topology/BlueprintValidatorImpl.java | 2 +-
.../topology/tasks/ConfigureClusterTask.java | 2 +-
.../server/topology/tasks/TopologyHostTask.java | 4 +-
.../validators/ClusterConfigTypeValidator.java | 2 +-
.../server/upgrade/AbstractUpgradeCatalog.java | 2 +-
.../server/upgrade/SchemaUpgradeHelper.java | 2 +-
.../server/upgrade/UpgradeCatalog222.java | 2 +-
.../server/upgrade/UpgradeCatalog250.java | 39 +-
.../apache/ambari/server/utils/AmbariPath.java | 2 +-
.../ambari/server/utils/CommandUtils.java | 2 +-
.../ambari/server/utils/SecretReference.java | 2 +-
.../ambari/server/utils/ShellCommandUtil.java | 6 +-
.../apache/ambari/server/utils/StageUtils.java | 6 +-
.../server/view/HttpImpersonatorImpl.java | 2 +-
.../server/view/ViewAmbariStreamProvider.java | 2 +-
.../ambari/server/view/ViewContextImpl.java | 6 +-
.../view/ViewDataMigrationContextImpl.java | 6 +-
.../server/view/ViewDataMigrationUtility.java | 4 +-
.../server/view/ViewDirectoryWatcher.java | 6 +-
.../ambari/server/view/ViewExtractor.java | 8 +-
.../apache/ambari/server/view/ViewRegistry.java | 27 +-
.../server/view/ViewURLStreamProvider.java | 14 +-
.../main/python/ambari_server/setupMpacks.py | 4 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 12 +-
.../0.1.0/configuration/ams-hbase-env.xml | 4 +-
.../package/templates/hbase_master_jaas.conf.j2 | 10 +
.../templates/hbase_regionserver_jaas.conf.j2 | 10 +
.../DRUID/0.9.2/configuration/druid-env.xml | 2 +-
.../DRUID/0.9.2/package/scripts/druid.py | 7 +
.../DRUID/0.9.2/package/scripts/params.py | 1 +
.../package/templates/hbase_master_jaas.conf.j2 | 10 +
.../templates/hbase_regionserver_jaas.conf.j2 | 10 +
.../HBASE/2.0.0.3.0/configuration/hbase-env.xml | 4 +-
.../package/templates/hbase_master_jaas.conf.j2 | 10 +
.../templates/hbase_regionserver_jaas.conf.j2 | 10 +
.../HDFS/2.1.0.2.0/package/scripts/hdfs.py | 17 +
.../package/templates/hdfs_dn_jaas.conf.j2 | 27 +
.../package/templates/hdfs_jn_jaas.conf.j2 | 27 +
.../package/templates/hdfs_nn_jaas.conf.j2 | 27 +
.../HDFS/3.0.0.3.0/package/scripts/hdfs.py | 17 +
.../package/templates/hdfs_dn_jaas.conf.j2 | 27 +
.../package/templates/hdfs_jn_jaas.conf.j2 | 27 +
.../package/templates/hdfs_nn_jaas.conf.j2 | 27 +
.../HIVE/0.12.0.2.0/configuration/hive-site.xml | 2 +-
.../KAFKA/0.8.1/configuration/kafka-env.xml | 4 +
.../0.8.1/configuration/kafka_jaas_conf.xml | 11 +
.../0.8.1/package/templates/kafka_jaas.conf.j2 | 11 +
.../package/templates/krb5JAASLogin.conf.j2 | 9 +-
.../package/templates/krb5JAASLogin.conf.j2 | 9 +-
.../0.9.1/package/scripts/storm_yaml_utils.py | 5 +-
.../0.9.1/package/templates/storm_jaas.conf.j2 | 10 +
.../2.1.0.2.0/package/scripts/params_linux.py | 32 +-
.../package/scripts/resourcemanager.py | 2 +-
.../YARN/2.1.0.2.0/package/scripts/yarn.py | 17 +
.../package/templates/mapred_jaas.conf.j2 | 28 +
.../package/templates/yarn_ats_jaas.conf.j2 | 27 +
.../package/templates/yarn_jaas.conf.j2 | 12 +-
.../package/templates/yarn_nm_jaas.conf.j2 | 27 +
.../configuration-mapred/mapred-env.xml | 4 +-
.../YARN/3.0.0.3.0/configuration/yarn-env.xml | 15 +-
.../YARN/3.0.0.3.0/kerberos.json | 4 +-
.../3.0.0.3.0/package/scripts/params_linux.py | 32 +-
.../package/scripts/resourcemanager.py | 2 +-
.../YARN/3.0.0.3.0/package/scripts/yarn.py | 19 +-
.../package/templates/mapred_jaas.conf.j2 | 28 +
.../package/templates/yarn_ats_jaas.conf.j2 | 27 +
.../package/templates/yarn_jaas.conf.j2 | 12 +-
.../package/templates/yarn_nm_jaas.conf.j2 | 27 +
.../YARN/3.0.0.3.0/service_advisor.py | 4 +-
.../0.6.0.2.5/package/scripts/master.py | 4 +-
.../resources/host_scripts/alert_disk_space.py | 22 +-
.../services/HIVE/configuration/hive-site.xml | 2 +-
.../YARN/configuration-mapred/mapred-env.xml | 4 +-
.../services/HBASE/configuration/hbase-env.xml | 4 +-
.../services/HDFS/configuration/hadoop-env.xml | 7 +
.../services/YARN/configuration/yarn-env.xml | 16 +-
.../services/HDFS/configuration/hadoop-env.xml | 7 +
.../resources/stacks/HDP/2.6/repos/repoinfo.xml | 14 +
.../services/SPARK2/configuration/livy2-env.xml | 4 +-
.../stacks/HDP/2.6/services/YARN/kerberos.json | 4 +-
.../services/HDFS/configuration/hadoop-env.xml | 7 +
.../YARN/configuration-mapred/mapred-env.xml | 4 +-
.../src/main/resources/stacks/stack_advisor.py | 115 +++-
.../ambari/server/agent/AgentResourceTest.java | 6 +-
.../server/agent/LocalAgentSimulator.java | 6 +-
.../ambari/server/agent/TestActionQueue.java | 2 +-
.../server/agent/TestHeartbeatHandler.java | 4 +-
.../server/api/services/AmbariMetaInfoTest.java | 4 +-
.../server/api/services/PersistServiceTest.java | 6 +-
.../server/bootstrap/BootStrapResourceTest.java | 6 +-
.../ambari/server/bootstrap/BootStrapTest.java | 6 +-
.../checks/ServiceCheckValidityCheckTest.java | 42 +-
.../AmbariManagementControllerImplTest.java | 13 +-
.../AmbariManagementControllerTest.java | 17 +-
.../server/controller/KerberosHelperTest.java | 129 ++---
.../AbstractJDBCResourceProviderTest.java | 2 +-
.../BlueprintConfigurationProcessorTest.java | 3 +
.../CredentialResourceProviderTest.java | 10 +-
.../PreUpgradeCheckResourceProviderTest.java | 15 +-
.../StackUpgradeConfigurationMergeTest.java | 3 +-
.../internal/UpgradeResourceProviderTest.java | 2 +-
.../metrics/ganglia/GangliaMetricTest.java | 2 +-
.../dispatchers/AlertScriptDispatcherTest.java | 67 +++
.../apache/ambari/server/orm/OrmTestHelper.java | 4 +-
.../orm/dao/RepositoryVersionDAOTest.java | 2 +-
.../sample/checks/SampleServiceCheck.java | 4 -
.../server/security/CertGenerationTest.java | 6 +-
.../server/security/SslExecutionTest.java | 6 +-
.../encryption/MasterKeyServiceTest.java | 6 +-
.../upgrades/ConfigureActionTest.java | 5 -
.../upgrades/UpgradeActionTest.java | 5 -
.../server/stageplanner/TestStagePlanner.java | 197 ++++++-
.../ambari/server/state/CheckHelperTest.java | 36 +-
.../server/state/cluster/ClusterTest.java | 4 +-
.../ambari/server/state/host/HostTest.java | 6 +-
.../state/kerberos/KerberosDescriptorTest.java | 9 +
.../kerberos/VariableReplacementHelperTest.java | 130 +++--
.../svccomphost/ServiceComponentHostTest.java | 5 +-
.../server/testing/DBInconsistencyTests.java | 2 +-
.../server/upgrade/UpgradeCatalogHelper.java | 7 -
.../ambari/server/upgrade/UpgradeTest.java | 2 +-
.../python/host_scripts/TestAlertDiskSpace.py | 12 +-
.../python/stacks/2.0.6/HDFS/test_datanode.py | 10 +
.../stacks/2.0.6/HDFS/test_journalnode.py | 11 +-
.../python/stacks/2.0.6/HDFS/test_namenode.py | 24 +-
.../python/stacks/2.0.6/HDFS/test_nfsgateway.py | 10 +
.../python/stacks/2.0.6/HDFS/test_snamenode.py | 12 +-
.../test/python/stacks/2.0.6/HDFS/test_zkfc.py | 17 +-
.../stacks/2.0.6/YARN/test_historyserver.py | 10 +
.../stacks/2.0.6/YARN/test_mapreduce2_client.py | 10 +
.../stacks/2.0.6/YARN/test_nodemanager.py | 10 +
.../stacks/2.0.6/YARN/test_resourcemanager.py | 10 +
.../stacks/2.0.6/YARN/test_yarn_client.py | 10 +
.../stacks/2.0.6/common/test_stack_advisor.py | 153 ++++++
.../test/python/stacks/2.6/DRUID/test_druid.py | 23 +-
.../test/python/stacks/2.6/configs/default.json | 3 +-
.../stacks/HDP/2.0.6.1/role_command_order.json | 101 +---
ambari-web/app/config.js | 9 +-
.../progress_popup_controller.js | 2 +-
.../main/admin/stack_and_upgrade_controller.js | 2 +-
.../manage_alert_notifications_controller.js | 35 +-
ambari-web/app/messages.js | 9 +-
ambari-web/app/routes/add_service_routes.js | 2 +-
ambari-web/app/routes/main.js | 2 +-
ambari-web/app/styles/application.less | 11 +
ambari-web/app/styles/bootstrap_overrides.less | 49 ++
ambari-web/app/styles/dashboard.less | 115 ++--
.../templates/common/export_metrics_menu.hbs | 16 +-
ambari-web/app/templates/common/progress.hbs | 4 +
ambari-web/app/templates/main.hbs | 2 +-
.../app/templates/main/admin/kerberos.hbs | 34 +-
.../main/alerts/create_alert_notification.hbs | 14 +
ambari-web/app/templates/main/dashboard.hbs | 2 +-
.../main/dashboard/widgets/cluster_metrics.hbs | 12 +-
.../main/dashboard/widgets/hbase_links.hbs | 15 +-
.../main/dashboard/widgets/hdfs_links.hbs | 17 +-
.../main/dashboard/widgets/pie_chart.hbs | 21 +-
.../main/dashboard/widgets/simple_text.hbs | 21 +-
.../templates/main/dashboard/widgets/uptime.hbs | 16 +-
.../main/dashboard/widgets/yarn_links.hbs | 18 +-
.../main/service/all_services_actions.hbs | 6 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
ambari-web/app/utils/config.js | 2 +-
ambari-web/app/utils/validator.js | 8 +
ambari-web/app/views/common/chart/pie.js | 10 +-
.../configs/service_config_container_view.js | 2 +-
ambari-web/app/views/loading.js | 2 +-
ambari-web/app/views/main/admin.js | 14 +-
.../views/main/admin/kerberos/disable_view.js | 3 +-
.../main/admin/stack_upgrade/services_view.js | 2 +-
.../main/alerts/definition_details_view.js | 2 +-
.../dashboard/widgets/cluster_metrics_widget.js | 3 -
.../main/dashboard/widgets/pie_chart_widget.js | 23 +-
ambari-web/app/views/main/menu.js | 16 +-
ambari-web/app/views/main/service/item.js | 2 +-
...anage_alert_notifications_controller_test.js | 38 +-
ambari-web/test/utils/config_test.js | 2 +-
.../admin/stack_upgrade/services_view_test.js | 1 +
.../main/alerts/definition_details_view_test.js | 2 +-
.../src/main/assemblies/odpi-ambari-mpack.xml | 2 +-
.../main/resources/ui/app/models/worksheet.js | 1 +
.../resources/ui/app/routes/queries/query.js | 15 +-
.../ui/app/routes/queries/query/results.js | 6 +-
.../templates/components/query-result-table.hbs | 92 ++--
.../ui/app/templates/queries/query.hbs | 10 +-
.../ui/app/templates/queries/query/log.hbs | 12 +-
.../ui/app/templates/queries/query/results.hbs | 9 +-
.../src/main/resources/ui/ember-cli-build.js | 1 +
.../resources/ui/vendor/browser-pollyfills.js | 213 ++++++++
docs/pom.xml | 2 +-
392 files changed, 5474 insertions(+), 2497 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --cc ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index bd4c9dd,3a650ef..60df8cf
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@@ -26,14 -26,11 +26,14 @@@ import java.util.Set
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.RoleCommand;
-import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.utils.StageUtils;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
+ import org.slf4j.Logger;
+ import org.slf4j.LoggerFactory;
import com.google.gson.annotations.SerializedName;
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/orm/dao/HostVersionDAO.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/FinalizeUpgradeAction.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/382da979/ambari-web/app/messages.js
----------------------------------------------------------------------
[05/26] ambari git commit: AMBARI-21183. Removal of INIT Repository
State from Web Client (alexantonenko)
Posted by rl...@apache.org.
AMBARI-21183. Removal of INIT Repository State from Web Client (alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/12202a2f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/12202a2f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/12202a2f
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 12202a2fd303e0d557a987f77f33387e17c9fb81
Parents: 64e3ad7
Author: Alex Antonenko <hi...@gmail.com>
Authored: Tue Jun 6 17:12:42 2017 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Tue Jun 6 17:12:42 2017 +0300
----------------------------------------------------------------------
ambari-web/app/app.js | 8 +++---
.../main/admin/stack_and_upgrade_controller.js | 6 ++---
ambari-web/app/data/controller_route.js | 2 +-
.../models/stack_version/repository_version.js | 2 +-
.../stack_upgrade/upgrade_version_box_view.js | 8 +++---
.../upgrade_version_column_view.js | 2 +-
.../admin/stack_upgrade/upgrade_wizard_view.js | 2 +-
.../main/admin/stack_upgrade/versions_view.js | 2 +-
ambari-web/test/app_test.js | 10 +++----
.../admin/stack_and_upgrade_controller_test.js | 18 ++++++-------
.../upgrade_version_box_view_test.js | 28 ++++++++++----------
.../stack_upgrade/upgrade_wizard_view_test.js | 2 +-
.../admin/stack_upgrade/version_view_test.js | 6 ++---
13 files changed, 48 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/app.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/app.js b/ambari-web/app/app.js
index c22d71c..2c638e4 100644
--- a/ambari-web/app/app.js
+++ b/ambari-web/app/app.js
@@ -56,7 +56,7 @@ module.exports = Em.Application.create({
/**
* state of stack upgrade process
* states:
- * - INIT
+ * - NOT_REQUIRED
* - PENDING
* - IN_PROGRESS
* - HOLDING
@@ -66,14 +66,14 @@ module.exports = Em.Application.create({
* - HOLDING_TIMEDOUT
* @type {String}
*/
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
/**
* Check if upgrade is in INIT state
* 'INIT' is set on upgrade start and when it's finished
* @type {boolean}
*/
- upgradeInit: Em.computed.equal('upgradeState', 'INIT'),
+ upgradeInit: Em.computed.equal('upgradeState', 'NOT_REQUIRED'),
/**
* flag is true when upgrade process is running
@@ -146,7 +146,7 @@ module.exports = Em.Application.create({
// When Upgrade running(not suspended) only operations related to upgrade should be allowed
if ((!this.get('upgradeSuspended') && !authRoles.contains('CLUSTER.UPGRADE_DOWNGRADE_STACK')) &&
!App.get('supports.opsDuringRollingUpgrade') &&
- !['INIT', 'COMPLETED'].contains(this.get('upgradeState')) ||
+ !['NOT_REQUIRED', 'COMPLETED'].contains(this.get('upgradeState')) ||
!App.auth){
return false;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
index a676f7429..91b5ecd 100644
--- a/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
+++ b/ambari-web/app/controllers/main/admin/stack_and_upgrade_controller.js
@@ -1705,7 +1705,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
},
/**
- * reset upgradeState to INIT when upgrade is COMPLETED
+ * reset upgradeState to NOT_REQUIRED when upgrade is COMPLETED
* and clean auxiliary data
*/
finish: function () {
@@ -1713,7 +1713,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
this.setDBProperties({
fromVersion: undefined,
upgradeId: undefined,
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
upgradeVersion: undefined,
currentVersion: undefined,
upgradeTypeDisplayName: undefined,
@@ -1730,7 +1730,7 @@ App.MainAdminStackAndUpgradeController = Em.Controller.extend(App.LocalStorage,
if (upgradeVersion && upgradeVersion[0]) {
App.set('currentStackVersion', upgradeVersion[0]);
}
- App.set('upgradeState', 'INIT');
+ App.set('upgradeState', 'NOT_REQUIRED');
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/data/controller_route.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/controller_route.js b/ambari-web/app/data/controller_route.js
index 5f7c499..13d0380 100644
--- a/ambari-web/app/data/controller_route.js
+++ b/ambari-web/app/data/controller_route.js
@@ -71,7 +71,7 @@ module.exports = [
},
{
wizardControllerName: App.router.get('mainAdminStackAndUpgradeController.name'),
- route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') == 'INIT' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
+ route: App.db.get('MainAdminStackAndUpgrade', 'upgradeState') === 'NOT_REQUIRED' ? 'main.admin.stackAndUpgrade.index' : 'main.admin.stackAndUpgrade.versions'
},
{
wizardControllerName: App.router.get('widgetWizardController.name'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/models/stack_version/repository_version.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/stack_version/repository_version.js b/ambari-web/app/models/stack_version/repository_version.js
index d5bc64d..5ecfdd1 100644
--- a/ambari-web/app/models/stack_version/repository_version.js
+++ b/ambari-web/app/models/stack_version/repository_version.js
@@ -38,7 +38,7 @@ App.RepositoryVersion = DS.Model.extend({
* status used until corresponding stack version get created
* @type {string}
*/
- defaultStatus: 'INIT',
+ defaultStatus: 'NOT_REQUIRED',
/**
* @type {boolean}
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
index bb0cc81..1af7d5c 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_box_view.js
@@ -57,7 +57,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
isUpgrading: function () {
return (this.get('controller.upgradeVersion') === this.get('content.displayName') ||
this.get('controller.fromVersion') === this.get('content.repositoryVersion'))
- && App.get('upgradeState') !== 'INIT';
+ && App.get('upgradeState') !== 'NOT_REQUIRED';
}.property('App.upgradeState', 'content.displayName', 'controller.upgradeVersion'),
isRepoUrlsEditDisabled: function () {
@@ -119,7 +119,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
text: Em.I18n.t('common.current'),
class: 'label label-success'
},
- 'INIT': {
+ 'NOT_REQUIRED': {
isButton: true,
text: Em.I18n.t('admin.stackVersions.version.installNow'),
action: 'installRepoVersionConfirmation'
@@ -170,7 +170,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
if (['INSTALLING', 'CURRENT'].contains(status)) {
element.setProperties(statePropertiesMap[status]);
}
- else if (status === 'INIT') {
+ else if (status === 'NOT_REQUIRED') {
requestInProgressRepoId && requestInProgressRepoId == this.get('content.id') ? element.setProperties(statePropertiesMap['LOADING']) : element.setProperties(statePropertiesMap[status]);
element.set('isDisabled', this.isDisabledOnInit());
}
@@ -245,7 +245,7 @@ App.UpgradeVersionBoxView = Em.View.extend({
),
/**
- * check if actions of INIT stack version disabled
+ * check if actions of NOT_REQUIRED stack version disabled
* @returns {boolean}
*/
isDisabledOnInit: function() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
index 4ce07f2..91381e7 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_version_column_view.js
@@ -73,7 +73,7 @@ App.UpgradeVersionColumnView = App.UpgradeVersionBoxView.extend({
text: Em.I18n.t('common.current'),
class: 'label label-success'
},
- 'INIT': {
+ 'NOT_REQUIRED': {
isButton: true,
text: Em.I18n.t('common.install'),
action: 'installRepoVersionConfirmation'
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
index bcb1ad7..3b269a0 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
@@ -123,7 +123,7 @@ App.upgradeWizardView = Em.View.extend({
*/
noActiveItem: function () {
return (Em.isNone(this.get('failedItem')) && Em.isNone(this.get('runningItem')) && Em.isNone(this.get('manualItem'))) &&
- !['INIT', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
+ !['NOT_REQUIRED', 'COMPLETED', 'ABORTED'].contains(App.get('upgradeState'));
}.property('failedItem', 'runningItem', 'manualItem', 'App.upgradeState'),
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
index c317465..6077344 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/versions_view.js
@@ -160,7 +160,7 @@ App.MainAdminStackVersionsView = Em.View.extend({
return stringUtils.compareVersions(version.get('repositoryVersion'), Em.get(currentVersion, 'repository_version')) < 1;
}
} else if (filter.get('value') === 'NOT_INSTALLED') {
- return ['INIT', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
+ return ['NOT_REQUIRED', 'INSTALL_FAILED', 'INSTALLING', 'OUT_OF_SYNC'].contains(status);
} else {
return status === filter.get('value');
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/app_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/app_test.js b/ambari-web/test/app_test.js
index c87215f..2812b7d 100644
--- a/ambari-web/test/app_test.js
+++ b/ambari-web/test/app_test.js
@@ -443,7 +443,7 @@ describe('App', function () {
describe('#upgradeSuspended', function () {
var cases = [
{
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
isSuspended: false,
upgradeSuspended: false
},
@@ -480,7 +480,7 @@ describe('App', function () {
var cases = [
{
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
isSuspended: false,
upgradeAborted: false
},
@@ -516,7 +516,7 @@ describe('App', function () {
describe('#wizardIsNotFinished', function () {
var cases = [
{
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
wizardIsNotFinished: false
},
{
@@ -549,7 +549,7 @@ describe('App', function () {
describe("#upgradeHolding", function () {
var cases = [
{
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
upgradeAborted: false,
upgradeHolding: false
},
@@ -564,7 +564,7 @@ describe('App', function () {
upgradeHolding: true
},
{
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
upgradeAborted: true,
upgradeHolding: true
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
index 4585991..b87714e 100644
--- a/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
+++ b/ambari-web/test/controllers/main/admin/stack_and_upgrade_controller_test.js
@@ -98,9 +98,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
it("state not ABORTED", function() {
this.mock.returns(false);
- controller.set('upgradeData', { Upgrade: {request_status: 'INIT'}});
+ controller.set('upgradeData', { Upgrade: {request_status: 'NOT_REQUIRED'}});
controller.propertyDidChange('requestStatus');
- expect(controller.get('requestStatus')).to.equal('INIT');
+ expect(controller.get('requestStatus')).to.equal('NOT_REQUIRED');
});
it("upgradeData is null", function() {
@@ -235,7 +235,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
controller.updateUpgradeData.restore();
controller.setDBProperty.restore();
controller.finish.restore();
- App.set('upgradeState', 'INIT');
+ App.set('upgradeState', 'NOT_REQUIRED');
});
it("correct data", function() {
@@ -1197,7 +1197,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
describe("#installRepoVersionSuccess()", function() {
var mock = Em.Object.create({
id: 1,
- defaultStatus: 'INIT',
+ defaultStatus: 'NOT_REQUIRED',
stackVersion: {}
});
beforeEach(function () {
@@ -3133,7 +3133,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(controller.setDBProperties.calledWith({
fromVersion: undefined,
upgradeId: undefined,
- upgradeState: 'INIT',
+ upgradeState: 'NOT_REQUIRED',
upgradeVersion: undefined,
currentVersion: undefined,
upgradeTypeDisplayName: undefined,
@@ -3155,9 +3155,9 @@ describe('App.MainAdminStackAndUpgradeController', function() {
expect(App.clusterStatus.setClusterStatus.calledOnce).to.be.true;
});
- it("upgradeState should be INIT", function() {
+ it("upgradeState should be NOT_REQUIRED", function() {
controller.finish();
- expect(App.get('upgradeState')).to.be.equal('INIT');
+ expect(App.get('upgradeState')).to.be.equal('NOT_REQUIRED');
});
it("currentStackVersion should be set", function() {
@@ -3265,7 +3265,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
ClusterStackVersions: {
version: '2.3',
stack: 'HDP',
- state: 'INIT'
+ state: 'NOT_REQUIRED'
},
repository_versions: [
{
@@ -3281,7 +3281,7 @@ describe('App.MainAdminStackAndUpgradeController', function() {
ClusterStackVersions: {
version: '2.2',
stack: 'HDP',
- state: 'INIT'
+ state: 'NOT_REQUIRED'
},
repository_versions: [
{
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
index 31aa796..b5738a0 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_version_box_view_test.js
@@ -50,7 +50,7 @@ describe('App.UpgradeVersionBoxView', function () {
view.set('controller.fromVersion', 'HDP-1');
});
afterEach(function () {
- App.set('upgradeState', 'INIT');
+ App.set('upgradeState', 'NOT_REQUIRED');
});
it("wrong version", function () {
App.set('upgradeState', 'IN_PROGRESS');
@@ -74,15 +74,15 @@ describe('App.UpgradeVersionBoxView', function () {
view.propertyDidChange('isUpgrading');
expect(view.get('isUpgrading')).to.be.true;
});
- it("upgradeState INIT", function () {
- App.set('upgradeState', 'INIT');
+ it("upgradeState NOT_REQUIRED", function () {
+ App.set('upgradeState', 'NOT_REQUIRED');
view.set('controller.upgradeVersion', 'HDP-2.2.2');
view.set('content.displayName', 'HDP-2.2.2');
view.propertyDidChange('isUpgrading');
expect(view.get('isUpgrading')).to.be.false;
});
- it("upgradeState INIT and wrong version", function () {
- App.set('upgradeState', 'INIT');
+ it("upgradeState NOT_REQUIRED and wrong version", function () {
+ App.set('upgradeState', 'NOT_REQUIRED');
view.set('controller.upgradeVersion', 'HDP-2.2.2');
view.set('content.displayName', 'HDP-2.2.1');
view.propertyDidChange('isUpgrading');
@@ -449,11 +449,11 @@ describe('App.UpgradeVersionBoxView', function () {
},
{
inputData: {
- 'content.status': 'INIT',
+ 'content.status': 'NOT_REQUIRED',
'controller.requestInProgress': false,
'parentView.repoVersions': [
Em.Object.create({
- status: 'INIT'
+ status: 'NOT_REQUIRED'
})
]
},
@@ -462,20 +462,20 @@ describe('App.UpgradeVersionBoxView', function () {
this.initMock.returns(false);
},
expected: {
- status: 'INIT',
+ status: 'NOT_REQUIRED',
isButton: true,
buttons: [],
isDisabled: true
},
- title: 'INIT state, no admin access, no requests in progress'
+ title: 'NOT_REQUIRED state, no admin access, no requests in progress'
},
{
inputData: {
- 'content.status': 'INIT',
+ 'content.status': 'NOT_REQUIRED',
'controller.requestInProgress': true,
'parentView.repoVersions': [
Em.Object.create({
- status: 'INIT'
+ status: 'NOT_REQUIRED'
})
]
},
@@ -484,12 +484,12 @@ describe('App.UpgradeVersionBoxView', function () {
this.initMock.returns(true);
},
expected: {
- status: 'INIT',
+ status: 'NOT_REQUIRED',
isButton: true,
buttons: [],
isDisabled: true
},
- title: 'INIT state, no admin access, request in progress, not installation'
+ title: 'NOT_REQUIRED state, no admin access, request in progress, not installation'
},
{
inputData: {
@@ -1039,7 +1039,7 @@ describe('App.UpgradeVersionBoxView', function () {
title: 'upgrading just started'
},
{
- status: 'INIT',
+ status: 'NOT_REQUIRED',
isUpgrading: false,
isRepoUrlsEditDisabled: false,
title: 'neither upgrading nor installing packages'
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index 075bcc8..7ae785c 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -322,7 +322,7 @@ describe('App.upgradeWizardView', function () {
failedItem: null,
runningItem: null,
manualItem: null,
- upgradeState: 'INIT'
+ upgradeState: 'NOT_REQUIRED'
},
result: false
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/12202a2f/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
index 651c361..cf66165 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/version_view_test.js
@@ -44,7 +44,7 @@ describe('App.mainAdminStackVersionsView', function () {
describe("#filterBy()", function () {
var versions = [
Em.Object.create({
- status: "INIT",
+ status: "NOT_REQUIRED",
repositoryVersion: "2.2.1.1"
}),
Em.Object.create({
@@ -88,7 +88,7 @@ describe('App.mainAdminStackVersionsView', function () {
}),
filteredVersions: [
Em.Object.create({
- status: "INIT",
+ status: "NOT_REQUIRED",
repositoryVersion: "2.2.1.1"
}),
Em.Object.create({
@@ -128,7 +128,7 @@ describe('App.mainAdminStackVersionsView', function () {
}),
filteredVersions: [
Em.Object.create({
- status: "INIT",
+ status: "NOT_REQUIRED",
repositoryVersion: "2.2.1.1"
}),
Em.Object.create({
[15/26] ambari git commit: AMBARI-21227 Updating Ranger
install.properties file (mugdha)
Posted by rl...@apache.org.
AMBARI-21227 Updating Ranger install.properties file (mugdha)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1f19461f
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1f19461f
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1f19461f
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 1f19461f10a2c54d3ed81efedc3f9d3d64397700
Parents: 8cdf232
Author: Mugdha Varadkar <mu...@apache.org>
Authored: Mon Jun 12 14:53:45 2017 +0530
Committer: Mugdha Varadkar <mu...@apache.org>
Committed: Tue Jun 13 10:18:23 2017 +0530
----------------------------------------------------------------------
.../libraries/providers/modify_properties_file.py | 9 +++++++--
.../RANGER/0.4.0/package/scripts/ranger_admin.py | 11 ++++++++++-
.../RANGER/0.4.0/package/scripts/setup_ranger_xml.py | 13 +++++++++++++
.../RANGER_KMS/0.5.0.2.3/package/scripts/kms.py | 8 ++++++++
.../RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py | 10 +++++++++-
.../test/python/stacks/2.2/RANGER/test_ranger_admin.py | 8 ++++++++
.../test/python/stacks/2.5/RANGER/test_ranger_admin.py | 10 ++++++++++
.../python/stacks/2.5/RANGER_KMS/test_kms_server.py | 10 ++++++++++
.../test/python/stacks/2.6/RANGER/test_ranger_admin.py | 10 ++++++++++
9 files changed, 85 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py b/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
index 53d7d2f..f45f27d 100644
--- a/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
+++ b/ambari-common/src/main/python/resource_management/libraries/providers/modify_properties_file.py
@@ -37,6 +37,7 @@ class ModifyPropertiesFileProvider(Provider):
properties = self.resource.properties
unsaved_values = properties.keys()
new_content_lines = []
+ final_content_lines = ""
if sudo.path_isfile(filename):
file_content = sudo.read_file(filename, encoding=self.resource.encoding)
@@ -62,9 +63,13 @@ class ModifyPropertiesFileProvider(Provider):
value = InlineTemplate(unicode(properties[property_name])).get_content()
line = u"{0}{1}{2}".format(unicode(property_name), delimiter, value)
new_content_lines.append(line)
-
+
+ final_content_lines = u"\n".join(new_content_lines)
+ if not final_content_lines.endswith("\n"):
+ final_content_lines = final_content_lines + "\n"
+
File (filename,
- content = u"\n".join(new_content_lines) + "\n",
+ content = final_content_lines,
owner = self.resource.owner,
group = self.resource.group,
mode = self.resource.mode,
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
index b849d58..ecbacbf 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/ranger_admin.py
@@ -29,7 +29,7 @@ from resource_management.libraries.functions.format import format
from resource_management.core.logger import Logger
from resource_management.core import shell
from ranger_service import ranger_service
-from setup_ranger_xml import setup_ranger_audit_solr, setup_ranger_admin_passwd_change
+from setup_ranger_xml import setup_ranger_audit_solr, setup_ranger_admin_passwd_change, update_password_configs
from resource_management.libraries.functions import solr_cloud_util
from ambari_commons.constants import UPGRADE_TYPE_NON_ROLLING, UPGRADE_TYPE_ROLLING
from resource_management.libraries.functions.constants import Direction
@@ -45,6 +45,14 @@ class RangerAdmin(Script):
self.install_packages(env)
import params
env.set_params(params)
+
+ # taking backup of install.properties file
+ Execute(('cp', '-f', format('{ranger_home}/install.properties'), format('{ranger_home}/install-backup.properties')),
+ not_if = format('ls {ranger_home}/install-backup.properties'),
+ only_if = format('ls {ranger_home}/install.properties'),
+ sudo = True
+ )
+
# call config and setup db only in case of HDP version < 2.6
if not params.stack_supports_ranger_setup_db_on_start:
self.configure(env, setup_db=True)
@@ -92,6 +100,7 @@ class RangerAdmin(Script):
solr_cloud_util.setup_solr_client(params.config, custom_log4j = params.custom_log4j)
setup_ranger_audit_solr()
+ update_password_configs()
ranger_service('ranger_admin')
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
index 26e6578..85eb796 100644
--- a/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
+++ b/ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/setup_ranger_xml.py
@@ -851,3 +851,16 @@ def setup_tagsync_ssl_configs():
mode = 0640
)
Logger.info("Configuring tagsync-ssl configurations done successfully.")
+
+def update_password_configs():
+ import params
+
+ password_configs = {'db_root_password': '_', 'db_password': '_'}
+
+ if params.stack_supports_ranger_audit_db:
+ password_configs['audit_db_password'] = '_'
+
+ ModifyPropertiesFile(format("{ranger_home}/install.properties"),
+ properties = password_configs,
+ owner = params.unix_user,
+ )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
index 5a25b92..bbc438b 100755
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms.py
@@ -675,3 +675,11 @@ def check_ranger_service_support_kerberos(user, keytab, principal):
else:
Logger.error('Ranger service is not reachable')
return False
+
+def update_password_configs():
+ import params
+
+ ModifyPropertiesFile(format("{kms_home}/install.properties"),
+ properties = {'db_root_password': '_', 'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_'},
+ owner = params.kms_user,
+ )
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
index 44d61da..829a998 100755
--- a/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
+++ b/ambari-server/src/main/resources/common-services/RANGER_KMS/0.5.0.2.3/package/scripts/kms_server.py
@@ -27,7 +27,7 @@ from resource_management.libraries.functions.format import format
from resource_management.core.logger import Logger
from resource_management.core import shell
from resource_management.libraries.functions.default import default
-from kms import kms, setup_kms_db, setup_java_patch, enable_kms_plugin, setup_kms_jce
+from kms import kms, setup_kms_db, setup_java_patch, enable_kms_plugin, setup_kms_jce, update_password_configs
from kms_service import kms_service
import upgrade
@@ -41,6 +41,13 @@ class KmsServer(Script):
import params
env.set_params(params)
+ # taking backup of install.properties file
+ Execute(('cp', '-f', format('{kms_home}/install.properties'), format('{kms_home}/install-backup.properties')),
+ not_if = format('ls {kms_home}/install-backup.properties'),
+ only_if = format('ls {kms_home}/install.properties'),
+ sudo = True
+ )
+
setup_kms_db()
self.configure(env)
setup_java_patch()
@@ -62,6 +69,7 @@ class KmsServer(Script):
self.configure(env)
enable_kms_plugin()
setup_kms_jce()
+ update_password_configs()
kms_service(action = 'start', upgrade_type=upgrade_type)
def status(self, env):
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
index d338c28..961be84 100644
--- a/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
@@ -48,6 +48,10 @@ class TestRangerAdmin(RMFTestCase):
target = RMFTestCase.TARGET_COMMON_SERVICES
)
self.assert_configure_default()
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_', 'audit_db_password': '_'}
+ )
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -89,6 +93,10 @@ class TestRangerAdmin(RMFTestCase):
target = RMFTestCase.TARGET_COMMON_SERVICES
)
self.assert_configure_secured()
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_', 'audit_db_password': '_'}
+ )
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
index 8f2bd2e..9ba1275 100644
--- a/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.5/RANGER/test_ranger_admin.py
@@ -83,6 +83,11 @@ class TestRangerAdmin(RMFTestCase):
self.assertResourceCalledRegexp('^Execute$', '^ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181/infra-solr --create-collection --collection ranger_audits --config-set ranger_audits --shards 1 --replication 1 --max-shards 1 --retry 5 --interval 10')
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -178,6 +183,11 @@ class TestRangerAdmin(RMFTestCase):
self.assertResourceCalled('Execute','ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /ambari-solr/configs/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
self.assertResourceCalled('Execute', 'ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /ambari-solr/collections/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
index f6f0af3..7ebe2f5 100644
--- a/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
+++ b/ambari-server/src/test/python/stacks/2.5/RANGER_KMS/test_kms_server.py
@@ -236,6 +236,11 @@ class TestRangerKMS(RMFTestCase):
sudo=True
)
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-kms/install.properties',
+ owner = 'kms',
+ properties = {'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/hdp/current/ranger-kms/ranger-kms start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangerkms | grep -v grep',
@@ -671,6 +676,11 @@ class TestRangerKMS(RMFTestCase):
sudo=True
)
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-kms/install.properties',
+ owner = 'kms',
+ properties = {'db_password': '_', 'KMS_MASTER_KEY_PASSWD': '_', 'REPOSITORY_CONFIG_PASSWORD': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/hdp/current/ranger-kms/ranger-kms start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangerkms | grep -v grep',
http://git-wip-us.apache.org/repos/asf/ambari/blob/1f19461f/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py b/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
index 9167017..e8bacbd 100644
--- a/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
+++ b/ambari-server/src/test/python/stacks/2.6/RANGER/test_ranger_admin.py
@@ -86,6 +86,11 @@ class TestRangerAdmin(RMFTestCase):
create_parents=True)
self.assertResourceCalledRegexp('^Execute$', '^ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181/infra-solr --create-collection --collection ranger_audits --config-set ranger_audits --shards 1 --replication 1 --max-shards 1 --retry 5 --interval 10')
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
@@ -167,6 +172,11 @@ class TestRangerAdmin(RMFTestCase):
self.assertResourceCalled('Execute','ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /infra-solr/configs/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
self.assertResourceCalled('Execute', 'ambari-sudo.sh JAVA_HOME=/usr/jdk64/jdk1.7.0_45 /usr/lib/ambari-infra-solr-client/solrCloudCli.sh --zookeeper-connect-string c6401.ambari.apache.org:2181 --znode /infra-solr/collections/ranger_audits --secure-znode --jaas-file /usr/hdp/current/ranger-admin/conf/ranger_solr_jaas.conf --sasl-users rangeradmin,infra-solr --retry 5 --interval 10')
+ self.assertResourceCalled('ModifyPropertiesFile', '/usr/hdp/current/ranger-admin/install.properties',
+ owner = 'ranger',
+ properties = {'db_password': '_', 'db_root_password': '_'}
+ )
+
self.assertResourceCalled('Execute', '/usr/bin/ranger-admin-start',
environment = {'JAVA_HOME': u'/usr/jdk64/jdk1.7.0_45'},
not_if = 'ps -ef | grep proc_rangeradmin | grep -v grep',
[10/26] ambari git commit: Merge branch 'branch-feature-AMBARI-12556'
into trunk
Posted by rl...@apache.org.
Merge branch 'branch-feature-AMBARI-12556' into trunk
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/acc12fb7
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/acc12fb7
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/acc12fb7
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: acc12fb7232c8bcd007fe38a942209b853ce3618
Parents: 8d129d4 382da97
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 12 12:48:52 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Mon Jun 12 12:48:52 2017 -0400
----------------------------------------------------------------------
.../test/python/ambari_agent/TestHostInfo.py | 107 ++++++++++
.../libraries/functions/conf_select.py | 1 -
.../libraries/functions/packages_analyzer.py | 53 ++++-
.../libraries/script/script.py | 25 ++-
.../actionmanager/ExecutionCommandWrapper.java | 65 +++---
.../ambari/server/agent/ExecutionCommand.java | 57 ++++--
.../AmbariCustomCommandExecutionHelper.java | 4 +-
.../AmbariManagementControllerImpl.java | 2 -
.../ambari/server/orm/dao/HostVersionDAO.java | 16 ++
.../server/orm/entities/HostVersionEntity.java | 5 +
.../ServiceComponentDesiredStateEntity.java | 2 +-
.../upgrades/FinalizeUpgradeAction.java | 57 +++++-
.../server/state/RepositoryVersionState.java | 31 ++-
.../apache/ambari/server/state/ServiceImpl.java | 2 +-
.../server/upgrade/UpgradeCatalog300.java | 13 +-
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 +-
.../STORM/0.9.1/package/scripts/params_linux.py | 2 -
.../1.0.1.3.0/package/scripts/params_linux.py | 2 -
.../custom_actions/scripts/install_packages.py | 25 ++-
.../AmbariCustomCommandExecutionHelperTest.java | 11 +-
.../upgrades/UpgradeActionTest.java | 109 ++++++++--
.../custom_actions/TestInstallPackages.py | 202 +++++++------------
.../configs/install_packages_config.json | 19 +-
.../stacks/2.0.6/HBASE/test_hbase_master.py | 11 +-
.../stacks/2.0.6/configs/hbase_with_phx.json | 12 ++
ambari-web/app/app.js | 8 +-
.../main/admin/stack_and_upgrade_controller.js | 6 +-
ambari-web/app/data/controller_route.js | 2 +-
ambari-web/app/messages.js | 4 +-
.../models/stack_version/repository_version.js | 2 +-
.../stack_upgrade/upgrade_version_box_view.js | 8 +-
.../upgrade_version_column_view.js | 2 +-
.../admin/stack_upgrade/upgrade_wizard_view.js | 2 +-
.../main/admin/stack_upgrade/versions_view.js | 2 +-
ambari-web/test/app_test.js | 10 +-
.../admin/stack_and_upgrade_controller_test.js | 18 +-
.../upgrade_version_box_view_test.js | 28 +--
.../stack_upgrade/upgrade_wizard_view_test.js | 2 +-
.../admin/stack_upgrade/version_view_test.js | 6 +-
utility/pom.xml | 21 ++
45 files changed, 650 insertions(+), 316 deletions(-)
----------------------------------------------------------------------
[14/26] ambari git commit: Revert "AMBARI-20122 - Stack advisor needs
to recommend dependency for slaves and masters"
Posted by rl...@apache.org.
Revert "AMBARI-20122 - Stack advisor needs to recommend dependency for slaves and masters"
This reverts commit 0b6d0dcef10ec60c83ad055567b487104573ae62.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/75152614
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/75152614
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/75152614
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 75152614e84299d16f36a6c6d7387b77a172eb96
Parents: f1ca09c
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Sun Jun 11 22:32:46 2017 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Mon Jun 12 15:46:51 2017 -0700
----------------------------------------------------------------------
.../src/main/resources/stacks/stack_advisor.py | 115 +-------------
.../stacks/2.0.6/common/test_stack_advisor.py | 153 -------------------
2 files changed, 5 insertions(+), 263 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/75152614/ambari-server/src/main/resources/stacks/stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/stack_advisor.py b/ambari-server/src/main/resources/stacks/stack_advisor.py
index 6bc8fe4..4a81dc6 100644
--- a/ambari-server/src/main/resources/stacks/stack_advisor.py
+++ b/ambari-server/src/main/resources/stacks/stack_advisor.py
@@ -756,19 +756,15 @@ class DefaultStackAdvisor(StackAdvisor):
if hostName not in hostsComponentsMap:
hostsComponentsMap[hostName] = []
- #Sort the services so that the dependent services will be processed before those that depend on them.
- sortedServices = self.getServicesSortedByDependencies(services)
#extend hostsComponentsMap' with MASTER components
- for service in sortedServices:
+ for service in services["services"]:
masterComponents = [component for component in service["components"] if self.isMasterComponent(component)]
serviceName = service["StackServices"]["service_name"]
serviceAdvisor = self.getServiceAdvisor(serviceName)
for component in masterComponents:
componentName = component["StackServiceComponents"]["component_name"]
advisor = serviceAdvisor if serviceAdvisor is not None else self
- #Filter the hosts such that only hosts that meet the dependencies are included (if possible)
- filteredHosts = self.getFilteredHostsBasedOnDependencies(services, component, hostsList, hostsComponentsMap)
- hostsForComponent = advisor.getHostsForMasterComponent(services, hosts, component, filteredHosts)
+ hostsForComponent = advisor.getHostsForMasterComponent(services, hosts, component, hostsList)
#extend 'hostsComponentsMap' with 'hostsForComponent'
for hostName in hostsForComponent:
@@ -782,7 +778,7 @@ class DefaultStackAdvisor(StackAdvisor):
utilizedHosts = [item for sublist in usedHostsListList for item in sublist]
freeHosts = [hostName for hostName in hostsList if hostName not in utilizedHosts]
- for service in sortedServices:
+ for service in services["services"]:
slaveClientComponents = [component for component in service["components"]
if self.isSlaveComponent(component) or self.isClientComponent(component)]
serviceName = service["StackServices"]["service_name"]
@@ -790,10 +786,7 @@ class DefaultStackAdvisor(StackAdvisor):
for component in slaveClientComponents:
componentName = component["StackServiceComponents"]["component_name"]
advisor = serviceAdvisor if serviceAdvisor is not None else self
- #Filter the hosts and free hosts such that only hosts that meet the dependencies are included (if possible)
- filteredHosts = self.getFilteredHostsBasedOnDependencies(services, component, hostsList, hostsComponentsMap)
- filteredFreeHosts = self.filterList(freeHosts, filteredHosts)
- hostsForComponent = advisor.getHostsForSlaveComponent(services, hosts, component, filteredHosts, filteredFreeHosts)
+ hostsForComponent = advisor.getHostsForSlaveComponent(services, hosts, component, hostsList, freeHosts)
#extend 'hostsComponentsMap' with 'hostsForComponent'
for hostName in hostsForComponent:
@@ -803,7 +796,7 @@ class DefaultStackAdvisor(StackAdvisor):
hostsComponentsMap[hostName].append( { "name": componentName } )
#colocate custom services
- for service in sortedServices:
+ for service in services["services"]:
serviceName = service["StackServices"]["service_name"]
serviceAdvisor = self.getServiceAdvisor(serviceName)
if serviceAdvisor is not None:
@@ -873,104 +866,6 @@ class DefaultStackAdvisor(StackAdvisor):
return hostsForComponent
- def getServicesSortedByDependencies(self, services):
- """
- Sorts the services based on their dependencies. This is limited to non-conditional host scope dependencies.
- Services with no dependencies will go first. Services with dependencies will go after the services they are dependent on.
- If there are circular dependencies, the services will go in the order in which they were processed.
- """
- processedServices = []
- sortedServices = []
-
- for service in services["services"]:
- self.sortServicesByDependencies(services, service, processedServices, sortedServices)
-
- return sortedServices
-
- def sortServicesByDependencies(self, services, service, processedServices, sortedServices):
- """
- Sorts the services based on their dependencies. This is limited to non-conditional host scope dependencies.
- Services with no dependencies will go first. Services with dependencies will go after the services they are dependent on.
- If there are circular dependencies, the services will go in the order in which they were processed.
- """
- if service in processedServices:
- return
-
- processedServices.append(service)
-
- for component in service["components"]:
- dependencies = [] if "dependencies" not in component else component['dependencies']
- for dependency in dependencies:
- # accounts only for dependencies that are not conditional
- conditionsPresent = "conditions" in dependency["Dependencies"] and dependency["Dependencies"]["conditions"]
- scope = "cluster" if "scope" not in dependency["Dependencies"] else dependency["Dependencies"]["scope"]
- if not conditionsPresent and scope == "host":
- componentName = component["StackServiceComponents"]["component_name"]
- requiredComponentName = dependency["Dependencies"]["component_name"]
- requiredService = self.getServiceForComponentName(services, requiredComponentName)
- self.sortServicesByDependencies(services, requiredService, processedServices, sortedServices)
-
- sortedServices.append(service)
-
- def getFilteredHostsBasedOnDependencies(self, services, component, hostsList, hostsComponentsMap):
- """
- Returns a list of hosts that only includes the ones which have all host scope dependencies already assigned to them.
- If an empty list would be returned, instead the full list of hosts are returned.
- In that case, we can't possibly return a valid recommended layout so we will at least return a fully filled layout.
- """
- removeHosts = []
- dependencies = [] if "dependencies" not in component else component['dependencies']
- for dependency in dependencies:
- # accounts only for dependencies that are not conditional
- conditionsPresent = "conditions" in dependency["Dependencies"] and dependency["Dependencies"]["conditions"]
- if not conditionsPresent:
- componentName = component["StackServiceComponents"]["component_name"]
- requiredComponentName = dependency["Dependencies"]["component_name"]
- requiredComponent = self.getRequiredComponent(services, requiredComponentName)
-
- # We only deal with "host" scope.
- if (requiredComponent is not None) and (requiredComponent["component_category"] != "CLIENT"):
- scope = "cluster" if "scope" not in dependency["Dependencies"] else dependency["Dependencies"]["scope"]
- if scope == "host":
- for host, hostComponents in hostsComponentsMap.iteritems():
- isRequiredIncluded = False
- for component in hostComponents:
- currentComponentName = None if "name" not in component else component["name"]
- if requiredComponentName == currentComponentName:
- isRequiredIncluded = True
- if not isRequiredIncluded:
- removeHosts.append(host)
-
- filteredHostsList = []
- for host in hostsList:
- if host not in removeHosts:
- filteredHostsList.append(host)
- return filteredHostsList
-
- def filterList(self, list, filter):
- """
- Returns the union of the two lists passed in (list and filter params).
- """
- filteredList = []
- for item in list:
- if item in filter:
- filteredList.append(item)
- return filteredList
-
- def getServiceForComponentName(self, services, componentName):
- """
- Return service for component name
-
- :type services dict
- :type componentName str
- """
- for service in services["services"]:
- for component in service["components"]:
- if self.getComponentName(component) == componentName:
- return service
-
- return None
-
def isComponentUsingCardinalityForLayout(self, componentName):
return False
http://git-wip-us.apache.org/repos/asf/ambari/blob/75152614/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
index b6f1965..41c57f6 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/common/test_stack_advisor.py
@@ -191,159 +191,6 @@ class TestHDP206StackAdvisor(TestCase):
]
self.assertValidationResult(expectedItems, result)
-
- def test_handleComponentDependencies(self):
- services = {
- "Versions":
- {
- "stack_name":"HDP",
- "stack_version":"2.0.6"
- },
- "services" : [
- {
- "StackServices" : {
- "service_name" : "HDFS",
- "service_version" : "2.0.6",
- },
- "components": [
- {
- "StackServiceComponents": {
- "stack_version": "2.0.6",
- "stack_name": "HDP",
- "component_category": "MASTER",
- "is_client": False,
- "is_master": True,
- "service_name": "HDFS",
- "cardinality": "1-2",
- "hostnames": [],
- "component_name": "NAMENODE",
- "display_name": "NameNode"
- },
- "dependencies": [
- {
- "Dependencies": {
- "stack_name": "HDP",
- "stack_version": "2.0.6",
- "scope": "cluster",
- "conditions": [
- {
- "configType": "hdfs-site",
- "property": "dfs.nameservices",
- "type": "PropertyExists",
- }
- ],
- "dependent_service_name": "HDFS",
- "dependent_component_name": "NAMENODE",
- "component_name": "ZOOKEEPER_SERVER"
- }
- }
- ]
- }
- ]
- },
- {
- "StackServices" : {
- "service_name" : "ZOOKEEPER",
- "service_version" : "2.0.6",
- },
- "components": [
- {
- "StackServiceComponents": {
- "stack_version": "2.0.6",
- "stack_name": "HDP",
- "component_category": "MASTER",
- "is_client": False,
- "is_master": True,
- "service_name": "HDFS",
- "cardinality": "1-2",
- "hostnames": [],
- "component_name": "ZOOKEEPER_SERVER",
- "display_name": "ZooKeeper Server"
- },
- "dependencies": []
- }
- ]
- }
- ]
- }
-
- nameNodeDependencies = services["services"][0]["components"][0]["dependencies"][0]["Dependencies"]
-
- # Tests for master component with dependencies
-
- hosts = self.prepareHosts(["c6401.ambari.apache.org", "c6402.ambari.apache.org", "c6403.ambari.apache.org", "c6404.ambari.apache.org"])
- services["services"][1]["components"][0]["StackServiceComponents"]["hostnames"] = ["c6402.ambari.apache.org", "c6403.ambari.apache.org"]
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when there are conditions and cluster scope
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "host"
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when there are conditions (even for host scope)
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "cluster"
- originalConditions = nameNodeDependencies["conditions"]
- nameNodeDependencies["conditions"] = []
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when scope is cluster
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "host"
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are enforced for host scope without conditions
- #self.assertEquals(recommendations, "")
- self.assertEquals(len(recommendations['blueprint']['host_groups'][0]['components']), 2)
-
- services["services"][1]["components"][0]["StackServiceComponents"]["is_master"] = False
- services["services"][1]["components"][0]["StackServiceComponents"]["component_category"] = "CLIENT"
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when depending on client components
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- # Tests for slave component with dependencies
- services["services"][0]["components"][0]["StackServiceComponents"]["component_category"] = "SLAVE"
- services["services"][0]["components"][0]["StackServiceComponents"]["is_master"] = False
- services["services"][1]["components"][0]["StackServiceComponents"]["component_category"] = "MASTER"
- services["services"][1]["components"][0]["StackServiceComponents"]["is_master"] = True
-
- nameNodeDependencies["scope"] = "cluster"
- nameNodeDependencies["conditions"] = originalConditions
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when there are conditions and cluster scope
- self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "host"
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when there are conditions (even for host scope)
- self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "cluster"
- nameNodeDependencies["conditions"] = []
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are ignored when scope is cluster
- self.assertEquals(recommendations['blueprint']['host_groups'][2]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][2]['components']), 1)
- self.assertEquals(recommendations['blueprint']['host_groups'][3]['components'][0]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][3]['components']), 1)
-
- nameNodeDependencies["scope"] = "host"
- recommendations = self.stackAdvisor.createComponentLayoutRecommendations(services, hosts)
- # Assert that dependencies are enforced when host scope and no conditions
- self.assertEquals(recommendations['blueprint']['host_groups'][1]['components'][1]['name'], 'NAMENODE')
- self.assertEquals(len(recommendations['blueprint']['host_groups'][1]['components']), 2)
-
-
def test_validateRequiredComponentsPresent(self):
services = {
"Versions":
[20/26] ambari git commit: AMBARI-21239. Ambari leaves a lot of
processes from Hive alert on the machine (aonishuk)
Posted by rl...@apache.org.
AMBARI-21239. Ambari leaves a lot of processes from Hive alert on the machine (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/31ac3c21
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/31ac3c21
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/31ac3c21
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 31ac3c21b71868df4f4e2ac82e72defa79767bd6
Parents: f80c6ee
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Jun 13 17:01:06 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Jun 13 17:01:06 2017 +0300
----------------------------------------------------------------------
.../libraries/functions/hive_check.py | 5 ++++-
.../stacks/2.0.6/HIVE/test_hive_service_check.py | 14 +++++++++++---
2 files changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/31ac3c21/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py b/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
index 92d16a2..d8f6696 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/hive_check.py
@@ -21,6 +21,7 @@ limitations under the License.
from resource_management.core import global_lock
from resource_management.core.resources import Execute
from resource_management.libraries.functions import format
+from resource_management.core.signal_utils import TerminateStrategy
def check_thrift_port_sasl(address, port, hive_auth="NOSASL", key=None, kinitcmd=None, smokeuser='ambari-qa',
@@ -76,4 +77,6 @@ def check_thrift_port_sasl(address, port, hive_auth="NOSASL", key=None, kinitcmd
Execute(cmd,
user=smokeuser,
path=["/bin/", "/usr/bin/", "/usr/lib/hive/bin/", "/usr/sbin/"],
- timeout=check_command_timeout)
+ timeout=check_command_timeout,
+ timeout_kill_strategy=TerminateStrategy.KILL_PROCESS_TREE,
+ )
http://git-wip-us.apache.org/repos/asf/ambari/blob/31ac3c21/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
index 0e5dac7..0d87315 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_service_check.py
@@ -46,6 +46,7 @@ class TestServiceCheck(RMFTestCase):
path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
user = 'ambari-qa',
timeout = 30,
+ timeout_kill_strategy = 2,
)
self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
content = StaticFile('hcatSmoke.sh'),
@@ -160,6 +161,7 @@ class TestServiceCheck(RMFTestCase):
path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
user = 'ambari-qa',
timeout = 30,
+ timeout_kill_strategy = 2,
)
self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
content = StaticFile('hcatSmoke.sh'),
@@ -276,7 +278,9 @@ class TestServiceCheck(RMFTestCase):
self.assertResourceCalled('Execute', "! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10010/;transportMode=binary' -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
timeout = 30,
- user = 'ambari-qa')
+ user = 'ambari-qa',
+ timeout_kill_strategy = 2,
+ )
self.assertResourceCalled('File', '/tmp/hcatSmoke.sh',
content = StaticFile('hcatSmoke.sh'),
@@ -313,13 +317,17 @@ class TestServiceCheck(RMFTestCase):
"! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10010/;transportMode=binary' -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
timeout = 30,
- user = 'ambari-qa')
+ user = 'ambari-qa',
+ timeout_kill_strategy = 2,
+ )
self.assertResourceCalled('Execute',
"! beeline -u 'jdbc:hive2://c6402.ambari.apache.org:10500/;transportMode=binary' -e '' 2>&1| awk '{print}'|grep -i -e 'Connection refused' -e 'Invalid URL'",
path = ['/bin/', '/usr/bin/', '/usr/lib/hive/bin/', '/usr/sbin/'],
timeout = 30,
- user = 'ambari-qa')
+ user = 'ambari-qa',
+ timeout_kill_strategy = 2,
+ )
# LLAP call
self.assertResourceCalled('Execute',
[18/26] ambari git commit: AMBARI-21228. Rename userconfig resource
to event history in Log Search Portal (oleewere)
Posted by rl...@apache.org.
AMBARI-21228. Rename userconfig resource to event history in Log Search Portal (oleewere)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/fc00b2ca
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/fc00b2ca
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/fc00b2ca
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: fc00b2caf927d083c70812bf1552aafa68958d1f
Parents: 27a9938
Author: oleewere <ol...@gmail.com>
Authored: Mon Jun 12 17:12:58 2017 +0200
Committer: oleewere <ol...@gmail.com>
Committed: Tue Jun 13 13:47:23 2017 +0200
----------------------------------------------------------------------
.../logfeeder/common/LogFeederConstants.java | 2 +-
.../ambari/logsearch/conf/SecurityConfig.java | 18 +-
.../ambari/logsearch/conf/SolrConfig.java | 12 +-
.../conf/SolrEventHistoryPropsConfig.java | 116 +++++++++++
.../logsearch/conf/SolrUserPropsConfig.java | 116 -----------
.../conf/global/SolrEventHistoryState.java | 60 ++++++
.../conf/global/SolrUserConfigState.java | 60 ------
.../EventHistoryRequestQueryConverter.java | 67 +++++++
.../UserConfigRequestQueryConverter.java | 67 -------
.../logsearch/dao/EventHistorySolrDao.java | 117 +++++++++++
.../logsearch/dao/SolrSchemaFieldDao.java | 8 +-
.../ambari/logsearch/dao/UserConfigSolrDao.java | 117 -----------
.../ambari/logsearch/doc/DocConstants.java | 12 +-
.../logsearch/manager/EventHistoryManager.java | 199 +++++++++++++++++++
.../logsearch/manager/UserConfigManager.java | 199 -------------------
.../request/EventHistoryParamDefinition.java | 38 ++++
.../request/UserConfigParamDefinition.java | 38 ----
.../model/request/impl/EventHistoryRequest.java | 53 +++++
.../model/request/impl/UserConfigRequest.java | 53 -----
.../model/response/EventHistoryData.java | 97 +++++++++
.../response/EventHistoryDataListResponse.java | 55 +++++
.../model/response/UserConfigData.java | 97 ---------
.../response/UserConfigDataListResponse.java | 55 -----
.../logsearch/rest/EventHistoryResource.java | 82 ++++++++
.../ambari/logsearch/rest/StatusResource.java | 16 +-
.../logsearch/rest/UserConfigResource.java | 82 --------
.../ambari/logsearch/solr/SolrConstants.java | 4 +-
.../LogsearchEventHistoryStateFilter.java | 52 +++++
.../filters/LogsearchUserConfigStateFilter.java | 52 -----
.../EventHistoryRequestQueryConverterTest.java | 50 +++++
.../UserConfigRequestQueryConverterTest.java | 50 -----
.../collection_bases/VEventHistoryListBase.js | 8 +-
.../scripts/model_bases/VUserFilterBase.js | 2 +-
.../main/webapp/scripts/views/common/Header.js | 2 +-
34 files changed, 1028 insertions(+), 1028 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
index a7559aa..a7cccc6 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/src/main/java/org/apache/ambari/logfeeder/common/LogFeederConstants.java
@@ -29,7 +29,7 @@ public class LogFeederConstants {
public static final String SOLR_COMPONENT = "type";
public static final String SOLR_HOST = "host";
- // UserConfig Constants History
+ // Event History Constants History
public static final String VALUES = "jsons";
public static final String ROW_TYPE = "rowtype";
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
index 973dc4b..441b628 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SecurityConfig.java
@@ -33,7 +33,7 @@ import org.apache.ambari.logsearch.web.filters.LogsearchKRBAuthenticationFilter;
import org.apache.ambari.logsearch.web.filters.LogsearchJWTFilter;
import org.apache.ambari.logsearch.web.filters.LogsearchSecurityContextFormationFilter;
import org.apache.ambari.logsearch.web.filters.LogsearchServiceLogsStateFilter;
-import org.apache.ambari.logsearch.web.filters.LogsearchUserConfigStateFilter;
+import org.apache.ambari.logsearch.web.filters.LogsearchEventHistoryStateFilter;
import org.apache.ambari.logsearch.web.filters.LogsearchUsernamePasswordAuthenticationFilter;
import org.apache.ambari.logsearch.web.security.LogsearchAuthenticationProvider;
import org.springframework.context.annotation.Bean;
@@ -71,7 +71,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
private SolrAuditLogPropsConfig solrAuditLogPropsConfig;
@Inject
- private SolrUserPropsConfig solrUserPropsConfig;
+ private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
@Inject
@Named("solrServiceLogsState")
@@ -82,8 +82,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
private SolrCollectionState solrAuditLogsState;
@Inject
- @Named("solrUserConfigState")
- private SolrCollectionState solrUserConfigState;
+ @Named("solrEventHistoryState")
+ private SolrCollectionState solrEventHistoryState;
@Inject
private LogSearchConfigState logSearchConfigState;
@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
.addFilterBefore(logsearchUsernamePasswordAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(logsearchKRBAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterAfter(securityContextFormationFilter(), FilterSecurityInterceptor.class)
- .addFilterAfter(logsearchUserConfigFilter(), LogsearchSecurityContextFormationFilter.class)
+ .addFilterAfter(logsearchEventHistoryFilter(), LogsearchSecurityContextFormationFilter.class)
.addFilterAfter(logsearchAuditLogFilter(), LogsearchSecurityContextFormationFilter.class)
.addFilterAfter(logsearchServiceLogFilter(), LogsearchSecurityContextFormationFilter.class)
.addFilterAfter(logSearchConfigStateFilter(), LogsearchSecurityContextFormationFilter.class)
@@ -179,8 +179,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
}
@Bean
- public LogsearchUserConfigStateFilter logsearchUserConfigFilter() {
- return new LogsearchUserConfigStateFilter(userConfigRequestMatcher(), solrUserConfigState, solrUserPropsConfig);
+ public LogsearchEventHistoryStateFilter logsearchEventHistoryFilter() {
+ return new LogsearchEventHistoryStateFilter(eventHistoryRequestMatcher(), solrEventHistoryState, solrEventHistoryPropsConfig);
}
public LogSearchConfigStateFilter logSearchConfigStateFilter() {
@@ -213,8 +213,8 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
return new AntPathRequestMatcher("/api/v1/audit/logs/**");
}
- public RequestMatcher userConfigRequestMatcher() {
- return new AntPathRequestMatcher("/api/v1/userconfig/**");
+ public RequestMatcher eventHistoryRequestMatcher() {
+ return new AntPathRequestMatcher("/api/v1/history/**");
}
public RequestMatcher logsearchConfigRequestMatcher() {
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
index f00e8c5..f9144ff 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrConfig.java
@@ -21,7 +21,7 @@ package org.apache.ambari.logsearch.conf;
import org.apache.ambari.logsearch.conf.global.SolrAuditLogsState;
import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
import org.apache.ambari.logsearch.conf.global.SolrServiceLogsState;
-import org.apache.ambari.logsearch.conf.global.SolrUserConfigState;
+import org.apache.ambari.logsearch.conf.global.SolrEventHistoryState;
import org.apache.ambari.logsearch.dao.SolrSchemaFieldDao;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -46,9 +46,9 @@ public class SolrConfig {
return null;
}
- @Bean(name = "userConfigSolrTemplate")
+ @Bean(name = "eventHistorySolrTemplate")
@DependsOn("serviceSolrTemplate")
- public SolrTemplate userConfigSolrTemplate() {
+ public SolrTemplate eventHistorySolrTemplate() {
return null;
}
@@ -68,9 +68,9 @@ public class SolrConfig {
return new SolrAuditLogsState();
}
- @Bean(name = "solrUserConfigState")
- public SolrCollectionState solrUserConfigState() {
- return new SolrUserConfigState();
+ @Bean(name = "solrEventHistoryState")
+ public SolrCollectionState solrEventHistoryState() {
+ return new SolrEventHistoryState();
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
new file mode 100644
index 0000000..a117501
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrEventHistoryPropsConfig.java
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.conf;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+@Configuration
+public class SolrEventHistoryPropsConfig extends SolrConnectionPropsConfig {
+
+ @Value("${logsearch.solr.collection.history:history}")
+ private String collection;
+
+ @Value("${logsearch.history.split.interval.mins:none}")
+ private String splitInterval;
+
+ @Value("${logsearch.solr.history.config.name:history}")
+ private String configName;
+
+ @Value("${logsearch.collection.history.numshards:1}")
+ private Integer numberOfShards;
+
+ @Value("${logsearch.collection.history.replication.factor:2}")
+ private Integer replicationFactor;
+
+ @Value("#{'${logsearch.logfeeder.include.default.level:FATAL,ERROR,WARN,INFO,DEBUG,TRACE,UNKNOWN}'.split(',')}")
+ private List<String> logLevels;
+
+ @Value("${logsearch.schema.fields.populate.interval.mins:1}")
+ private Integer populateIntervalMins;
+
+ @Override
+ public String getCollection() {
+ return collection;
+ }
+
+ @Override
+ public void setCollection(String collection) {
+ this.collection = collection;
+ }
+
+ @Override
+ public String getSplitInterval() {
+ return splitInterval;
+ }
+
+ @Override
+ public void setSplitInterval(String splitInterval) {
+ this.splitInterval = splitInterval;
+ }
+
+ @Override
+ public String getConfigName() {
+ return configName;
+ }
+
+ @Override
+ public void setConfigName(String configName) {
+ this.configName = configName;
+ }
+
+ @Override
+ public Integer getNumberOfShards() {
+ return numberOfShards;
+ }
+
+ @Override
+ public void setNumberOfShards(Integer numberOfShards) {
+ this.numberOfShards = numberOfShards;
+ }
+
+ @Override
+ public Integer getReplicationFactor() {
+ return replicationFactor;
+ }
+
+ @Override
+ public void setReplicationFactor(Integer replicationFactor) {
+ this.replicationFactor = replicationFactor;
+ }
+
+ public List<String> getLogLevels() {
+ return logLevels;
+ }
+
+ public void setLogLevels(List<String> logLevels) {
+ this.logLevels = logLevels;
+ }
+
+
+ public Integer getPopulateIntervalMins() {
+ return populateIntervalMins;
+ }
+
+ void setPopulateIntervalMins(Integer populateIntervalMins) {
+ this.populateIntervalMins = populateIntervalMins;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
deleted file mode 100644
index c8c96c8..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/SolrUserPropsConfig.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.conf;
-
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.List;
-
-@Configuration
-public class SolrUserPropsConfig extends SolrConnectionPropsConfig {
-
- @Value("${logsearch.solr.collection.history:history}")
- private String collection;
-
- @Value("${logsearch.history.split.interval.mins:none}")
- private String splitInterval;
-
- @Value("${logsearch.solr.history.config.name:history}")
- private String configName;
-
- @Value("${logsearch.collection.history.numshards:1}")
- private Integer numberOfShards;
-
- @Value("${logsearch.collection.history.replication.factor:2}")
- private Integer replicationFactor;
-
- @Value("#{'${logsearch.logfeeder.include.default.level:FATAL,ERROR,WARN,INFO,DEBUG,TRACE,UNKNOWN}'.split(',')}")
- private List<String> logLevels;
-
- @Value("${logsearch.schema.fields.populate.interval.mins:1}")
- private Integer populateIntervalMins;
-
- @Override
- public String getCollection() {
- return collection;
- }
-
- @Override
- public void setCollection(String collection) {
- this.collection = collection;
- }
-
- @Override
- public String getSplitInterval() {
- return splitInterval;
- }
-
- @Override
- public void setSplitInterval(String splitInterval) {
- this.splitInterval = splitInterval;
- }
-
- @Override
- public String getConfigName() {
- return configName;
- }
-
- @Override
- public void setConfigName(String configName) {
- this.configName = configName;
- }
-
- @Override
- public Integer getNumberOfShards() {
- return numberOfShards;
- }
-
- @Override
- public void setNumberOfShards(Integer numberOfShards) {
- this.numberOfShards = numberOfShards;
- }
-
- @Override
- public Integer getReplicationFactor() {
- return replicationFactor;
- }
-
- @Override
- public void setReplicationFactor(Integer replicationFactor) {
- this.replicationFactor = replicationFactor;
- }
-
- public List<String> getLogLevels() {
- return logLevels;
- }
-
- public void setLogLevels(List<String> logLevels) {
- this.logLevels = logLevels;
- }
-
-
- public Integer getPopulateIntervalMins() {
- return populateIntervalMins;
- }
-
- void setPopulateIntervalMins(Integer populateIntervalMins) {
- this.populateIntervalMins = populateIntervalMins;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
new file mode 100644
index 0000000..c31e69e
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrEventHistoryState.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.conf.global;
+
+import javax.inject.Named;
+
+@Named
+public class SolrEventHistoryState implements SolrCollectionState {
+
+ private volatile boolean znodeReady;
+ private volatile boolean solrCollectionReady;
+ private volatile boolean configurationUploaded;
+
+ @Override
+ public boolean isZnodeReady() {
+ return znodeReady;
+ }
+
+ @Override
+ public void setZnodeReady(boolean znodeAvailable) {
+ this.znodeReady = znodeAvailable;
+ }
+
+ @Override
+ public boolean isSolrCollectionReady() {
+ return solrCollectionReady;
+ }
+
+ @Override
+ public void setSolrCollectionReady(boolean solrCollectionReady) {
+ this.solrCollectionReady = solrCollectionReady;
+ }
+
+ @Override
+ public boolean isConfigurationUploaded() {
+ return configurationUploaded;
+ }
+
+ @Override
+ public void setConfigurationUploaded(boolean configurationUploaded) {
+ this.configurationUploaded = configurationUploaded;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
deleted file mode 100644
index 06af14c..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/conf/global/SolrUserConfigState.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.conf.global;
-
-import javax.inject.Named;
-
-@Named
-public class SolrUserConfigState implements SolrCollectionState {
-
- private volatile boolean znodeReady;
- private volatile boolean solrCollectionReady;
- private volatile boolean configurationUploaded;
-
- @Override
- public boolean isZnodeReady() {
- return znodeReady;
- }
-
- @Override
- public void setZnodeReady(boolean znodeAvailable) {
- this.znodeReady = znodeAvailable;
- }
-
- @Override
- public boolean isSolrCollectionReady() {
- return solrCollectionReady;
- }
-
- @Override
- public void setSolrCollectionReady(boolean solrCollectionReady) {
- this.solrCollectionReady = solrCollectionReady;
- }
-
- @Override
- public boolean isConfigurationUploaded() {
- return configurationUploaded;
- }
-
- @Override
- public void setConfigurationUploaded(boolean configurationUploaded) {
- this.configurationUploaded = configurationUploaded;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
new file mode 100644
index 0000000..c67c31b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverter.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.converter;
+
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.util.SolrUtil;
+import org.apache.commons.lang.StringUtils;
+import org.apache.solr.client.solrj.SolrQuery;
+
+import javax.inject.Named;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.ambari.logsearch.solr.SolrConstants.CommonLogConstants.CLUSTER;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.FILTER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ROW_TYPE;
+
+@Named
+public class EventHistoryRequestQueryConverter extends AbstractConverterAware<EventHistoryRequest, SolrQuery> {
+
+ @Override
+ public SolrQuery convert(EventHistoryRequest eventHistoryRequest) {
+ SolrQuery eventHistoryQuery = new SolrQuery();
+ eventHistoryQuery.setQuery("*:*");
+
+ int startIndex = StringUtils.isNotEmpty(eventHistoryRequest.getStartIndex()) && StringUtils.isNumeric(eventHistoryRequest.getStartIndex())
+ ? Integer.parseInt(eventHistoryRequest.getStartIndex()) : 0;
+ int maxRows = StringUtils.isNotEmpty(eventHistoryRequest.getPageSize()) && StringUtils.isNumeric(eventHistoryRequest.getPageSize())
+ ? Integer.parseInt(eventHistoryRequest.getPageSize()) : 10;
+
+ SolrQuery.ORDER order = eventHistoryRequest.getSortType() != null && SolrQuery.ORDER.desc.equals(SolrQuery.ORDER.valueOf(eventHistoryRequest.getSortType()))
+ ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc;
+ String sortBy = StringUtils.isNotEmpty(eventHistoryRequest.getSortBy()) ? eventHistoryRequest.getSortBy() : FILTER_NAME;
+ String filterName = StringUtils.isBlank(eventHistoryRequest.getFilterName()) ? "*" : "*" + eventHistoryRequest.getFilterName() + "*";
+
+ eventHistoryQuery.addFilterQuery(String.format("%s:%s", ROW_TYPE, eventHistoryRequest.getRowType()));
+ eventHistoryQuery.addFilterQuery(String.format("%s:%s", FILTER_NAME, SolrUtil.makeSearcableString(filterName)));
+ eventHistoryQuery.setStart(startIndex);
+ eventHistoryQuery.setRows(maxRows);
+
+ SolrQuery.SortClause sortOrder = SolrQuery.SortClause.create(sortBy, order);
+ List<SolrQuery.SortClause> sort = new ArrayList<>();
+ sort.add(sortOrder);
+ eventHistoryQuery.setSorts(sort);
+
+ SolrUtil.addListFilterToSolrQuery(eventHistoryQuery, CLUSTER, eventHistoryRequest.getClusters());
+
+ return eventHistoryQuery;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
deleted file mode 100644
index 594f23b..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.converter;
-
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.util.SolrUtil;
-import org.apache.commons.lang.StringUtils;
-import org.apache.solr.client.solrj.SolrQuery;
-
-import javax.inject.Named;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static org.apache.ambari.logsearch.solr.SolrConstants.CommonLogConstants.CLUSTER;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.FILTER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ROW_TYPE;
-
-@Named
-public class UserConfigRequestQueryConverter extends AbstractConverterAware<UserConfigRequest, SolrQuery> {
-
- @Override
- public SolrQuery convert(UserConfigRequest userConfigRequest) {
- SolrQuery userConfigQuery = new SolrQuery();
- userConfigQuery.setQuery("*:*");
-
- int startIndex = StringUtils.isNotEmpty(userConfigRequest.getStartIndex()) && StringUtils.isNumeric(userConfigRequest.getStartIndex())
- ? Integer.parseInt(userConfigRequest.getStartIndex()) : 0;
- int maxRows = StringUtils.isNotEmpty(userConfigRequest.getPageSize()) && StringUtils.isNumeric(userConfigRequest.getPageSize())
- ? Integer.parseInt(userConfigRequest.getPageSize()) : 10;
-
- SolrQuery.ORDER order = userConfigRequest.getSortType() != null && SolrQuery.ORDER.desc.equals(SolrQuery.ORDER.valueOf(userConfigRequest.getSortType()))
- ? SolrQuery.ORDER.desc : SolrQuery.ORDER.asc;
- String sortBy = StringUtils.isNotEmpty(userConfigRequest.getSortBy()) ? userConfigRequest.getSortBy() : FILTER_NAME;
- String filterName = StringUtils.isBlank(userConfigRequest.getFilterName()) ? "*" : "*" + userConfigRequest.getFilterName() + "*";
-
- userConfigQuery.addFilterQuery(String.format("%s:%s", ROW_TYPE, userConfigRequest.getRowType()));
- userConfigQuery.addFilterQuery(String.format("%s:%s", FILTER_NAME, SolrUtil.makeSearcableString(filterName)));
- userConfigQuery.setStart(startIndex);
- userConfigQuery.setRows(maxRows);
-
- SolrQuery.SortClause sortOrder = SolrQuery.SortClause.create(sortBy, order);
- List<SolrQuery.SortClause> sort = new ArrayList<>();
- sort.add(sortOrder);
- userConfigQuery.setSorts(sort);
-
- SolrUtil.addListFilterToSolrQuery(userConfigQuery, CLUSTER, userConfigRequest.getClusters());
-
- return userConfigQuery;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
new file mode 100644
index 0000000..aff4061
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/EventHistorySolrDao.java
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.dao;
+
+import java.io.IOException;
+
+import javax.annotation.PostConstruct;
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import org.apache.ambari.logsearch.common.LogSearchContext;
+import org.apache.ambari.logsearch.common.LogType;
+import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrInputDocument;
+
+import org.apache.log4j.Logger;
+import org.springframework.data.solr.core.SolrTemplate;
+
+@Named
+public class EventHistorySolrDao extends SolrDaoBase {
+
+ private static final Logger LOG = Logger.getLogger(EventHistorySolrDao.class);
+
+ private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
+
+ @Inject
+ private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
+
+ @Inject
+ @Named("eventHistorySolrTemplate")
+ private SolrTemplate eventHistorySolrTemplate;
+
+ @Inject
+ @Named("solrEventHistoryState")
+ private SolrCollectionState solrEventHistoryState;
+
+ public EventHistorySolrDao() {
+ super(LogType.SERVICE);
+ }
+
+ @Override
+ public SolrTemplate getSolrTemplate() {
+ return eventHistorySolrTemplate;
+ }
+
+ @Override
+ public void setSolrTemplate(SolrTemplate solrTemplate) {
+ this.eventHistorySolrTemplate = solrTemplate;
+ }
+
+ @PostConstruct
+ public void postConstructor() {
+ String solrUrl = solrEventHistoryPropsConfig.getSolrUrl();
+ String zkConnectString = solrEventHistoryPropsConfig.getZkConnectString();
+ String collection = solrEventHistoryPropsConfig.getCollection();
+
+ try {
+ new SolrCollectionConfigurer(this, false).start();
+ } catch (Exception e) {
+ LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
+ ", collection=" + collection, e);
+ }
+ }
+
+ public void deleteEventHistoryData(String id) throws SolrException, SolrServerException, IOException {
+ removeDoc("id:" + id);
+ }
+
+ public UpdateResponse addDocs(SolrInputDocument doc) throws SolrServerException, IOException, SolrException {
+ UpdateResponse updateResoponse = getSolrClient().add(doc);
+ LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
+ " Update Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
+ getSolrClient().commit();
+ return updateResoponse;
+ }
+
+ public UpdateResponse removeDoc(String query) throws SolrServerException, IOException, SolrException {
+ UpdateResponse updateResoponse = getSolrClient().deleteByQuery(query);
+ getSolrClient().commit();
+ LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
+ " Remove Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
+ return updateResoponse;
+ }
+
+ @Override
+ public SolrCollectionState getSolrCollectionState() {
+ return solrEventHistoryState;
+ }
+
+ @Override
+ public SolrPropsConfig getSolrPropsConfig() {
+ return solrEventHistoryPropsConfig;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
index 01378c1..d99694b 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/SolrSchemaFieldDao.java
@@ -21,7 +21,7 @@ package org.apache.ambari.logsearch.dao;
import org.apache.ambari.logsearch.common.LogSearchConstants;
import org.apache.ambari.logsearch.common.LogType;
import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.conf.SolrUserPropsConfig;
+import org.apache.ambari.logsearch.conf.SolrEventHistoryPropsConfig;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
@@ -68,7 +68,7 @@ public class SolrSchemaFieldDao {
private AuditSolrDao auditSolrDao;
@Inject
- private SolrUserPropsConfig solrUserConfigPropsConfig;
+ private SolrEventHistoryPropsConfig solrEventHistoryPropsConfig;
private int retryCount;
private int skipCount;
@@ -117,9 +117,9 @@ public class SolrSchemaFieldDao {
if (schemaResponse != null) {
extractSchemaFieldsName(lukeResponses, schemaResponse, schemaFieldNameMap, schemaFieldTypeMap);
LOG.debug("Populate fields for collection " + solrClient.getDefaultCollection()+ " was successful, next update it after " +
- solrUserConfigPropsConfig.getPopulateIntervalMins() + " minutes");
+ solrEventHistoryPropsConfig.getPopulateIntervalMins() + " minutes");
retryCount = 0;
- skipCount = (solrUserConfigPropsConfig.getPopulateIntervalMins() * 60) / RETRY_SECOND - 1;
+ skipCount = (solrEventHistoryPropsConfig.getPopulateIntervalMins() * 60) / RETRY_SECOND - 1;
}
else {
retryCount++;
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
deleted file mode 100644
index a0e01a3..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/dao/UserConfigSolrDao.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.dao;
-
-import java.io.IOException;
-
-import javax.annotation.PostConstruct;
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import org.apache.ambari.logsearch.common.LogSearchContext;
-import org.apache.ambari.logsearch.common.LogType;
-import org.apache.ambari.logsearch.conf.SolrPropsConfig;
-import org.apache.ambari.logsearch.conf.SolrUserPropsConfig;
-import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
-import org.apache.ambari.logsearch.configurer.SolrCollectionConfigurer;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.response.UpdateResponse;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrInputDocument;
-
-import org.apache.log4j.Logger;
-import org.springframework.data.solr.core.SolrTemplate;
-
-@Named
-public class UserConfigSolrDao extends SolrDaoBase {
-
- private static final Logger LOG = Logger.getLogger(UserConfigSolrDao.class);
-
- private static final Logger LOG_PERFORMANCE = Logger.getLogger("org.apache.ambari.logsearch.performance");
-
- @Inject
- private SolrUserPropsConfig solrUserConfig;
-
- @Inject
- @Named("userConfigSolrTemplate")
- private SolrTemplate userConfigSolrTemplate;
-
- @Inject
- @Named("solrUserConfigState")
- private SolrCollectionState solrUserConfigState;
-
- public UserConfigSolrDao() {
- super(LogType.SERVICE);
- }
-
- @Override
- public SolrTemplate getSolrTemplate() {
- return userConfigSolrTemplate;
- }
-
- @Override
- public void setSolrTemplate(SolrTemplate solrTemplate) {
- this.userConfigSolrTemplate = solrTemplate;
- }
-
- @PostConstruct
- public void postConstructor() {
- String solrUrl = solrUserConfig.getSolrUrl();
- String zkConnectString = solrUserConfig.getZkConnectString();
- String collection = solrUserConfig.getCollection();
-
- try {
- new SolrCollectionConfigurer(this, false).start();
- } catch (Exception e) {
- LOG.error("error while connecting to Solr for history logs : solrUrl=" + solrUrl + ", zkConnectString=" + zkConnectString +
- ", collection=" + collection, e);
- }
- }
-
- public void deleteUserConfig(String id) throws SolrException, SolrServerException, IOException {
- removeDoc("id:" + id);
- }
-
- public UpdateResponse addDocs(SolrInputDocument doc) throws SolrServerException, IOException, SolrException {
- UpdateResponse updateResoponse = getSolrClient().add(doc);
- LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
- " Update Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
- getSolrClient().commit();
- return updateResoponse;
- }
-
- public UpdateResponse removeDoc(String query) throws SolrServerException, IOException, SolrException {
- UpdateResponse updateResoponse = getSolrClient().deleteByQuery(query);
- getSolrClient().commit();
- LOG_PERFORMANCE.info("\n Username :- " + LogSearchContext.getCurrentUsername() +
- " Remove Time Execution :- " + updateResoponse.getQTime() + " Total Time Elapsed is :- " + updateResoponse.getElapsedTime());
- return updateResoponse;
- }
-
- @Override
- public SolrCollectionState getSolrCollectionState() {
- return solrUserConfigState;
- }
-
- @Override
- public SolrPropsConfig getSolrPropsConfig() {
- return solrUserConfig;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
index 885771d..2ab5f0a 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/doc/DocConstants.java
@@ -104,15 +104,15 @@ public class DocConstants {
public static final String OBTAIN_GENERAL_CONFIG_OD = "Obtain general config";
}
- public class UserConfigDescriptions {
+ public class EventHistoryDescriptions {
public static final String FILTER_NAME_D = "The saved query as filter in Solr, search is sopprted by this param";
public static final String ROW_TYPE_D = "Row type is solr to identify as filter query";
}
- public class UserConfigOperationDescriptions {
- public static final String SAVE_USER_CONFIG_OD = "Save user config";
- public static final String DELETE_USER_CONFIG_OD = "Delete user config";
- public static final String GET_USER_CONFIG_OD = "Get user config";
+ public class EventHistoryOperationDescriptions {
+ public static final String SAVE_EVENT_HISTORY_DATA_OD = "Save event history data";
+ public static final String DELETE_EVENT_HISTORY_DATA_OD = "Delete event history data";
+ public static final String GET_EVENT_HISTORY_DATA_OD = "Get event history data";
public static final String GET_ALL_USER_NAMES_OD = "Get all user names";
}
@@ -128,6 +128,6 @@ public class DocConstants {
public static final String STATUS_OD = "Get statuses for collections (not health state - show true if something already done)";
public static final String SERVICE_LOGS_STATUS_OD = "Get statuses for service log collection (not health state - show true if something already done)";
public static final String AUDIT_LOGS_STATUS_OD = "Get statuses for collections (not health state - show true if something already done)";
- public static final String USER_CONFIG_STATUS_OD = "Get statuses for userconfig collection (not health state - show true if something already done)";
+ public static final String EVENT_HISTORY_STATUS_OD = "Get statuses for history collection (not health state - show true if something already done)";
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
new file mode 100644
index 0000000..389f8eb
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/EventHistoryManager.java
@@ -0,0 +1,199 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.manager;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.ambari.logsearch.common.LogSearchContext;
+import org.apache.ambari.logsearch.common.MessageEnums;
+import org.apache.ambari.logsearch.dao.EventHistorySolrDao;
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.model.response.EventHistoryData;
+import org.apache.ambari.logsearch.model.response.EventHistoryDataListResponse;
+import org.apache.ambari.logsearch.util.RESTErrorUtil;
+import org.apache.ambari.logsearch.util.SolrUtil;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.FacetField.Count;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.common.SolrDocumentList;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrInputDocument;
+import org.springframework.core.convert.ConversionService;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ID;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.USER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.VALUES;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.FILTER_NAME;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.ROW_TYPE;
+import static org.apache.ambari.logsearch.solr.SolrConstants.EventHistoryConstants.SHARE_NAME_LIST;
+
+@Named
+public class EventHistoryManager extends JsonManagerBase {
+
+ private static final Logger logger = Logger.getLogger(EventHistoryManager.class);
+
+ @Inject
+ private EventHistorySolrDao eventHistorySolrDao;
+ @Inject
+ private ConversionService conversionService;
+
+ public String saveEvent(EventHistoryData eventHistoryData) {
+ String filterName = eventHistoryData.getFiltername();
+
+ SolrInputDocument solrInputDoc = new SolrInputDocument();
+ if (!isValid(eventHistoryData)) {
+ throw RESTErrorUtil.createRESTException("No FilterName Specified", MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ if (isNotUnique(filterName)) {
+ throw RESTErrorUtil.createRESTException( "Name '" + eventHistoryData.getFiltername() + "' already exists", MessageEnums.INVALID_INPUT_DATA);
+ }
+ solrInputDoc.addField(ID, eventHistoryData.getId());
+ solrInputDoc.addField(USER_NAME, LogSearchContext.getCurrentUsername());
+ solrInputDoc.addField(VALUES, eventHistoryData.getValues());
+ solrInputDoc.addField(FILTER_NAME, filterName);
+ solrInputDoc.addField(ROW_TYPE, eventHistoryData.getRowType());
+ List<String> shareNameList = eventHistoryData.getShareNameList();
+ if (CollectionUtils.isNotEmpty(shareNameList)) {
+ solrInputDoc.addField(SHARE_NAME_LIST, shareNameList);
+ }
+
+ try {
+ eventHistorySolrDao.addDocs(solrInputDoc);
+ return convertObjToString(solrInputDoc);
+ } catch (SolrException | SolrServerException | IOException e) {
+ logger.error("Error saving user config. solrDoc=" + solrInputDoc, e);
+ throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+ }
+ }
+
+ private boolean isNotUnique(String filterName) {
+
+ if (filterName != null) {
+ SolrQuery solrQuery = new SolrQuery();
+ filterName = SolrUtil.makeSearcableString(filterName);
+ solrQuery.setQuery("*:*");
+ solrQuery.addFilterQuery(FILTER_NAME + ":" + filterName);
+ solrQuery.addFilterQuery(USER_NAME + ":" + LogSearchContext.getCurrentUsername());
+ SolrUtil.setRowCount(solrQuery, 0);
+ try {
+ Long numFound = eventHistorySolrDao.process(solrQuery).getResults().getNumFound();
+ if (numFound > 0) {
+ return true;
+ }
+ } catch (SolrException e) {
+ logger.error("Error while checking if event history data is unique.", e);
+ }
+ }
+ return false;
+ }
+
+ private boolean isValid(EventHistoryData vHistory) {
+ return StringUtils.isNotBlank(vHistory.getFiltername())
+ && StringUtils.isNotBlank(vHistory.getRowType())
+ && StringUtils.isNotBlank(vHistory.getValues());
+ }
+
+ public void deleteEvent(String id) {
+ try {
+ eventHistorySolrDao.deleteEventHistoryData(id);
+ } catch (SolrException | SolrServerException | IOException e) {
+ throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ public EventHistoryDataListResponse getEventHistory(EventHistoryRequest request) {
+ EventHistoryDataListResponse response = new EventHistoryDataListResponse();
+ String rowType = request.getRowType();
+ if (StringUtils.isBlank(rowType)) {
+ throw RESTErrorUtil.createRESTException("row type was not specified", MessageEnums.INVALID_INPUT_DATA);
+ }
+
+ SolrQuery evemtHistoryQuery = conversionService.convert(request, SolrQuery.class);
+ evemtHistoryQuery.addFilterQuery(String.format("%s:%s OR %s:%s", USER_NAME, LogSearchContext.getCurrentUsername(),
+ SHARE_NAME_LIST, LogSearchContext.getCurrentUsername()));
+ SolrDocumentList solrList = eventHistorySolrDao.process(evemtHistoryQuery).getResults();
+
+ Collection<EventHistoryData> configList = new ArrayList<>();
+
+ for (SolrDocument solrDoc : solrList) {
+ EventHistoryData eventHistoryData = new EventHistoryData();
+ eventHistoryData.setFiltername("" + solrDoc.get(FILTER_NAME));
+ eventHistoryData.setId("" + solrDoc.get(ID));
+ eventHistoryData.setValues("" + solrDoc.get(VALUES));
+ eventHistoryData.setRowType("" + solrDoc.get(ROW_TYPE));
+ try {
+ List<String> shareNameList = (List<String>) solrDoc.get(SHARE_NAME_LIST);
+ eventHistoryData.setShareNameList(shareNameList);
+ } catch (Exception e) {
+ // do nothing
+ }
+
+ eventHistoryData.setUserName("" + solrDoc.get(USER_NAME));
+
+ configList.add(eventHistoryData);
+ }
+
+ response.setName("historyList");
+ response.setEventHistoryDataList(configList);
+
+ response.setStartIndex(Integer.parseInt(request.getStartIndex()));
+ response.setPageSize(Integer.parseInt(request.getPageSize()));
+
+ response.setTotalCount((long) solrList.getNumFound());
+
+ return response;
+
+ }
+
+ public List<String> getAllUserName() {
+ List<String> userList = new ArrayList<String>();
+ try {
+ SolrQuery userListQuery = new SolrQuery();
+ userListQuery.setQuery("*:*");
+ SolrUtil.setFacetField(userListQuery, USER_NAME);
+ QueryResponse queryResponse = eventHistorySolrDao.process(userListQuery);
+ if (queryResponse == null) {
+ return userList;
+ }
+ List<Count> counList = queryResponse.getFacetField(USER_NAME).getValues();
+ for (Count cnt : counList) {
+ String userName = cnt.getName();
+ userList.add(userName);
+ }
+ } catch (SolrException e) {
+ logger.warn("Error getting all users.", e);
+ throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
+ }
+ return userList;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
deleted file mode 100644
index 1df9f5a..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/manager/UserConfigManager.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.manager;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.ambari.logsearch.common.LogSearchContext;
-import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.dao.UserConfigSolrDao;
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.model.response.UserConfigData;
-import org.apache.ambari.logsearch.model.response.UserConfigDataListResponse;
-import org.apache.ambari.logsearch.util.RESTErrorUtil;
-import org.apache.ambari.logsearch.util.SolrUtil;
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.log4j.Logger;
-import org.apache.solr.client.solrj.SolrQuery;
-import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.response.FacetField.Count;
-import org.apache.solr.client.solrj.response.QueryResponse;
-import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.SolrDocumentList;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrInputDocument;
-import org.springframework.core.convert.ConversionService;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ID;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.USER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.VALUES;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.FILTER_NAME;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.ROW_TYPE;
-import static org.apache.ambari.logsearch.solr.SolrConstants.UserConfigConstants.SHARE_NAME_LIST;
-
-@Named
-public class UserConfigManager extends JsonManagerBase {
-
- private static final Logger logger = Logger.getLogger(UserConfigManager.class);
-
- @Inject
- private UserConfigSolrDao userConfigSolrDao;
- @Inject
- private ConversionService conversionService;
-
- public String saveUserConfig(UserConfigData userConfig) {
- String filterName = userConfig.getFiltername();
-
- SolrInputDocument solrInputDoc = new SolrInputDocument();
- if (!isValid(userConfig)) {
- throw RESTErrorUtil.createRESTException("No FilterName Specified", MessageEnums.INVALID_INPUT_DATA);
- }
-
- if (isNotUnique(filterName)) {
- throw RESTErrorUtil.createRESTException( "Name '" + userConfig.getFiltername() + "' already exists", MessageEnums.INVALID_INPUT_DATA);
- }
- solrInputDoc.addField(ID, userConfig.getId());
- solrInputDoc.addField(USER_NAME, LogSearchContext.getCurrentUsername());
- solrInputDoc.addField(VALUES, userConfig.getValues());
- solrInputDoc.addField(FILTER_NAME, filterName);
- solrInputDoc.addField(ROW_TYPE, userConfig.getRowType());
- List<String> shareNameList = userConfig.getShareNameList();
- if (CollectionUtils.isNotEmpty(shareNameList)) {
- solrInputDoc.addField(SHARE_NAME_LIST, shareNameList);
- }
-
- try {
- userConfigSolrDao.addDocs(solrInputDoc);
- return convertObjToString(solrInputDoc);
- } catch (SolrException | SolrServerException | IOException e) {
- logger.error("Error saving user config. solrDoc=" + solrInputDoc, e);
- throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
- }
- }
-
- private boolean isNotUnique(String filterName) {
-
- if (filterName != null) {
- SolrQuery solrQuery = new SolrQuery();
- filterName = SolrUtil.makeSearcableString(filterName);
- solrQuery.setQuery("*:*");
- solrQuery.addFilterQuery(FILTER_NAME + ":" + filterName);
- solrQuery.addFilterQuery(USER_NAME + ":" + LogSearchContext.getCurrentUsername());
- SolrUtil.setRowCount(solrQuery, 0);
- try {
- Long numFound = userConfigSolrDao.process(solrQuery).getResults().getNumFound();
- if (numFound > 0) {
- return true;
- }
- } catch (SolrException e) {
- logger.error("Error while checking if userConfig is unique.", e);
- }
- }
- return false;
- }
-
- private boolean isValid(UserConfigData vHistory) {
- return StringUtils.isNotBlank(vHistory.getFiltername())
- && StringUtils.isNotBlank(vHistory.getRowType())
- && StringUtils.isNotBlank(vHistory.getValues());
- }
-
- public void deleteUserConfig(String id) {
- try {
- userConfigSolrDao.deleteUserConfig(id);
- } catch (SolrException | SolrServerException | IOException e) {
- throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
- }
- }
-
- @SuppressWarnings("unchecked")
- public UserConfigDataListResponse getUserConfig(UserConfigRequest request) {
- UserConfigDataListResponse response = new UserConfigDataListResponse();
- String rowType = request.getRowType();
- if (StringUtils.isBlank(rowType)) {
- throw RESTErrorUtil.createRESTException("row type was not specified", MessageEnums.INVALID_INPUT_DATA);
- }
-
- SolrQuery userConfigQuery = conversionService.convert(request, SolrQuery.class);
- userConfigQuery.addFilterQuery(String.format("%s:%s OR %s:%s", USER_NAME, LogSearchContext.getCurrentUsername(),
- SHARE_NAME_LIST, LogSearchContext.getCurrentUsername()));
- SolrDocumentList solrList = userConfigSolrDao.process(userConfigQuery).getResults();
-
- Collection<UserConfigData> configList = new ArrayList<>();
-
- for (SolrDocument solrDoc : solrList) {
- UserConfigData userConfig = new UserConfigData();
- userConfig.setFiltername("" + solrDoc.get(FILTER_NAME));
- userConfig.setId("" + solrDoc.get(ID));
- userConfig.setValues("" + solrDoc.get(VALUES));
- userConfig.setRowType("" + solrDoc.get(ROW_TYPE));
- try {
- List<String> shareNameList = (List<String>) solrDoc.get(SHARE_NAME_LIST);
- userConfig.setShareNameList(shareNameList);
- } catch (Exception e) {
- // do nothing
- }
-
- userConfig.setUserName("" + solrDoc.get(USER_NAME));
-
- configList.add(userConfig);
- }
-
- response.setName("historyList");
- response.setUserConfigList(configList);
-
- response.setStartIndex(Integer.parseInt(request.getStartIndex()));
- response.setPageSize(Integer.parseInt(request.getPageSize()));
-
- response.setTotalCount((long) solrList.getNumFound());
-
- return response;
-
- }
-
- public List<String> getAllUserName() {
- List<String> userList = new ArrayList<String>();
- try {
- SolrQuery userListQuery = new SolrQuery();
- userListQuery.setQuery("*:*");
- SolrUtil.setFacetField(userListQuery, USER_NAME);
- QueryResponse queryResponse = userConfigSolrDao.process(userListQuery);
- if (queryResponse == null) {
- return userList;
- }
- List<Count> counList = queryResponse.getFacetField(USER_NAME).getValues();
- for (Count cnt : counList) {
- String userName = cnt.getName();
- userList.add(userName);
- }
- } catch (SolrException e) {
- logger.warn("Error getting all users.", e);
- throw RESTErrorUtil.createRESTException(MessageEnums.SOLR_ERROR.getMessage().getMessage(), MessageEnums.ERROR_SYSTEM);
- }
- return userList;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
new file mode 100644
index 0000000..d7a5b01
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/EventHistoryParamDefinition.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.request;
+
+import io.swagger.annotations.ApiParam;
+import org.apache.ambari.logsearch.common.LogSearchConstants;
+
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryDescriptions.FILTER_NAME_D;
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryDescriptions.ROW_TYPE_D;
+
+public interface EventHistoryParamDefinition {
+
+ String getFilterName();
+
+ @ApiParam(value = FILTER_NAME_D, name = LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
+ void setFilterName(String filterName);
+
+ String getRowType();
+
+ @ApiParam(value = ROW_TYPE_D, name = LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
+ void setRowType(String rowType);
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
deleted file mode 100644
index dd74b6f..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/UserConfigParamDefinition.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.request;
-
-import io.swagger.annotations.ApiParam;
-import org.apache.ambari.logsearch.common.LogSearchConstants;
-
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigDescriptions.FILTER_NAME_D;
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigDescriptions.ROW_TYPE_D;
-
-public interface UserConfigParamDefinition {
-
- String getFilterName();
-
- @ApiParam(value = FILTER_NAME_D, name = LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
- void setFilterName(String filterName);
-
- String getRowType();
-
- @ApiParam(value = ROW_TYPE_D, name = LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
- void setRowType(String rowType);
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
new file mode 100644
index 0000000..17be988
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/EventHistoryRequest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.request.impl;
+
+import org.apache.ambari.logsearch.common.LogSearchConstants;
+import org.apache.ambari.logsearch.model.request.EventHistoryParamDefinition;
+
+import javax.ws.rs.QueryParam;
+
+public class EventHistoryRequest extends CommonSearchRequest implements EventHistoryParamDefinition {
+
+ @QueryParam(LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
+ private String filterName;
+
+ @QueryParam(LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
+ private String rowType;
+
+ @Override
+ public String getFilterName() {
+ return filterName;
+ }
+
+ @Override
+ public void setFilterName(String filterName) {
+ this.filterName = filterName;
+ }
+
+ @Override
+ public String getRowType() {
+ return rowType;
+ }
+
+ @Override
+ public void setRowType(String rowType) {
+ this.rowType = rowType;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
deleted file mode 100644
index cbbc6e6..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/request/impl/UserConfigRequest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.request.impl;
-
-import org.apache.ambari.logsearch.common.LogSearchConstants;
-import org.apache.ambari.logsearch.model.request.UserConfigParamDefinition;
-
-import javax.ws.rs.QueryParam;
-
-public class UserConfigRequest extends CommonSearchRequest implements UserConfigParamDefinition {
-
- @QueryParam(LogSearchConstants.REQUEST_PARAM_FILTER_NAME)
- private String filterName;
-
- @QueryParam(LogSearchConstants.REQUEST_PARAM_ROW_TYPE)
- private String rowType;
-
- @Override
- public String getFilterName() {
- return filterName;
- }
-
- @Override
- public void setFilterName(String filterName) {
- this.filterName = filterName;
- }
-
- @Override
- public String getRowType() {
- return rowType;
- }
-
- @Override
- public void setRowType(String rowType) {
- this.rowType = rowType;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
new file mode 100644
index 0000000..5edbc62
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryData.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.response;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+import java.util.List;
+
+public class EventHistoryData {
+
+ @ApiModelProperty
+ private String id;
+
+ @ApiModelProperty
+ private String userName;
+
+ @ApiModelProperty
+ private String filtername;
+
+ @ApiModelProperty
+ private String values;
+
+ @ApiModelProperty
+ private List<String> shareNameList;
+
+ @ApiModelProperty
+ private String rowType;
+
+ public EventHistoryData() {
+ id = String.valueOf(new Date().getTime());
+ }
+
+ public String getId() {
+ return id;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getFiltername() {
+ return filtername;
+ }
+
+ public void setFiltername(String filtername) {
+ this.filtername = filtername;
+ }
+
+ public List<String> getShareNameList() {
+ return shareNameList;
+ }
+
+ public void setShareNameList(List<String> shareNameList) {
+ this.shareNameList = shareNameList;
+ }
+
+ public String getValues() {
+ return values;
+ }
+
+ public void setValues(String values) {
+ this.values = values;
+ }
+
+ public String getRowType() {
+ return rowType;
+ }
+
+ public void setRowType(String rowType) {
+ this.rowType = rowType;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
new file mode 100644
index 0000000..429005f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/EventHistoryDataListResponse.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.model.response;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Collection;
+
+@ApiModel
+public class EventHistoryDataListResponse extends SearchResponse{
+
+ @ApiModelProperty
+ private String name;
+
+ @ApiModelProperty
+ private Collection<EventHistoryData> eventHistoryDataList;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Collection<EventHistoryData> getEventHistoryDataList() {
+ return eventHistoryDataList;
+ }
+
+ public void setEventHistoryDataList(Collection<EventHistoryData> eventHistoryDataList) {
+ this.eventHistoryDataList = eventHistoryDataList;
+ }
+
+ @Override
+ public int getListSize() {
+ return eventHistoryDataList != null ? eventHistoryDataList.size() : 0;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
deleted file mode 100644
index ef4e0be..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigData.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.response;
-
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Date;
-import java.util.List;
-
-public class UserConfigData {
-
- @ApiModelProperty
- private String id;
-
- @ApiModelProperty
- private String userName;
-
- @ApiModelProperty
- private String filtername;
-
- @ApiModelProperty
- private String values;
-
- @ApiModelProperty
- private List<String> shareNameList;
-
- @ApiModelProperty
- private String rowType;
-
- public UserConfigData() {
- id = String.valueOf(new Date().getTime());
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getUserName() {
- return userName;
- }
-
- public void setUserName(String userName) {
- this.userName = userName;
- }
-
- public String getFiltername() {
- return filtername;
- }
-
- public void setFiltername(String filtername) {
- this.filtername = filtername;
- }
-
- public List<String> getShareNameList() {
- return shareNameList;
- }
-
- public void setShareNameList(List<String> shareNameList) {
- this.shareNameList = shareNameList;
- }
-
- public String getValues() {
- return values;
- }
-
- public void setValues(String values) {
- this.values = values;
- }
-
- public String getRowType() {
- return rowType;
- }
-
- public void setRowType(String rowType) {
- this.rowType = rowType;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
deleted file mode 100644
index 5c445b2..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/model/response/UserConfigDataListResponse.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.model.response;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import java.util.Collection;
-
-@ApiModel
-public class UserConfigDataListResponse extends SearchResponse{
-
- @ApiModelProperty
- private String name;
-
- @ApiModelProperty
- private Collection<UserConfigData> userConfigList;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public Collection<UserConfigData> getUserConfigList() {
- return userConfigList;
- }
-
- public void setUserConfigList(Collection<UserConfigData> userConfigList) {
- this.userConfigList = userConfigList;
- }
-
- @Override
- public int getListSize() {
- return userConfigList != null ? userConfigList.size() : 0;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
new file mode 100644
index 0000000..aced94c
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/EventHistoryResource.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ambari.logsearch.rest;
+
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.ws.rs.BeanParam;
+import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.ambari.logsearch.manager.EventHistoryManager;
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.ambari.logsearch.model.response.EventHistoryData;
+import org.apache.ambari.logsearch.model.response.EventHistoryDataListResponse;
+import org.springframework.context.annotation.Scope;
+
+import java.util.List;
+
+import static org.apache.ambari.logsearch.doc.DocConstants.EventHistoryOperationDescriptions.*;
+
+@Api(value = "history", description = "Event history operations")
+@Path("history")
+@Named
+@Scope("request")
+public class EventHistoryResource {
+
+ @Inject
+ private EventHistoryManager eventHistoryManager;
+
+ @POST
+ @Produces({"application/json"})
+ @ApiOperation(SAVE_EVENT_HISTORY_DATA_OD)
+ public String saveEvent(EventHistoryData eventHistoryData) {
+ return eventHistoryManager.saveEvent(eventHistoryData);
+ }
+
+ @DELETE
+ @Path("/{id}")
+ @ApiOperation(DELETE_EVENT_HISTORY_DATA_OD)
+ public void deleteEvent(@PathParam("id") String id) {
+ eventHistoryManager.deleteEvent(id);
+ }
+
+ @GET
+ @Produces({"application/json"})
+ @ApiOperation(GET_EVENT_HISTORY_DATA_OD)
+ public EventHistoryDataListResponse getEventHistory(@BeanParam EventHistoryRequest request) {
+ return eventHistoryManager.getEventHistory(request);
+ }
+
+ @GET
+ @Path("/names")
+ @Produces({"application/json"})
+ @ApiOperation(GET_ALL_USER_NAMES_OD)
+ public List<String> getAllUserName() {
+ return eventHistoryManager.getAllUserName();
+ }
+
+}
[25/26] ambari git commit: AMBARI-21202 - YARN service advisor has
spelling error in yarn-site
Posted by rl...@apache.org.
AMBARI-21202 - YARN service advisor has spelling error in yarn-site
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/192162e0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/192162e0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/192162e0
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 192162e05b7036c5dbbe120c447d7b5ac7ea5b13
Parents: f1e89e4
Author: Tim Thorpe <tt...@apache.org>
Authored: Wed Jun 14 09:33:36 2017 -0700
Committer: Tim Thorpe <tt...@apache.org>
Committed: Wed Jun 14 09:33:36 2017 -0700
----------------------------------------------------------------------
.../resources/common-services/YARN/3.0.0.3.0/service_advisor.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/192162e0/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
index 3dd39e5..0fb538d 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
@@ -1796,7 +1796,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
self.validators = [("yarn-site", self.validateYARNSiteConfigurationsFromHDP206),
("yarn-site", self.validateYARNSiteConfigurationsFromHDP25),
- ("yarn-ste" , self.validateYarnSiteConfigurationsFromHDP26),
+ ("yarn-site" , self.validateYARNSiteConfigurationsFromHDP26),
("yarn-env", self.validateYARNEnvConfigurationsFromHDP206),
("yarn-env", self.validateYARNEnvConfigurationsFromHDP22),
("ranger-yarn-plugin-properties", self.validateYARNRangerPluginConfigurationsFromHDP22)]
@@ -1853,7 +1853,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
validationProblems = self.toConfigurationValidationProblems(validationItems, "yarn-site")
return validationProblems
- def validateYarnSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
+ def validateYARNSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
validationItems = []
siteProperties = services["configurations"]["yarn-site"]["properties"]
if services["configurations"]["yarn-site"]["properties"]["yarn.http.policy"] == 'HTTP_ONLY':
[04/26] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-12556
Posted by rl...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-12556
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/64e3ad77
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/64e3ad77
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/64e3ad77
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 64e3ad77685dd934324947225889e76429ad5813
Parents: cd3fb85 601a7cd
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Jun 5 15:43:28 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Jun 5 15:43:28 2017 -0400
----------------------------------------------------------------------
.../scripts/controllers/users/UsersShowCtrl.js | 13 ++
.../ui/admin-web/app/views/users/show.html | 5 +-
.../src/main/python/ambari_agent/Controller.py | 6 +-
ambari-server/conf/unix/ambari.properties | 4 +
ambari-server/docs/configuration/index.md | 5 +-
.../ambari/server/agent/HeartBeatHandler.java | 18 ++-
.../server/configuration/Configuration.java | 31 ++++-
.../AmbariManagementControllerImpl.java | 126 ++++++++++++++++++-
.../server/controller/KerberosHelperImpl.java | 6 +
.../internal/ConfigGroupResourceProvider.java | 41 ++++--
.../internal/HostResourceProvider.java | 2 +-
.../listeners/tasks/TaskStatusListener.java | 2 +-
.../scheduler/ExecutionSchedulerImpl.java | 2 +
.../security/InternalSSLSocketFactory.java | 112 +++++++++++++++++
.../InternalSSLSocketFactoryNonTrusting.java | 49 ++++++++
.../InternalSSLSocketFactoryTrusting.java | 48 +++++++
.../kerberos/ADKerberosOperationHandler.java | 34 +++--
.../KerberosKDCSSLConnectionException.java | 45 +++++++
.../kerberos/TrustingSSLSocketFactory.java | 101 ---------------
.../server/state/cluster/ClusterImpl.java | 13 +-
.../svccomphost/ServiceComponentHostImpl.java | 2 +-
.../server/upgrade/UpgradeCatalog251.java | 45 ++++++-
.../OOZIE/4.0.0.2.0/package/scripts/oozie.py | 9 +-
.../OOZIE/4.2.0.3.0/package/scripts/oozie.py | 9 +-
.../internal/UpgradeResourceProviderTest.java | 1 -
.../ADKerberosOperationHandlerTest.java | 96 +++++++++++++-
.../server/upgrade/UpgradeCatalog251Test.java | 13 +-
.../main/service/reassign/step3_controller.js | 1 +
.../app/controllers/wizard/step8_controller.js | 3 +-
.../app/styles/theme/bootstrap-ambari.css | 18 +--
.../stack_upgrade/upgrade_version_box_view.js | 4 +-
.../upgrade_version_box_view_test.js | 4 +-
.../view/filebrowser/DownloadService.java | 9 +-
.../ambari/view/hive2/actor/DeathWatch.java | 5 +-
.../view/hive2/client/NonPersistentCursor.java | 4 +-
.../ambari/view/hive20/actor/DeathWatch.java | 7 +-
.../view/hive20/client/NonPersistentCursor.java | 4 +-
docs/src/site/site.xml | 2 +-
38 files changed, 690 insertions(+), 209 deletions(-)
----------------------------------------------------------------------
[13/26] ambari git commit: Revert "AMBARI-21202 - YARN service
advisor has spelling error in yarn-site"
Posted by rl...@apache.org.
Revert "AMBARI-21202 - YARN service advisor has spelling error in yarn-site"
This reverts commit 7dc91c5a8e75966f642a4890ed7a5750687b5928.
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8cdf232b
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8cdf232b
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8cdf232b
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 8cdf232bde26fb3a0cd46fb178be7c517d068a0c
Parents: 7515261
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Sun Jun 11 22:33:27 2017 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Mon Jun 12 15:46:51 2017 -0700
----------------------------------------------------------------------
.../resources/common-services/YARN/3.0.0.3.0/service_advisor.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/8cdf232b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
index 0fb538d..3dd39e5 100644
--- a/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
+++ b/ambari-server/src/main/resources/common-services/YARN/3.0.0.3.0/service_advisor.py
@@ -1796,7 +1796,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
self.validators = [("yarn-site", self.validateYARNSiteConfigurationsFromHDP206),
("yarn-site", self.validateYARNSiteConfigurationsFromHDP25),
- ("yarn-site" , self.validateYARNSiteConfigurationsFromHDP26),
+ ("yarn-ste" , self.validateYarnSiteConfigurationsFromHDP26),
("yarn-env", self.validateYARNEnvConfigurationsFromHDP206),
("yarn-env", self.validateYARNEnvConfigurationsFromHDP22),
("ranger-yarn-plugin-properties", self.validateYARNRangerPluginConfigurationsFromHDP22)]
@@ -1853,7 +1853,7 @@ class YARNValidator(service_advisor.ServiceAdvisor):
validationProblems = self.toConfigurationValidationProblems(validationItems, "yarn-site")
return validationProblems
- def validateYARNSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
+ def validateYarnSiteConfigurationsFromHDP26(self, properties, recommendedDefaults, configurations, services, hosts):
validationItems = []
siteProperties = services["configurations"]["yarn-site"]["properties"]
if services["configurations"]["yarn-site"]["properties"]["yarn.http.policy"] == 'HTTP_ONLY':
[11/26] ambari git commit: AMBARI-20853. Service Advisor - Allow
Service to define its Advisor Type as Python or Java (alejandro)
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/pom.xml
----------------------------------------------------------------------
diff --git a/serviceadvisor/pom.xml b/serviceadvisor/pom.xml
new file mode 100644
index 0000000..ecf6d8b
--- /dev/null
+++ b/serviceadvisor/pom.xml
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <!-- Can compile this project independently, cd serviceadvisor ; mvn clean package install
+
+ To test independently without needing the rest of Ambari, simply compile and run as,
+ java -jar serviceadvisor-$VERSION.jar [ACTION] [HOSTS_FILE.json] [SERVICES_FILE.json]
+ -->
+ <groupId>serviceadvisor</groupId>
+ <artifactId>serviceadvisor</artifactId>
+ <name>Service Advisor</name>
+ <version>1.0.0.0-SNAPSHOT</version>
+ <description>Service Advisor</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.6</version>
+ </dependency>
+
+ <!-- Log Factory logging
+ The main class is expected to write to stdout and stderr appropriately.
+ -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.0</version>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-lang</groupId>
+ <artifactId>commons-lang</artifactId>
+ <version>2.4</version>
+ </dependency>
+ </dependencies>
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>oss.sonatype.org</id>
+ <name>OSS Sonatype Staging</name>
+ <url>https://oss.sonatype.org/content/groups/staging</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+ <packaging>jar</packaging>
+ <!-- Run with mvn clean package .
+ Execute as, java -jar serviceadvisor-$VERSION.jar
+ -->
+ <build>
+ <plugins>
+ <!--
+ The next 2 plugins are to include the main class in the Jar and to create a single jar with all of the dependencies.
+ It conflicts with the maven-compiler-plugin since the jar created is different.
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addClasspath>true</addClasspath>
+ <mainClass>org.apache.ambari.stackadvisor.StackAdvisor</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-shade-plugin</artifactId>
+ <version>1.6</version>
+ <executions>
+ <execution>
+ <phase>package</phase>
+ <goals>
+ <goal>shade</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ -->
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>3.2</version>
+ <configuration>
+ <source>1.7</source>
+ <target>1.7</target>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
----------------------------------------------------------------------
diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
new file mode 100644
index 0000000..77c482a
--- /dev/null
+++ b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisor.java
@@ -0,0 +1,147 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.serviceadvisor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.commons.lang3.EnumUtils;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Class that can be called either through its jar or using its run method.
+ * The goal is to invoke a Service Advisor.
+ * Right now, it is backward compatible by invoking the python script and does not know which service is affected.
+ */
+public class ServiceAdvisor {
+ protected static Log LOG = LogFactory.getLog(ServiceAdvisor.class);
+
+ private static String USAGE = "Usage: java -jar serviceadvisor.jar [ACTION] [HOSTS_FILE.json] [SERVICES_FILE.json] [OUTPUT.txt] [ERRORS.txt]";
+ private static String PYTHON_STACK_ADVISOR_SCRIPT = "/var/lib/ambari-server/resources/scripts/stack_advisor.py";
+
+ /**
+ * Entry point for calling this class through its jar.
+ * @param args
+ */
+ public static void main(String[] args) {
+ if (args.length != 5) {
+ System.err.println(String.format("Wrong number of arguments. %s", USAGE));
+ System.exit(1);
+ }
+
+ String action = args[0];
+ String hostsFile = args[1];
+ String servicesFile = args[2];
+ String outputFile = args[3];
+ String errorFile = args[4];
+
+ int exitCode = run(action, hostsFile, servicesFile, outputFile, errorFile);
+ System.exit(exitCode);
+ }
+
+ public static int run(String action, String hostsFile, String servicesFile, String outputFile, String errorFile) {
+ LOG.info(String.format("ServiceAdvisor. Received arguments. Action: %s, Hosts File: %s, Services File: %s", action, hostsFile, servicesFile));
+ int returnCode = -1;
+
+ try {
+ ServiceAdvisorCommandType commandType = ServiceAdvisorCommandType.getEnum(action);
+
+ // TODO, load each Service's Service Advisor at Start Time and call it instead of Python command below.
+
+ ProcessBuilder builder = preparePythonShellCommand(commandType, hostsFile, servicesFile, outputFile, errorFile);
+ returnCode = launchProcess(builder);
+ } catch (IllegalArgumentException e) {
+ List<ServiceAdvisorCommandType> values = EnumUtils.getEnumList(ServiceAdvisorCommandType.class);
+ List<String> stringValues = new ArrayList<String>();
+ for (ServiceAdvisorCommandType value : values) {
+ stringValues.add(value.toString());
+ }
+ LOG.error("ServiceAdvisor. Illegal Argument. Action must be one of " + StringUtils.join(stringValues.toArray(), ", "));
+ return -1;
+ } catch (Exception e) {
+ LOG.error("ServiceAdvisor. Failed with " + e.getMessage());
+ return -1;
+ }
+ return returnCode;
+ }
+
+ /**
+ * Generate a process to invoke a Python command for the old-style Stack Advisor.
+ * @param commandType Command Type
+ * @param hostsFile hosts.json file
+ * @param servicesFile services.json file
+ * @param outputFile output.txt
+ * @param errorFile error.txt
+ * @return Process that can launch.
+ */
+ private static ProcessBuilder preparePythonShellCommand(ServiceAdvisorCommandType commandType, String hostsFile, String servicesFile, String outputFile, String errorFile) {
+ List<String> builderParameters = new ArrayList<String>();
+
+ if (System.getProperty("os.name").contains("Windows")) {
+ builderParameters.add("cmd");
+ builderParameters.add("/c");
+ } else {
+ builderParameters.add("sh");
+ builderParameters.add("-c");
+ }
+
+ StringBuilder commandString = new StringBuilder();
+ commandString.append(PYTHON_STACK_ADVISOR_SCRIPT + " ");
+
+ commandString.append(commandType.toString()).append(" ");
+ commandString.append(hostsFile).append(" ");
+ commandString.append(servicesFile).append(" ");
+ commandString.append("1> ");
+ commandString.append(outputFile).append(" ");
+ commandString.append("2>");
+ commandString.append(errorFile).append(" ");
+
+ builderParameters.add(commandString.toString());
+
+ LOG.info("ServiceAdvisor. Python command is: " + builderParameters.toString());
+
+ return new ProcessBuilder(builderParameters);
+ }
+
+ /**
+ * Launch a process, wait for it to finish, and return its exit code.
+ * @param builder Process Builder
+ * @return Exit Code
+ * @throws Exception
+ */
+ private static int launchProcess(ProcessBuilder builder) throws Exception {
+ int exitCode = -1;
+ Process process = null;
+ try {
+ process = builder.start();
+ exitCode = process.waitFor();
+ } catch (Exception ioe) {
+ String message = "Error executing Service Advisor: ";
+ LOG.error(message, ioe);
+ throw new Exception(message + ioe.getMessage());
+ } finally {
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ return exitCode;
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
----------------------------------------------------------------------
diff --git a/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
new file mode 100644
index 0000000..f067668
--- /dev/null
+++ b/serviceadvisor/src/main/java/org/apache/ambari/serviceadvisor/ServiceAdvisorCommandType.java
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+package org.apache.ambari.serviceadvisor;
+
+
+// TODO, use this class instead of org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType
+public enum ServiceAdvisorCommandType {
+
+ RECOMMEND_COMPONENT_LAYOUT("recommend-component-layout"),
+
+ VALIDATE_COMPONENT_LAYOUT("validate-component-layout"),
+
+ RECOMMEND_CONFIGURATIONS("recommend-configurations"),
+
+ RECOMMEND_CONFIGURATION_DEPENDENCIES("recommend-configuration-dependencies"),
+
+ VALIDATE_CONFIGURATIONS("validate-configurations");
+ private final String name;
+
+ private ServiceAdvisorCommandType(String name) {
+ this.name = name;
+ }
+
+ public String getValue() {
+ return this.name.toLowerCase();
+ }
+
+ @Override
+ public String toString() {
+ return this.name;
+ }
+
+ /**
+ * Instead of Enum.valueOf("value"), use this method instead to map the string to the correct Enum.
+ * @param name Name with lowercase and dashes.
+ * @return Enum that matches the string.
+ */
+ public static ServiceAdvisorCommandType getEnum(String name) {
+ for (ServiceAdvisorCommandType v : values()) {
+ if (v.getValue().equalsIgnoreCase(name.replace("_", "-"))) {
+ return v;
+ }
+ }
+ throw new IllegalArgumentException();
+ }
+}
\ No newline at end of file
[06/26] ambari git commit: AMBARI-21180. Component command changes
must include version numbers for all services (ncole)
Posted by rl...@apache.org.
AMBARI-21180. Component command changes must include version numbers for all services (ncole)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5a1bd715
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5a1bd715
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5a1bd715
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 5a1bd715e11b2e3a79b139118a90b66eca32f025
Parents: 12202a2
Author: Nate Cole <nc...@hortonworks.com>
Authored: Mon Jun 5 17:39:42 2017 -0400
Committer: Nate Cole <nc...@hortonworks.com>
Committed: Tue Jun 6 10:33:14 2017 -0400
----------------------------------------------------------------------
.../actionmanager/ExecutionCommandWrapper.java | 65 +++++++++++---------
.../ambari/server/agent/ExecutionCommand.java | 57 ++++++++++++-----
.../AmbariCustomCommandExecutionHelper.java | 4 +-
.../AmbariManagementControllerImpl.java | 2 -
.../STORM/0.9.1/package/scripts/params_linux.py | 2 -
.../1.0.1.3.0/package/scripts/params_linux.py | 2 -
.../AmbariCustomCommandExecutionHelperTest.java | 11 ++--
7 files changed, 84 insertions(+), 59 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
index 2ec09d9..efd609a 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/actionmanager/ExecutionCommandWrapper.java
@@ -35,6 +35,7 @@ import org.apache.ambari.server.state.ConfigHelper;
import org.apache.ambari.server.state.DesiredConfig;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
+import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -143,7 +144,8 @@ public class ExecutionCommandWrapper {
// now that the tags have been updated (if necessary), fetch the
// configurations
Map<String, Map<String, String>> configurationTags = executionCommand.getConfigurationTags();
- if (null != configurationTags && !configurationTags.isEmpty()) {
+
+ if (MapUtils.isNotEmpty(configurationTags)) {
Map<String, Map<String, String>> configProperties = configHelper
.getEffectiveConfigProperties(cluster, configurationTags);
@@ -182,43 +184,46 @@ public class ExecutionCommandWrapper {
executionCommand.getConfigurationAttributes().get(type));
}
}
+ }
- // set the repository version for the component this command is for -
- // always use the current desired version
- try {
- RepositoryVersionEntity repositoryVersion = null;
- String serviceName = executionCommand.getServiceName();
- if (!StringUtils.isEmpty(serviceName)) {
- Service service = cluster.getService(serviceName);
- if (null != service) {
- repositoryVersion = service.getDesiredRepositoryVersion();
- }
+ // set the repository version for the component this command is for -
+ // always use the current desired version
+ try {
+ RepositoryVersionEntity repositoryVersion = null;
+ String serviceName = executionCommand.getServiceName();
+ if (!StringUtils.isEmpty(serviceName)) {
+ Service service = cluster.getService(serviceName);
+ if (null != service) {
+ repositoryVersion = service.getDesiredRepositoryVersion();
+ }
- String componentName = executionCommand.getComponentName();
- if (!StringUtils.isEmpty(componentName)) {
- ServiceComponent serviceComponent = service.getServiceComponent(
- executionCommand.getComponentName());
+ String componentName = executionCommand.getComponentName();
+ if (!StringUtils.isEmpty(componentName)) {
+ ServiceComponent serviceComponent = service.getServiceComponent(
+ executionCommand.getComponentName());
- if (null != serviceComponent) {
- repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
- }
+ if (null != serviceComponent) {
+ repositoryVersion = serviceComponent.getDesiredRepositoryVersion();
}
}
+ }
- if (null != repositoryVersion) {
- executionCommand.getCommandParams().put(KeyNames.VERSION,
- repositoryVersion.getVersion());
- executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION,
- repositoryVersion.getVersion());
- }
- } catch (ServiceNotFoundException serviceNotFoundException) {
- // it's possible that there are commands specified for a service where
- // the service doesn't exist yet
- LOG.warn(
- "The service {} is not installed in the cluster. No repository version will be sent for this command.",
- executionCommand.getServiceName());
+ if (null != repositoryVersion) {
+ executionCommand.getCommandParams().put(KeyNames.VERSION, repositoryVersion.getVersion());
+ executionCommand.getHostLevelParams().put(KeyNames.CURRENT_VERSION, repositoryVersion.getVersion());
}
+ } catch (ServiceNotFoundException serviceNotFoundException) {
+ // it's possible that there are commands specified for a service where
+ // the service doesn't exist yet
+ LOG.warn(
+ "The service {} is not installed in the cluster. No repository version will be sent for this command.",
+ executionCommand.getServiceName());
}
+
+ // set the desired versions of versionable components. This is safe even during an upgrade because
+ // we are "loading-late": components that have not yet upgraded in an EU will have the correct versions.
+ executionCommand.setComponentVersions(cluster);
+
} catch (ClusterNotFoundException cnfe) {
// it's possible that there are commands without clusters; in such cases,
// just return the de-serialized command and don't try to read configs
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
index 17b89b7..bd4c9dd 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/agent/ExecutionCommand.java
@@ -26,8 +26,11 @@ import java.util.Set;
import org.apache.ambari.annotations.Experimental;
import org.apache.ambari.annotations.ExperimentalFeature;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.RoleCommand;
-import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Service;
+import org.apache.ambari.server.state.ServiceComponent;
import org.apache.ambari.server.utils.StageUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -110,9 +113,6 @@ public class ExecutionCommand extends AgentCommand {
@SerializedName("localComponents")
private Set<String> localComponents = new HashSet<>();
- @SerializedName("availableServices")
- private Map<String, String> availableServices = new HashMap<>();
-
/**
* "true" or "false" indicating whether this
* service is enabled for credential store use.
@@ -153,6 +153,9 @@ public class ExecutionCommand extends AgentCommand {
@SerializedName("repositoryFile")
private CommandRepository commandRepository;
+ @SerializedName("componentVersionMap")
+ private Map<String, Map<String, String>> componentVersionMap = new HashMap<>();
+
public void setConfigurationCredentials(Map<String, Map<String, String>> configurationCredentials) {
this.configurationCredentials = configurationCredentials;
}
@@ -300,18 +303,6 @@ public class ExecutionCommand extends AgentCommand {
this.localComponents = localComponents;
}
- public Map<String, String> getAvailableServices() {
- return availableServices;
- }
-
- public void setAvailableServicesFromServiceInfoMap(Map<String, ServiceInfo> serviceInfoMap) {
- Map<String, String> serviceVersionMap = new HashMap<>();
- for (Map.Entry<String, ServiceInfo> entry : serviceInfoMap.entrySet()) {
- serviceVersionMap.put(entry.getKey(), entry.getValue().getVersion());
- }
- availableServices = serviceVersionMap;
- }
-
public Map<String, Map<String, Map<String, String>>> getConfigurationAttributes() {
return configurationAttributes;
}
@@ -523,4 +514,38 @@ public class ExecutionCommand extends AgentCommand {
comment = "This should be replaced by a map of all service component versions")
String CURRENT_VERSION = "current_version";
}
+
+ /**
+ * @return
+ */
+ public Map<String, Map<String, String>> getComponentVersionMap() {
+ return componentVersionMap;
+ }
+
+ /**
+ * Used to set a map of {service -> { component -> version}}. This is necessary when performing
+ * an upgrade to correct build paths of required binaries.
+ * @param cluster the cluster from which to build the map
+ */
+ public void setComponentVersions(Cluster cluster) throws AmbariException {
+ Map<String, Map<String, String>> componentVersionMap = new HashMap<>();
+
+ for (Service service : cluster.getServices().values()) {
+ Map<String, String> componentMap = new HashMap<>();
+
+ boolean shouldSet = false;
+ for (ServiceComponent component : service.getServiceComponents().values()) {
+ if (component.isVersionAdvertised()) {
+ shouldSet = true;
+ componentMap.put(component.getName(), component.getDesiredVersion());
+ }
+ }
+
+ if (shouldSet) {
+ componentVersionMap.put(service.getName(), componentMap);
+ }
+ }
+
+ this.componentVersionMap = componentVersionMap;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
index cabb9d6..1f3b4b0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelper.java
@@ -384,12 +384,12 @@ public class AmbariCustomCommandExecutionHelper {
execCmd.setCommandType(AgentCommandType.BACKGROUND_EXECUTION_COMMAND);
}
+ execCmd.setComponentVersions(cluster);
+
execCmd.setConfigurations(configurations);
execCmd.setConfigurationAttributes(configurationAttributes);
execCmd.setConfigurationTags(configTags);
- execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
-
// Get the value of credential store enabled from the DB
Service clusterService = cluster.getService(serviceName);
execCmd.setCredentialStoreEnabled(String.valueOf(clusterService.isCredentialStoreEnabled()));
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
index 186a19e..329998b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java
@@ -2555,11 +2555,9 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
cluster.addSuspendedUpgradeParameters(commandParams, roleParams);
}
-
execCmd.setRoleParams(roleParams);
execCmd.setCommandParams(commandParams);
- execCmd.setAvailableServicesFromServiceInfoMap(ambariMetaInfo.getServices(stackId.getStackName(), stackId.getStackVersion()));
execCmd.setRepositoryFile(customCommandExecutionHelper.getCommandRepository(cluster, component, host));
hostParams.put(KeyNames.CURRENT_VERSION, repoVersion.getVersion());
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
index 78ec165..664c582 100644
--- a/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/STORM/0.9.1/package/scripts/params_linux.py
@@ -394,8 +394,6 @@ if enable_ranger_storm:
namenode_hosts = default("/clusterHostInfo/namenode_host", [])
has_namenode = not len(namenode_hosts) == 0
-availableServices = config['availableServices']
-
hdfs_user = config['configurations']['hadoop-env']['hdfs_user'] if has_namenode else None
hdfs_user_keytab = config['configurations']['hadoop-env']['hdfs_user_keytab'] if has_namenode else None
hdfs_principal_name = config['configurations']['hadoop-env']['hdfs_principal_name'] if has_namenode else None
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
index 78ec165..664c582 100644
--- a/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
+++ b/ambari-server/src/main/resources/common-services/STORM/1.0.1.3.0/package/scripts/params_linux.py
@@ -394,8 +394,6 @@ if enable_ranger_storm:
namenode_hosts = default("/clusterHostInfo/namenode_host", [])
has_namenode = not len(namenode_hosts) == 0
-availableServices = config['availableServices']
-
hdfs_user = config['configurations']['hadoop-env']['hdfs_user'] if has_namenode else None
hdfs_user_keytab = config['configurations']['hadoop-env']['hdfs_user_keytab'] if has_namenode else None
hdfs_principal_name = config['configurations']['hadoop-env']['hdfs_principal_name'] if has_namenode else None
http://git-wip-us.apache.org/repos/asf/ambari/blob/5a1bd715/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index a6c0c32..240517f 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -70,7 +70,6 @@ import org.apache.ambari.server.state.RepositoryInfo;
import org.apache.ambari.server.state.SecurityType;
import org.apache.ambari.server.state.Service;
import org.apache.ambari.server.state.ServiceComponent;
-import org.apache.ambari.server.state.ServiceInfo;
import org.apache.ambari.server.state.StackId;
import org.apache.ambari.server.state.StackInfo;
import org.apache.ambari.server.state.State;
@@ -79,6 +78,7 @@ import org.apache.ambari.server.state.ValueAttributesInfo;
import org.apache.ambari.server.state.stack.upgrade.RepositoryVersionHelper;
import org.apache.ambari.server.topology.TopologyManager;
import org.apache.ambari.server.utils.StageUtils;
+import org.apache.commons.collections.MapUtils;
import org.easymock.Capture;
import org.easymock.EasyMock;
import org.easymock.EasyMockRule;
@@ -553,14 +553,15 @@ public class AmbariCustomCommandExecutionHelperTest {
ambariManagementController.createAction(actionRequest, requestProperties);
StackId stackId = clusters.getCluster("c1").getDesiredStackVersion();
- Map<String, ServiceInfo> services = ambariManagementController.getAmbariMetaInfo().getServices(stackId.getStackName(), stackId.getStackVersion());
Request request = requestCapture.getValue();
Stage stage = request.getStages().iterator().next();
List<ExecutionCommandWrapper> commands = stage.getExecutionCommands("c1-c6401");
ExecutionCommand command = commands.get(0).getExecutionCommand();
- for (String service : services.keySet()) {
- Assert.assertEquals(command.getAvailableServices().get(service), services.get(service).getVersion());
- }
+
+ // ZK is the only service that is versionable
+ Assert.assertFalse(MapUtils.isEmpty(command.getComponentVersionMap()));
+ Assert.assertEquals(1, command.getComponentVersionMap().size());
+ Assert.assertTrue(command.getComponentVersionMap().containsKey("ZOOKEEPER"));
}
@Test
[26/26] ambari git commit: Merge branch 'trunk' into
branch-feature-AMBARI-20859
Posted by rl...@apache.org.
Merge branch 'trunk' into branch-feature-AMBARI-20859
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/5b9454ef
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/5b9454ef
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/5b9454ef
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 5b9454ef4cd7483872938b01872ad0646c242571
Parents: f09670d 192162e
Author: Robert Levas <rl...@hortonworks.com>
Authored: Wed Jun 14 17:19:17 2017 -0400
Committer: Robert Levas <rl...@hortonworks.com>
Committed: Wed Jun 14 17:19:17 2017 -0400
----------------------------------------------------------------------
.../test/python/ambari_agent/TestHostInfo.py | 107 +++++++++
ambari-client/groovy-client/pom.xml | 2 +
.../libraries/functions/conf_select.py | 1 -
.../libraries/functions/hive_check.py | 5 +-
.../libraries/functions/packages_analyzer.py | 53 ++++-
.../providers/modify_properties_file.py | 9 +-
.../libraries/script/script.py | 25 ++-
ambari-funtest/pom.xml | 2 +
ambari-infra/ambari-infra-solr-client/pom.xml | 2 +
.../ambari-logsearch-config-api/pom.xml | 2 +-
.../ambari-logsearch-config-zookeeper/pom.xml | 2 +-
ambari-logsearch/ambari-logsearch-it/pom.xml | 4 +-
.../ambari-logsearch-logfeeder/pom.xml | 4 +-
.../logfeeder/common/LogFeederConstants.java | 2 +-
.../ambari/logsearch/conf/SecurityConfig.java | 18 +-
.../ambari/logsearch/conf/SolrConfig.java | 12 +-
.../conf/SolrEventHistoryPropsConfig.java | 116 ++++++++++
.../logsearch/conf/SolrUserPropsConfig.java | 116 ----------
.../conf/global/SolrEventHistoryState.java | 60 +++++
.../conf/global/SolrUserConfigState.java | 60 -----
.../EventHistoryRequestQueryConverter.java | 67 ++++++
.../UserConfigRequestQueryConverter.java | 67 ------
.../logsearch/dao/EventHistorySolrDao.java | 117 ++++++++++
.../logsearch/dao/SolrSchemaFieldDao.java | 8 +-
.../ambari/logsearch/dao/UserConfigSolrDao.java | 117 ----------
.../ambari/logsearch/doc/DocConstants.java | 12 +-
.../logsearch/manager/EventHistoryManager.java | 199 +++++++++++++++++
.../logsearch/manager/UserConfigManager.java | 199 -----------------
.../request/EventHistoryParamDefinition.java | 38 ++++
.../request/UserConfigParamDefinition.java | 38 ----
.../model/request/impl/EventHistoryRequest.java | 53 +++++
.../model/request/impl/UserConfigRequest.java | 53 -----
.../model/response/EventHistoryData.java | 97 ++++++++
.../response/EventHistoryDataListResponse.java | 55 +++++
.../model/response/UserConfigData.java | 97 --------
.../response/UserConfigDataListResponse.java | 55 -----
.../logsearch/rest/EventHistoryResource.java | 82 +++++++
.../ambari/logsearch/rest/StatusResource.java | 16 +-
.../logsearch/rest/UserConfigResource.java | 82 -------
.../ambari/logsearch/solr/SolrConstants.java | 4 +-
.../LogsearchEventHistoryStateFilter.java | 52 +++++
.../filters/LogsearchUserConfigStateFilter.java | 52 -----
.../EventHistoryRequestQueryConverterTest.java | 50 +++++
.../UserConfigRequestQueryConverterTest.java | 50 -----
.../collection_bases/VEventHistoryListBase.js | 8 +-
.../scripts/model_bases/VUserFilterBase.js | 2 +-
.../main/webapp/scripts/views/common/Header.js | 2 +-
.../ambari-metrics-timelineservice/pom.xml | 4 +-
ambari-project/pom.xml | 47 +++-
ambari-server/checkstyle.xml | 4 +
ambari-server/pom.xml | 37 +++-
.../actionmanager/ExecutionCommandWrapper.java | 65 +++---
.../ambari/server/agent/ExecutionCommand.java | 57 +++--
.../server/api/services/ClusterService.java | 2 +-
.../server/api/services/ServiceService.java | 3 +-
.../stackadvisor/StackAdvisorHelper.java | 74 +++++--
.../stackadvisor/StackAdvisorRunner.java | 207 +++++++++++------
.../ComponentLayoutRecommendationCommand.java | 5 +-
.../ComponentLayoutValidationCommand.java | 11 +-
...rationDependenciesRecommendationCommand.java | 11 +-
.../ConfigurationRecommendationCommand.java | 11 +-
.../ConfigurationValidationCommand.java | 11 +-
.../commands/StackAdvisorCommand.java | 15 +-
.../AmbariCustomCommandExecutionHelper.java | 4 +-
.../AmbariManagementControllerImpl.java | 2 -
.../server/controller/AuthToLocalBuilder.java | 10 +-
.../ambari/server/orm/dao/HostVersionDAO.java | 16 ++
.../server/orm/entities/HostVersionEntity.java | 5 +
.../ServiceComponentDesiredStateEntity.java | 2 +-
.../upgrades/FinalizeUpgradeAction.java | 57 ++++-
.../ambari/server/stack/ServiceModule.java | 4 +
.../server/state/RepositoryVersionState.java | 31 ++-
.../apache/ambari/server/state/ServiceImpl.java | 2 +-
.../apache/ambari/server/state/ServiceInfo.java | 26 ++-
.../server/upgrade/UpgradeCatalog300.java | 13 +-
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 +-
.../KAFKA/0.10.0.3.0/kerberos.json | 3 +
.../common-services/KAFKA/0.10.0/kerberos.json | 3 +
.../common-services/KAFKA/0.9.0/kerberos.json | 3 +
.../0.4.0/package/scripts/ranger_admin.py | 11 +-
.../0.4.0/package/scripts/setup_ranger_xml.py | 13 ++
.../RANGER_KMS/0.5.0.2.3/package/scripts/kms.py | 8 +
.../0.5.0.2.3/package/scripts/kms_server.py | 10 +-
.../STORM/0.9.1/package/scripts/params_linux.py | 2 -
.../1.0.1.3.0/package/scripts/params_linux.py | 2 -
.../custom_actions/scripts/install_packages.py | 25 +--
.../configuration/spark-thrift-sparkconf.xml | 40 ++++
.../configuration/spark2-thrift-sparkconf.xml | 40 ++++
.../YARN/configuration-mapred/mapred-site.xml | 2 +-
.../stacks/HDP/2.6/upgrades/config-upgrade.xml | 24 ++
.../HDP/2.6/upgrades/nonrolling-upgrade-2.6.xml | 26 ++-
.../stacks/HDP/2.6/upgrades/upgrade-2.6.xml | 32 ++-
.../src/main/resources/stacks/stack_advisor.py | 115 +---------
.../stackadvisor/StackAdvisorHelperTest.java | 63 ++++--
.../stackadvisor/StackAdvisorRunnerTest.java | 10 +-
.../ConfigurationRecommendationCommandTest.java | 3 +-
.../commands/StackAdvisorCommandTest.java | 47 ++--
.../AmbariCustomCommandExecutionHelperTest.java | 11 +-
.../upgrades/UpgradeActionTest.java | 109 ++++++++-
.../ambari/server/stack/ServiceModuleTest.java | 31 +++
.../custom_actions/TestInstallPackages.py | 202 +++++++----------
.../configs/install_packages_config.json | 19 +-
.../stacks/2.0.6/HBASE/test_hbase_master.py | 11 +-
.../2.0.6/HIVE/test_hive_service_check.py | 14 +-
.../stacks/2.0.6/common/test_stack_advisor.py | 153 -------------
.../stacks/2.0.6/configs/hbase_with_phx.json | 12 +
.../stacks/2.2/RANGER/test_ranger_admin.py | 8 +
.../stacks/2.5/RANGER/test_ranger_admin.py | 10 +
.../stacks/2.5/RANGER_KMS/test_kms_server.py | 10 +
.../stacks/2.6/RANGER/test_ranger_admin.py | 10 +
ambari-views/examples/weather-view/pom.xml | 2 +-
ambari-web/app/app.js | 8 +-
.../controllers/global/cluster_controller.js | 2 +-
.../global/user_settings_controller.js | 3 +
.../main/admin/stack_and_upgrade_controller.js | 6 +-
ambari-web/app/data/controller_route.js | 2 +-
.../app/mappers/repository_version_mapper.js | 2 +-
ambari-web/app/messages.js | 4 +-
.../models/stack_version/repository_version.js | 2 +-
ambari-web/app/utils/ajax/ajax.js | 2 +-
.../stack_upgrade/upgrade_version_box_view.js | 8 +-
.../upgrade_version_column_view.js | 2 +-
.../admin/stack_upgrade/upgrade_wizard_view.js | 2 +-
.../main/admin/stack_upgrade/versions_view.js | 2 +-
ambari-web/app/views/main/dashboard/widgets.js | 2 +-
ambari-web/test/app_test.js | 10 +-
.../admin/stack_and_upgrade_controller_test.js | 18 +-
.../test/controllers/wizard/step8_test.js | 4 +-
.../upgrade_version_box_view_test.js | 28 +--
.../stack_upgrade/upgrade_wizard_view_test.js | 2 +-
.../admin/stack_upgrade/version_view_test.js | 6 +-
.../test/views/main/dashboard/widgets_test.js | 4 +-
.../stacks/HDF/2.0/services/KAFKA/kerberos.json | 3 +
contrib/views/hawq/pom.xml | 2 +-
contrib/views/hive-next/pom.xml | 4 +-
contrib/views/hive20/pom.xml | 4 +-
contrib/views/pig/pom.xml | 2 +-
contrib/views/tez/pom.xml | 3 +-
contrib/views/wfmanager/pom.xml | 1 +
docs/pom.xml | 12 +
pom.xml | 17 +-
serviceadvisor/pom.xml | 103 +++++++++
.../ambari/serviceadvisor/ServiceAdvisor.java | 147 ++++++++++++
.../ServiceAdvisorCommandType.java | 63 ++++++
utility/pom.xml | 41 ++++
.../ambari/swagger/AmbariSwaggerReader.java | 222 +++++++++++++++++++
.../ambari/swagger/AmbariSwaggerReaderTest.java | 182 +++++++++++++++
utility/src/test/resources/log4j.properties | 19 ++
153 files changed, 3214 insertions(+), 1836 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/5b9454ef/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
[17/26] ambari git commit: AMBARI-21228. Rename userconfig resource
to event history in Log Search Portal (oleewere)
Posted by rl...@apache.org.
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
index 8cc6b94..3499bce 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/StatusResource.java
@@ -34,7 +34,7 @@ import java.util.Map;
import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.AUDIT_LOGS_STATUS_OD;
import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.SERVICE_LOGS_STATUS_OD;
import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.STATUS_OD;
-import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.USER_CONFIG_STATUS_OD;
+import static org.apache.ambari.logsearch.doc.DocConstants.StatusOperationDescriptions.EVENT_HISTORY_STATUS_OD;
@Api(value = "status", description = "Status Operations")
@Path("status")
@@ -51,8 +51,8 @@ public class StatusResource {
private SolrCollectionState solrAuditLogsState;
@Inject
- @Named("solrUserConfigState")
- private SolrCollectionState solrUserConfigState;
+ @Named("solrEventHistoryState")
+ private SolrCollectionState solrEventHistoryState;
@GET
@Produces({"application/json"})
@@ -61,7 +61,7 @@ public class StatusResource {
Map<String, SolrCollectionState> response = new HashMap<>();
response.put("serviceLogs", solrServiceLogsState);
response.put("auditLogs", solrAuditLogsState);
- response.put("userConfig", solrUserConfigState);
+ response.put("eventHistory", solrEventHistoryState);
return response;
}
@@ -82,10 +82,10 @@ public class StatusResource {
}
@GET
- @Path("/userconfig")
+ @Path("/history")
@Produces({"application/json"})
- @ApiOperation(USER_CONFIG_STATUS_OD)
- public SolrCollectionState getSolrUserConfigStatus() {
- return solrUserConfigState;
+ @ApiOperation(EVENT_HISTORY_STATUS_OD)
+ public SolrCollectionState getSolrEventHistoryStatus() {
+ return solrEventHistoryState;
}
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
deleted file mode 100644
index 00b971a..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/rest/UserConfigResource.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.ambari.logsearch.rest;
-
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.ws.rs.BeanParam;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.apache.ambari.logsearch.manager.UserConfigManager;
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.ambari.logsearch.model.response.UserConfigData;
-import org.apache.ambari.logsearch.model.response.UserConfigDataListResponse;
-import org.springframework.context.annotation.Scope;
-
-import java.util.List;
-
-import static org.apache.ambari.logsearch.doc.DocConstants.UserConfigOperationDescriptions.*;
-
-@Api(value = "userconfig", description = "User config operations")
-@Path("userconfig")
-@Named
-@Scope("request")
-public class UserConfigResource {
-
- @Inject
- private UserConfigManager userConfigManager;
-
- @POST
- @Produces({"application/json"})
- @ApiOperation(SAVE_USER_CONFIG_OD)
- public String saveUserConfig(UserConfigData userConfig) {
- return userConfigManager.saveUserConfig(userConfig);
- }
-
- @DELETE
- @Path("/{id}")
- @ApiOperation(DELETE_USER_CONFIG_OD)
- public void deleteUserConfig(@PathParam("id") String id) {
- userConfigManager.deleteUserConfig(id);
- }
-
- @GET
- @Produces({"application/json"})
- @ApiOperation(GET_USER_CONFIG_OD)
- public UserConfigDataListResponse getUserConfig(@BeanParam UserConfigRequest request) {
- return userConfigManager.getUserConfig(request);
- }
-
- @GET
- @Path("/names")
- @Produces({"application/json"})
- @ApiOperation(GET_ALL_USER_NAMES_OD)
- public List<String> getAllUserName() {
- return userConfigManager.getAllUserName();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
index 39e134a..60fc1a3 100644
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/solr/SolrConstants.java
@@ -98,8 +98,8 @@ public class SolrConstants {
public static final String AUDIT_TAGS_STR = "tags_str";
}
- public class UserConfigConstants {
- private UserConfigConstants() {
+ public class EventHistoryConstants {
+ private EventHistoryConstants() {
}
public static final String ID = "id";
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
new file mode 100644
index 0000000..356886b
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchEventHistoryStateFilter.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.web.filters;
+
+import org.apache.ambari.logsearch.common.MessageEnums;
+import org.apache.ambari.logsearch.common.VResponse;
+import org.apache.ambari.logsearch.conf.SolrPropsConfig;
+import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
+import org.apache.ambari.logsearch.util.RESTErrorUtil;
+import org.springframework.security.web.util.matcher.RequestMatcher;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class LogsearchEventHistoryStateFilter extends AbstractLogsearchGlobalStateFilter {
+
+
+ public LogsearchEventHistoryStateFilter(RequestMatcher requestMatcher, SolrCollectionState state, SolrPropsConfig solrPropsConfig) {
+ super(requestMatcher, state, solrPropsConfig);
+ }
+
+ @Override
+ public VResponse getErrorResponse(SolrCollectionState solrCollectionState, SolrPropsConfig solrPropsConfig, HttpServletRequest request) {
+ String requestUri = request.getRequestURI();
+ if (!solrCollectionState.isZnodeReady()) {
+ return RESTErrorUtil.createMessageResponse(String.format(ZNODE_NOT_READY_MSG,
+ "history", solrPropsConfig.getZkConnectString(), requestUri), MessageEnums.ZNODE_NOT_READY);
+ } else if (!solrCollectionState.isConfigurationUploaded()) {
+ return RESTErrorUtil.createMessageResponse(String.format(ZK_CONFIG_NOT_READY_MSG, "history",
+ solrPropsConfig.getConfigName(), solrPropsConfig.getCollection(), requestUri), MessageEnums.ZK_CONFIG_NOT_READY);
+ } else if (!solrCollectionState.isSolrCollectionReady()) {
+ return RESTErrorUtil.createMessageResponse(String.format(SOLR_COLLECTION_NOT_READY_MSG,
+ solrPropsConfig.getCollection(), requestUri), MessageEnums.SOLR_COLLECTION_NOT_READY);
+ }
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java b/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
deleted file mode 100644
index 037bed0..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/main/java/org/apache/ambari/logsearch/web/filters/LogsearchUserConfigStateFilter.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.web.filters;
-
-import org.apache.ambari.logsearch.common.MessageEnums;
-import org.apache.ambari.logsearch.common.VResponse;
-import org.apache.ambari.logsearch.conf.SolrPropsConfig;
-import org.apache.ambari.logsearch.conf.global.SolrCollectionState;
-import org.apache.ambari.logsearch.util.RESTErrorUtil;
-import org.springframework.security.web.util.matcher.RequestMatcher;
-
-import javax.servlet.http.HttpServletRequest;
-
-public class LogsearchUserConfigStateFilter extends AbstractLogsearchGlobalStateFilter {
-
-
- public LogsearchUserConfigStateFilter(RequestMatcher requestMatcher, SolrCollectionState state, SolrPropsConfig solrPropsConfig) {
- super(requestMatcher, state, solrPropsConfig);
- }
-
- @Override
- public VResponse getErrorResponse(SolrCollectionState solrCollectionState, SolrPropsConfig solrPropsConfig, HttpServletRequest request) {
- String requestUri = request.getRequestURI();
- if (!solrCollectionState.isZnodeReady()) {
- return RESTErrorUtil.createMessageResponse(String.format(ZNODE_NOT_READY_MSG,
- "userconfig", solrPropsConfig.getZkConnectString(), requestUri), MessageEnums.ZNODE_NOT_READY);
- } else if (!solrCollectionState.isConfigurationUploaded()) {
- return RESTErrorUtil.createMessageResponse(String.format(ZK_CONFIG_NOT_READY_MSG, "userconfig",
- solrPropsConfig.getConfigName(), solrPropsConfig.getCollection(), requestUri), MessageEnums.ZK_CONFIG_NOT_READY);
- } else if (!solrCollectionState.isSolrCollectionReady()) {
- return RESTErrorUtil.createMessageResponse(String.format(SOLR_COLLECTION_NOT_READY_MSG,
- solrPropsConfig.getCollection(), requestUri), MessageEnums.SOLR_COLLECTION_NOT_READY);
- }
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
new file mode 100644
index 0000000..2940a7f
--- /dev/null
+++ b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/EventHistoryRequestQueryConverterTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.ambari.logsearch.converter;
+
+import org.apache.ambari.logsearch.model.request.impl.EventHistoryRequest;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class EventHistoryRequestQueryConverterTest extends AbstractRequestConverterTest {
+
+ private EventHistoryRequestQueryConverter underTest;
+
+ @Before
+ public void setUp() {
+ underTest = new EventHistoryRequestQueryConverter();
+ }
+
+ @Test
+ public void testConvert() {
+ // GIVEN
+ EventHistoryRequest request = new EventHistoryRequest();
+ request.setRowType("myRowType"); // TODO: validate these 3 fields @Valid on EventHistoryRequest object -> not null
+ request.setFilterName("myFilterName");
+ request.setClusters("cl1,cl2");
+ // WHEN
+ SolrQuery queryResult = underTest.convert(request);
+ // THEN
+ assertEquals("?q=*%3A*&fq=rowtype%3AmyRowType&fq=filtername%3A*myFilterName*&fq=cluster%3A%28cl1+OR+cl2%29&start=0&rows=10&sort=filtername+asc",
+ queryResult.toQueryString());
+ }
+}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java b/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
deleted file mode 100644
index 66560c5..0000000
--- a/ambari-logsearch/ambari-logsearch-server/src/test/java/org/apache/ambari/logsearch/converter/UserConfigRequestQueryConverterTest.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.ambari.logsearch.converter;
-
-import org.apache.ambari.logsearch.model.request.impl.UserConfigRequest;
-import org.apache.solr.client.solrj.SolrQuery;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class UserConfigRequestQueryConverterTest extends AbstractRequestConverterTest {
-
- private UserConfigRequestQueryConverter underTest;
-
- @Before
- public void setUp() {
- underTest = new UserConfigRequestQueryConverter();
- }
-
- @Test
- public void testConvert() {
- // GIVEN
- UserConfigRequest request = new UserConfigRequest();
- request.setRowType("myRowType"); // TODO: validate these 3 fields @Valid on UserConfigRequest object -> not null
- request.setFilterName("myFilterName");
- request.setClusters("cl1,cl2");
- // WHEN
- SolrQuery queryResult = underTest.convert(request);
- // THEN
- assertEquals("?q=*%3A*&fq=rowtype%3AmyRowType&fq=filtername%3A*myFilterName*&fq=cluster%3A%28cl1+OR+cl2%29&start=0&rows=10&sort=filtername+asc",
- queryResult.toQueryString());
- }
-}
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
index 06b2619..596695b 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/collection_bases/VEventHistoryListBase.js
@@ -28,7 +28,7 @@ define(['require',
var VEventHistoryListBase = BaseCollection.extend(
/** @lends VEventHistoryListBase.prototype */
{
- url: Globals.baseURL + 'userconfig',
+ url: Globals.baseURL + 'history',
model: VEventHistory,
@@ -48,7 +48,7 @@ define(['require',
*************************/
saveEventHistory: function(postData, options) {
- var url = Globals.baseURL + 'userconfig';
+ var url = Globals.baseURL + 'history';
options = _.extend({
data: JSON.stringify(postData),
@@ -59,7 +59,7 @@ define(['require',
return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
},
saveDashboard: function(postData, options) {
- var url = Globals.baseURL + 'userconfig';
+ var url = Globals.baseURL + 'history';
options = _.extend({
data: JSON.stringify(postData),
@@ -70,7 +70,7 @@ define(['require',
return this.constructor.nonCrudOperation.call(this, url, 'POST', options);
},
deleteEventHistory: function(postData, options) {
- var url = Globals.baseURL + 'userconfig/' + postData.id;
+ var url = Globals.baseURL + 'history/' + postData.id;
options = _.extend({
contentType: 'application/json',
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
index cd469de..a672a94 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/model_bases/VUserFilterBase.js
@@ -27,7 +27,7 @@ define(['require',
var VUserFilterBase = BaseModel.extend(
/** @lends VUserFilterBase.prototype */
{
- urlRoot: Globals.baseURL + 'userconfig/filters',
+ urlRoot: Globals.baseURL + 'history/filters',
defaults: {},
http://git-wip-us.apache.org/repos/asf/ambari/blob/fc00b2ca/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
index bbd57465..3cdca56 100644
--- a/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
+++ b/ambari-logsearch/ambari-logsearch-web/src/main/webapp/scripts/views/common/Header.js
@@ -236,7 +236,7 @@ define(['require',
content.model.set(content.setValues());
content.model.save(content.model.attributes, {
- url: Globals.baseURL + 'userconfig/filters',
+ url: Globals.baseURL + 'history/filters',
success : function(model,response){
Utils.notifySuccess({
content: "Filter has been saved."
[12/26] ambari git commit: AMBARI-20853. Service Advisor - Allow
Service to define its Advisor Type as Python or Java (alejandro)
Posted by rl...@apache.org.
AMBARI-20853. Service Advisor - Allow Service to define its Advisor Type as Python or Java (alejandro)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f1ca09c0
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f1ca09c0
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f1ca09c0
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: f1ca09c03a2fe316129aa5623c675b62d3177112
Parents: acc12fb
Author: Alejandro Fernandez <af...@hortonworks.com>
Authored: Mon Jun 5 15:24:49 2017 -0700
Committer: Alejandro Fernandez <af...@hortonworks.com>
Committed: Mon Jun 12 13:02:59 2017 -0700
----------------------------------------------------------------------
ambari-client/groovy-client/pom.xml | 2 +
ambari-funtest/pom.xml | 2 +
ambari-infra/ambari-infra-solr-client/pom.xml | 2 +
.../ambari-logsearch-config-api/pom.xml | 2 +-
.../ambari-logsearch-config-zookeeper/pom.xml | 2 +-
ambari-logsearch/ambari-logsearch-it/pom.xml | 4 +-
.../ambari-logsearch-logfeeder/pom.xml | 4 +-
.../ambari-metrics-timelineservice/pom.xml | 4 +-
ambari-project/pom.xml | 4 +-
ambari-server/checkstyle.xml | 4 +
ambari-server/pom.xml | 25 ++-
.../stackadvisor/StackAdvisorHelper.java | 74 +++++--
.../stackadvisor/StackAdvisorRunner.java | 207 ++++++++++++-------
.../ComponentLayoutRecommendationCommand.java | 5 +-
.../ComponentLayoutValidationCommand.java | 11 +-
...rationDependenciesRecommendationCommand.java | 11 +-
.../ConfigurationRecommendationCommand.java | 11 +-
.../ConfigurationValidationCommand.java | 11 +-
.../commands/StackAdvisorCommand.java | 15 +-
.../ambari/server/stack/ServiceModule.java | 4 +
.../apache/ambari/server/state/ServiceInfo.java | 26 ++-
.../stackadvisor/StackAdvisorHelperTest.java | 63 ++++--
.../stackadvisor/StackAdvisorRunnerTest.java | 10 +-
.../ConfigurationRecommendationCommandTest.java | 3 +-
.../commands/StackAdvisorCommandTest.java | 47 ++---
.../ambari/server/stack/ServiceModuleTest.java | 31 +++
ambari-views/examples/weather-view/pom.xml | 2 +-
contrib/views/hawq/pom.xml | 2 +-
contrib/views/hive-next/pom.xml | 4 +-
contrib/views/hive20/pom.xml | 4 +-
contrib/views/pig/pom.xml | 2 +-
contrib/views/tez/pom.xml | 3 +-
contrib/views/wfmanager/pom.xml | 1 +
pom.xml | 17 +-
serviceadvisor/pom.xml | 103 +++++++++
.../ambari/serviceadvisor/ServiceAdvisor.java | 147 +++++++++++++
.../ServiceAdvisorCommandType.java | 63 ++++++
37 files changed, 756 insertions(+), 176 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-client/groovy-client/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-client/groovy-client/pom.xml b/ambari-client/groovy-client/pom.xml
index fa89a73..8fafdec 100644
--- a/ambari-client/groovy-client/pom.xml
+++ b/ambari-client/groovy-client/pom.xml
@@ -29,10 +29,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-funtest/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-funtest/pom.xml b/ambari-funtest/pom.xml
index 66678c2..3738106 100644
--- a/ambari-funtest/pom.xml
+++ b/ambari-funtest/pom.xml
@@ -266,10 +266,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-infra/ambari-infra-solr-client/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-infra/ambari-infra-solr-client/pom.xml b/ambari-infra/ambari-infra-solr-client/pom.xml
index 8cb2248..d103003 100644
--- a/ambari-infra/ambari-infra-solr-client/pom.xml
+++ b/ambari-infra/ambari-infra-solr-client/pom.xml
@@ -60,10 +60,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-config-api/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-config-api/pom.xml b/ambari-logsearch/ambari-logsearch-config-api/pom.xml
index 5355906..59286a6 100644
--- a/ambari-logsearch/ambari-logsearch-config-api/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-config-api/pom.xml
@@ -43,7 +43,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
+ <version>1.7.20</version>
</dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml b/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
index 7ecda60..4e9964c 100644
--- a/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-config-zookeeper/pom.xml
@@ -73,7 +73,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-it/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-it/pom.xml b/ambari-logsearch/ambari-logsearch-it/pom.xml
index 81af9e8..db3e09f 100644
--- a/ambari-logsearch/ambari-logsearch-it/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-it/pom.xml
@@ -81,12 +81,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.10</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>com.flipkart.zjsonpatch</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml b/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
index ddef52f..ce784cb 100644
--- a/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
+++ b/ambari-logsearch/ambari-logsearch-logfeeder/pom.xml
@@ -99,12 +99,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.7</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.10</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-metrics/ambari-metrics-timelineservice/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-metrics/ambari-metrics-timelineservice/pom.xml b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
index f9d7e19..3419f16 100644
--- a/ambari-metrics/ambari-metrics-timelineservice/pom.xml
+++ b/ambari-metrics/ambari-metrics-timelineservice/pom.xml
@@ -568,13 +568,13 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.2</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.2</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-project/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml
index 64d1416..9bb2e26 100644
--- a/ambari-project/pom.xml
+++ b/ambari-project/pom.xml
@@ -210,12 +210,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.2</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
- <version>1.7.2</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.eclipse.persistence</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/checkstyle.xml
----------------------------------------------------------------------
diff --git a/ambari-server/checkstyle.xml b/ambari-server/checkstyle.xml
index 6b4824a..97fdc2a 100644
--- a/ambari-server/checkstyle.xml
+++ b/ambari-server/checkstyle.xml
@@ -11,6 +11,10 @@
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
+ <!-- Checkstyle binds to phase "validate" by default.
+ Run independently as, cd ambari-server ; mvn checkstyle:checkstyle
+ Or can skip as, mvn ... -Dcheckstyle.skip
+ -->
<module name="TreeWalker">
<module name="AvoidTransactionalOnPrivateMethodsCheck"/>
<!-- <module name="UndocumentedRestApiOperationCheck"/> Swagger - uncomment when API documentation is done -->
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml
index d2b65af..a1cd239 100644
--- a/ambari-server/pom.xml
+++ b/ambari-server/pom.xml
@@ -837,6 +837,10 @@
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.version}</version>
</plugin>
+ <!-- Checkstyle binds to phase "validate" by default.
+ Run independently as, cd ambari-server ; mvn checkstyle:checkstyle
+ Or can skip as, mvn ... -Dcheckstyle.skip
+ -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
@@ -1287,10 +1291,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
@@ -1354,6 +1360,12 @@
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
+ <version>2.6</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-lang3</artifactId>
+ <version>3.1</version>
</dependency>
<dependency>
<groupId>commons-net</groupId>
@@ -1641,7 +1653,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
- <version>1.7.2</version>
+ <version>1.7.20</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
@@ -1653,6 +1670,12 @@
<artifactId>metrics-jvm</artifactId>
<version>3.1.0</version>
</dependency>
+
+ <dependency>
+ <groupId>serviceadvisor</groupId>
+ <artifactId>serviceadvisor</artifactId>
+ <version>1.0.0.0-SNAPSHOT</version>
+ </dependency>
<!-- Dependency in order to annotate unit tests with a category. -->
<dependency>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
index 3083d9f..3e5599c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelper.java
@@ -21,6 +21,7 @@ package org.apache.ambari.server.api.services.stackadvisor;
import java.io.File;
import java.io.IOException;
+import org.apache.ambari.server.AmbariException;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest.StackAdvisorRequestType;
import org.apache.ambari.server.api.services.stackadvisor.commands.ComponentLayoutRecommendationCommand;
@@ -33,16 +34,23 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.state.ServiceInfo;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
import com.google.inject.Inject;
import com.google.inject.Singleton;
+
@Singleton
public class StackAdvisorHelper {
+ protected static Log LOG = LogFactory.getLog(StackAdvisorHelper.class);
+
private File recommendationsDir;
private String recommendationsArtifactsLifetime;
private int recommendationsArtifactsRolloverMax;
- private String stackAdvisorScript;
+ public static String pythonStackAdvisorScript;
private final AmbariMetaInfo metaInfo;
/* Monotonically increasing requestid */
@@ -55,7 +63,8 @@ public class StackAdvisorHelper {
this.recommendationsDir = conf.getRecommendationsDir();
this.recommendationsArtifactsLifetime = conf.getRecommendationsArtifactsLifetime();
this.recommendationsArtifactsRolloverMax = conf.getRecommendationsArtifactsRolloverMax();
- this.stackAdvisorScript = conf.getStackAdvisorScript();
+
+ this.pythonStackAdvisorScript = conf.getStackAdvisorScript();
this.saRunner = saRunner;
this.metaInfo = metaInfo;
}
@@ -72,20 +81,26 @@ public class StackAdvisorHelper {
throws StackAdvisorException {
requestId = generateRequestId();
- StackAdvisorCommand<ValidationResponse> command = createValidationCommand(request
- .getRequestType());
+ // TODO, need frontend to pass the Service Name that was modified.
+ // For now, hardcode.
+ // Once fixed, change StackAdvisorHelperTest.java to use the actual service name.
+ String serviceName = "ZOOKEEPER";
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+ StackAdvisorCommand<ValidationResponse> command = createValidationCommand(serviceName, request);
- return command.invoke(request);
+ return command.invoke(request, serviceAdvisorType);
}
- StackAdvisorCommand<ValidationResponse> createValidationCommand(
- StackAdvisorRequestType requestType) throws StackAdvisorException {
+ StackAdvisorCommand<ValidationResponse> createValidationCommand(String serviceName, StackAdvisorRequest request) throws StackAdvisorException {
+ StackAdvisorRequestType requestType = request.getRequestType();
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+
StackAdvisorCommand<ValidationResponse> command;
if (requestType == StackAdvisorRequestType.HOST_GROUPS) {
- command = new ComponentLayoutValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+ command = new ComponentLayoutValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
requestId, saRunner, metaInfo);
} else if (requestType == StackAdvisorRequestType.CONFIGURATIONS) {
- command = new ConfigurationValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+ command = new ConfigurationValidationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
requestId, saRunner, metaInfo);
} else {
throw new StackAdvisorRequestException(String.format("Unsupported request type, type=%s",
@@ -107,23 +122,29 @@ public class StackAdvisorHelper {
throws StackAdvisorException {
requestId = generateRequestId();
- StackAdvisorCommand<RecommendationResponse> command = createRecommendationCommand(request
- .getRequestType());
+ // TODO, need to pass the service Name that was modified.
+ // For now, hardcode
+ String serviceName = "ZOOKEEPER";
+
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+ StackAdvisorCommand<RecommendationResponse> command = createRecommendationCommand(serviceName, request);
- return command.invoke(request);
+ return command.invoke(request, serviceAdvisorType);
}
- StackAdvisorCommand<RecommendationResponse> createRecommendationCommand(
- StackAdvisorRequestType requestType) throws StackAdvisorException {
+ StackAdvisorCommand<RecommendationResponse> createRecommendationCommand(String serviceName, StackAdvisorRequest request) throws StackAdvisorException {
+ StackAdvisorRequestType requestType = request.getRequestType();
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = getServiceAdvisorType(request.getStackName(), request.getStackVersion(), serviceName);
+
StackAdvisorCommand<RecommendationResponse> command;
if (requestType == StackAdvisorRequestType.HOST_GROUPS) {
- command = new ComponentLayoutRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+ command = new ComponentLayoutRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
requestId, saRunner, metaInfo);
} else if (requestType == StackAdvisorRequestType.CONFIGURATIONS) {
- command = new ConfigurationRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+ command = new ConfigurationRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
requestId, saRunner, metaInfo);
} else if (requestType == StackAdvisorRequestType.CONFIGURATION_DEPENDENCIES) {
- command = new ConfigurationDependenciesRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript,
+ command = new ConfigurationDependenciesRecommendationCommand(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType,
requestId, saRunner, metaInfo);
} else {
throw new StackAdvisorRequestException(String.format("Unsupported request type, type=%s",
@@ -134,6 +155,25 @@ public class StackAdvisorHelper {
}
/**
+ * Get the Service Advisor type that the service defines for the specified stack and version. If an error, return null.
+ * @param stackName Stack Name
+ * @param stackVersion Stack Version
+ * @param serviceName Service Name
+ * @return Service Advisor type for that Stack, Version, and Service
+ */
+ private ServiceInfo.ServiceAdvisorType getServiceAdvisorType(String stackName, String stackVersion, String serviceName) {
+ try {
+ ServiceInfo service = metaInfo.getService(stackName, stackVersion, serviceName);
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = service.getServiceAdvisorType();
+
+ return serviceAdvisorType;
+ } catch (AmbariException e) {
+ ;
+ }
+ return null;
+ }
+
+ /**
* Returns an incremented requestId. Rollsover back to 0 in case the requestId >= recommendationsArtifactsrollovermax
* @return {int requestId}
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
index a4b7915..90b95b3 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunner.java
@@ -24,123 +24,190 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.state.ServiceInfo;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import com.google.inject.Inject;
import com.google.inject.Singleton;
+
@Singleton
public class StackAdvisorRunner {
private final static Logger LOG = LoggerFactory.getLogger(StackAdvisorRunner.class);
+ @Inject
+ private Configuration configs;
+
/**
* Runs stack_advisor.py script in the specified {@code actionDirectory}.
*
- * @param script stack advisor script
+ * @param serviceAdvisorType PYTHON or JAVA
* @param saCommandType {@link StackAdvisorCommandType} to run.
* @param actionDirectory directory for the action
*/
- public void runScript(String script, StackAdvisorCommandType saCommandType, File actionDirectory)
+ public void runScript(ServiceInfo.ServiceAdvisorType serviceAdvisorType, StackAdvisorCommandType saCommandType, File actionDirectory)
throws StackAdvisorException {
- LOG.info(String.format("Script=%s, actionDirectory=%s, command=%s", script, actionDirectory,
+ LOG.info(String.format("StackAdvisorRunner. serviceAdvisorType=%s, actionDirectory=%s, command=%s", serviceAdvisorType.toString(), actionDirectory,
saCommandType));
String outputFile = actionDirectory + File.separator + "stackadvisor.out";
String errorFile = actionDirectory + File.separator + "stackadvisor.err";
- ProcessBuilder builder = prepareShellCommand(script, saCommandType,
- actionDirectory, outputFile,
- errorFile);
+ String hostsFile = actionDirectory + File.separator + "hosts.json";
+ String servicesFile = actionDirectory + File.separator + "services.json";
+
+ LOG.info("StackAdvisorRunner. Expected files: hosts.json={}, services.json={}, output={}, error={}", hostsFile, servicesFile, outputFile, errorFile);
+
+ int stackAdvisorReturnCode = -1;
+
+ switch (serviceAdvisorType) {
+ case JAVA:
+ org.apache.ambari.serviceadvisor.ServiceAdvisor serviceAdvisor = new org.apache.ambari.serviceadvisor.ServiceAdvisor();
+
+ LOG.info("StackAdvisorRunner.runScript(): Calling Java ServiceAdvisor's run method.");
+ stackAdvisorReturnCode = serviceAdvisor.run(saCommandType.toString(), hostsFile, servicesFile, outputFile, errorFile);
+ LOG.info(String.format("StackAdvisorRunner.runScript(): Java ServiceAdvisor's return code: %d", stackAdvisorReturnCode));
+ break;
+ case PYTHON:
+ LOG.info("StackAdvisorRunner.runScript(): Calling Python Stack Advisor.");
+ ProcessBuilder builder = prepareShellCommand(ServiceInfo.ServiceAdvisorType.PYTHON, StackAdvisorHelper.pythonStackAdvisorScript, saCommandType,
+ actionDirectory, outputFile,
+ errorFile);
+ stackAdvisorReturnCode = launchProcess(builder);
+ break;
+ }
+
+ // For both Python and Java, need to process log files for now.
+ processLogs(stackAdvisorReturnCode, outputFile, errorFile);
+ }
+ /**
+ * Launch a process, wait for it to finish, and return its exit code.
+ * @param builder Process Builder
+ * @return
+ * @throws StackAdvisorException
+ */
+ private int launchProcess(ProcessBuilder builder) throws StackAdvisorException {
+ int exitCode = -1;
+ Process process = null;
try {
- Process process = builder.start();
-
- try {
- LOG.info("Stack-advisor output={}, error={}", outputFile, errorFile);
-
- int exitCode = process.waitFor();
- String outMessage;
- String errMessage = null;
- try {
- outMessage = FileUtils.readFileToString(new File(outputFile)).trim();
- errMessage = FileUtils.readFileToString(new File(errorFile)).trim();
- LOG.info("Stack advisor output files");
- LOG.info(" advisor script stdout: {}", outMessage);
- LOG.info(" advisor script stderr: {}", errMessage);
- } catch (IOException io) {
- LOG.error("Error in reading script log files", io);
- }
- if (exitCode > 0) {
- String errorMessage;
- if (errMessage != null) {
- // We want to get the last line.
- int index = errMessage.lastIndexOf("\n");
- if (index > 0 && index == (errMessage.length() - 1)) {
- index = errMessage.lastIndexOf("\n", index - 1); // sentence ended with newline
- }
- if (index > -1) {
- errMessage = errMessage.substring(index + 1).trim();
- }
- errorMessage = "Stack Advisor reported an error: " + errMessage;
- } else {
- errorMessage = "Error occurred during stack advisor execution";
+ process = builder.start();
+ exitCode = process.waitFor();
+ } catch (Exception ioe) {
+ String message = "Error executing Stack Advisor: ";
+ LOG.error(message, ioe);
+ throw new StackAdvisorException(message + ioe.getMessage());
+ } finally {
+ if (process != null) {
+ process.destroy();
+ }
+ }
+ return exitCode;
+ }
+
+ /**
+ * Process the exit code and logs. If non-zero then parse the log files and raise the appropriate exception.
+ * @param exitCode Process exit code
+ * @param outputFile Path to output file
+ * @param errorFile Path to error file
+ * @throws StackAdvisorException
+ */
+ private void processLogs(int exitCode, String outputFile, String errorFile) throws StackAdvisorException {
+ String outMessage = printMessage("stdout", outputFile);
+ String errMessage = printMessage("stderr", errorFile);
+
+ try {
+ if (exitCode != 0) {
+ String errorMessage;
+ if (errMessage != null) {
+ // We want to get the last line.
+ int index = errMessage.lastIndexOf("\n");
+ if (index > 0 && index == (errMessage.length() - 1)) {
+ index = errMessage.lastIndexOf("\n", index - 1); // sentence ended with newline
}
- errorMessage += "\nStdOut file: " + outputFile + "\n";
- errorMessage += "\nStdErr file: " + errorFile;
- switch (exitCode) {
- case 1:
- throw new StackAdvisorRequestException(errorMessage);
- case 2:
- throw new StackAdvisorException(errorMessage);
+ if (index > -1) {
+ errMessage = errMessage.substring(index + 1).trim();
}
+ errorMessage = String.format("Stack Advisor reported an error. Exit Code: %s. Error: %s ", exitCode, errMessage);
+ } else {
+ errorMessage = String.format("Error occurred during Stack Advisor execution. Exit Code: %s", exitCode);
+ }
+ errorMessage += "\nStdOut file: " + outputFile + "\n";
+ errorMessage += "\nStdErr file: " + errorFile;
+ switch (exitCode) {
+ case 1:
+ throw new StackAdvisorRequestException(errorMessage);
+ case 2:
+ throw new StackAdvisorException(errorMessage);
}
- } finally {
- process.destroy();
}
} catch (StackAdvisorException ex) {
throw ex;
- } catch (Exception ioe) {
- String message = "Error executing stack advisor: ";
- LOG.error(message, ioe);
- throw new StackAdvisorException(message + ioe.getMessage());
}
}
/**
+ * Logs messages from the output/error file.
+ * @param type Severity type, stdout or stderr
+ * @param file File path
+ * @return File to a String
+ */
+ private String printMessage(String type, String file) {
+ String message = null;
+ try {
+ message = FileUtils.readFileToString(new File(file)).trim();
+ LOG.info(" Advisor script {}: {}", type, message);
+ } catch (IOException io) {
+ LOG.error("Error in reading script log files", io);
+ }
+ return message;
+ }
+
+ /**
* Gets an instance of a {@link ProcessBuilder} that's ready to execute the
* shell command to run the stack advisor script. This will take the
* environment variables from the current process.
*
- * @param script
- * @param saCommandType
- * @param actionDirectory
- * @param outputFile
- * @param errorFile
- * @return
+ * @param serviceAdvisorType Python or Java
+ * @param script Python script or jar path
+ * @param saCommandType command type such as validate, configure
+ * @param actionDirectory Directory that contains hosts.json, services.json, and output files
+ * @param outputFile Output file path
+ * @param errorFile Error file path
+ * @return Process that can launch
*/
- ProcessBuilder prepareShellCommand(String script,
- StackAdvisorCommandType saCommandType,
- File actionDirectory, String outputFile, String errorFile) {
+ ProcessBuilder prepareShellCommand(ServiceInfo.ServiceAdvisorType serviceAdvisorType, String script,
+ StackAdvisorCommandType saCommandType,
+ File actionDirectory, String outputFile, String errorFile) {
String hostsFile = actionDirectory + File.separator + "hosts.json";
String servicesFile = actionDirectory + File.separator + "services.json";
// includes the original command plus the arguments for it
- List<String> builderParameters = new ArrayList<>();
- if (System.getProperty("os.name").contains("Windows")) {
- builderParameters.add("cmd");
- builderParameters.add("/c");
- } else {
- builderParameters.add("sh");
- builderParameters.add("-c");
+ List<String> builderParameters = new ArrayList<String>();
+
+ switch (serviceAdvisorType) {
+ case PYTHON:
+ case JAVA:
+ if (System.getProperty("os.name").contains("Windows")) {
+ builderParameters.add("cmd");
+ builderParameters.add("/c");
+ } else {
+ builderParameters.add("sh");
+ builderParameters.add("-c");
+ }
+ break;
+ default:
+ break;
}
// for the 3rd argument, build a single parameter since we use -c
// ProcessBuilder doesn't support output redirection until JDK 1.7
- String commandStringParameters[] = new String[] { script,
- saCommandType.toString(), hostsFile,
- servicesFile, "1>", outputFile, "2>", errorFile };
+ String commandStringParameters[] = new String[] {script, saCommandType.toString(), hostsFile, servicesFile, "1>", outputFile, "2>", errorFile};
StringBuilder commandString = new StringBuilder();
for (String command : commandStringParameters) {
@@ -149,7 +216,7 @@ public class StackAdvisorRunner {
builderParameters.add(commandString.toString());
- LOG.debug("Stack advisor command is {}", builderParameters);
+ LOG.debug("StackAdvisorRunner. Stack advisor command is {}", StringUtils.join(" ", builderParameters));
return new ProcessBuilder(builderParameters);
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
index ca1d95f2..6a0c4d6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutRecommendationCommand.java
@@ -25,6 +25,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
/**
* {@link StackAdvisorCommand} implementation for component-layout
@@ -35,11 +36,11 @@ public class ComponentLayoutRecommendationCommand extends
public ComponentLayoutRecommendationCommand(File recommendationsDir,
String recommendationsArtifactsLifetime,
- String stackAdvisorScript,
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType,
int requestId,
StackAdvisorRunner saRunner,
AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
index 91d8f9c..feba22e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ComponentLayoutValidationCommand.java
@@ -25,15 +25,20 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
/**
* {@link StackAdvisorCommand} implementation for component-layout validation.
*/
public class ComponentLayoutValidationCommand extends StackAdvisorCommand<ValidationResponse> {
- public ComponentLayoutValidationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
- int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ public ComponentLayoutValidationCommand(File recommendationsDir,
+ String recommendationsArtifactsLifetime,
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+ int requestId,
+ StackAdvisorRunner saRunner,
+ AmbariMetaInfo metaInfo) {
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
index fae0b16..83a6306 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationDependenciesRecommendationCommand.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
/**
* {@link StackAdvisorCommand} implementation for
@@ -40,9 +41,13 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
public class ConfigurationDependenciesRecommendationCommand extends
StackAdvisorCommand<RecommendationResponse> {
- public ConfigurationDependenciesRecommendationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
- StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ public ConfigurationDependenciesRecommendationCommand(File recommendationsDir,
+ String recommendationsArtifactsLifetime,
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+ int requestId,
+ StackAdvisorRunner saRunner,
+ AmbariMetaInfo metaInfo) {
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
index e25e39b..7ac3fdb 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommand.java
@@ -32,6 +32,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
/**
* {@link org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommand} implementation for
@@ -40,9 +41,13 @@ import org.apache.ambari.server.api.services.stackadvisor.recommendations.Recomm
public class ConfigurationRecommendationCommand extends
StackAdvisorCommand<RecommendationResponse> {
- public ConfigurationRecommendationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
- StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ public ConfigurationRecommendationCommand(File recommendationsDir,
+ String recommendationsArtifactsLifetime,
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+ int requestId,
+ StackAdvisorRunner saRunner,
+ AmbariMetaInfo metaInfo) {
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
index 1892a82..1b6b703 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationValidationCommand.java
@@ -25,15 +25,20 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorException;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
/**
* {@link StackAdvisorCommand} implementation for configuration validation.
*/
public class ConfigurationValidationCommand extends StackAdvisorCommand<ValidationResponse> {
- public ConfigurationValidationCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
- int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ public ConfigurationValidationCommand(File recommendationsDir,
+ String recommendationsArtifactsLifetime,
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+ int requestId,
+ StackAdvisorRunner saRunner,
+ AmbariMetaInfo metaInfo) {
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
index c2895d9..356754d 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommand.java
@@ -67,7 +67,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
/**
* Type of response object provided by extending classes when
- * {@link #invoke(StackAdvisorRequest)} is called.
+ * {@link #invoke(StackAdvisorRequest, ServiceInfo.ServiceAdvisorType)} is called.
*/
private Class<T> type;
@@ -98,7 +98,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
private File recommendationsDir;
private String recommendationsArtifactsLifetime;
- private String stackAdvisorScript;
+ private ServiceInfo.ServiceAdvisorType serviceAdvisorType;
private int requestId;
private File requestDirectory;
@@ -109,7 +109,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
private final AmbariMetaInfo metaInfo;
@SuppressWarnings("unchecked")
- public StackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript, int requestId,
+ public StackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType serviceAdvisorType, int requestId,
StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
this.type = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass())
.getActualTypeArguments()[0];
@@ -119,7 +119,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
this.recommendationsDir = recommendationsDir;
this.recommendationsArtifactsLifetime = recommendationsArtifactsLifetime;
- this.stackAdvisorScript = stackAdvisorScript;
+ this.serviceAdvisorType = serviceAdvisorType;
this.requestId = requestId;
this.saRunner = saRunner;
this.metaInfo = metaInfo;
@@ -278,7 +278,7 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
}
}
- public synchronized T invoke(StackAdvisorRequest request) throws StackAdvisorException {
+ public synchronized T invoke(StackAdvisorRequest request, ServiceInfo.ServiceAdvisorType serviceAdvisorType) throws StackAdvisorException {
validate(request);
String hostsJSON = getHostsInformation(request);
String servicesJSON = getServicesInformation(request);
@@ -289,10 +289,9 @@ public abstract class StackAdvisorCommand<T extends StackAdvisorResponse> extend
createRequestDirectory();
FileUtils.writeStringToFile(new File(requestDirectory, "hosts.json"), adjusted.hostsJSON);
- FileUtils.writeStringToFile(new File(requestDirectory, "services.json"),
- adjusted.servicesJSON);
+ FileUtils.writeStringToFile(new File(requestDirectory, "services.json"), adjusted.servicesJSON);
- saRunner.runScript(stackAdvisorScript, getCommandType(), requestDirectory);
+ saRunner.runScript(serviceAdvisorType, getCommandType(), requestDirectory);
String result = FileUtils.readFileToString(new File(requestDirectory, getResultFileName()));
T response = this.mapper.readValue(result, this.type);
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
index e41d3b2..2b4398b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ServiceModule.java
@@ -205,6 +205,10 @@ public class ServiceModule extends BaseModule<ServiceModule, ServiceInfo> implem
if (serviceInfo.getDisplayName() == null) {
serviceInfo.setDisplayName(parent.getDisplayName());
}
+ if (serviceInfo.getServiceAdvisorType() == null) {
+ ServiceInfo.ServiceAdvisorType serviceAdvisorType = parent.getServiceAdvisorType();
+ serviceInfo.setServiceAdvisorType(serviceAdvisorType == null ? ServiceInfo.ServiceAdvisorType.PYTHON : serviceAdvisorType);
+ }
if (serviceInfo.getVersion() == null) {
serviceInfo.setVersion(parent.getVersion());
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
index 97490e0..325434e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java
@@ -36,6 +36,8 @@ import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlElements;
+import javax.xml.bind.annotation.XmlEnum;
+import javax.xml.bind.annotation.XmlEnumValue;
import javax.xml.bind.annotation.XmlTransient;
import org.apache.ambari.server.api.services.AmbariMetaInfo;
@@ -72,6 +74,20 @@ public class ServiceInfo implements Validable{
private String serviceType;
private Selection selection;
+ /**
+ * Default to Python if not specified.
+ */
+
+ @XmlEnum
+ public enum ServiceAdvisorType {
+ @XmlEnumValue("PYTHON")
+ PYTHON,
+ @XmlEnumValue("JAVA")
+ JAVA
+ }
+ @XmlElement(name="service_advisor_type")
+ private ServiceAdvisorType serviceAdvisorType = null;
+
@XmlTransient
private List<PropertyInfo> properties;
@@ -341,6 +357,14 @@ public class ServiceInfo implements Validable{
this.displayName = displayName;
}
+ public void setServiceAdvisorType(ServiceAdvisorType type) {
+ this.serviceAdvisorType = type;
+ }
+
+ public ServiceAdvisorType getServiceAdvisorType() {
+ return serviceAdvisorType;
+ }
+
public String getServiceType() {
return serviceType;
}
@@ -349,7 +373,7 @@ public class ServiceInfo implements Validable{
this.serviceType = serviceType;
}
-public String getVersion() {
+ public String getVersion() {
return version;
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
index e331ddd..cedf3a2 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorHelperTest.java
@@ -38,12 +38,15 @@ import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorC
import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
import org.apache.ambari.server.api.services.stackadvisor.validations.ValidationResponse;
import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.state.ServiceInfo;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* StackAdvisorHelper unit tests.
*/
public class StackAdvisorHelperTest {
+
@Test
@SuppressWarnings("unchecked")
public void testValidate_returnsCommandResult() throws StackAdvisorException, IOException {
@@ -51,19 +54,21 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
StackAdvisorCommand<ValidationResponse> command = mock(StackAdvisorCommand.class);
ValidationResponse expected = mock(ValidationResponse.class);
+
StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.ofType(requestType).build();
- when(command.invoke(request)).thenReturn(expected);
- doReturn(command).when(helper).createValidationCommand(requestType);
-
+ when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenReturn(expected);
+ doReturn(command).when(helper).createValidationCommand("ZOOKEEPER", request);
ValidationResponse response = helper.validate(request);
-
assertEquals(expected, response);
}
@@ -75,6 +80,9 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
StackAdvisorCommand<ValidationResponse> command = mock(StackAdvisorCommand.class);
@@ -82,8 +90,8 @@ public class StackAdvisorHelperTest {
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.ofType(requestType).build();
- when(command.invoke(request)).thenThrow(new StackAdvisorException("message"));
- doReturn(command).when(helper).createValidationCommand(requestType);
+ when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenThrow(new StackAdvisorException("message"));
+ doReturn(command).when(helper).createValidationCommand("ZOOKEEPER", request);
helper.validate(request);
assertTrue(false);
@@ -96,6 +104,9 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
StackAdvisorCommand<RecommendationResponse> command = mock(StackAdvisorCommand.class);
@@ -104,8 +115,8 @@ public class StackAdvisorHelperTest {
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.ofType(requestType).build();
- when(command.invoke(request)).thenReturn(expected);
- doReturn(command).when(helper).createRecommendationCommand(requestType);
+ when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenReturn(expected);
+ doReturn(command).when(helper).createRecommendationCommand("ZOOKEEPER", request);
RecommendationResponse response = helper.recommend(request);
assertEquals(expected, response);
@@ -119,6 +130,9 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = spy(new StackAdvisorHelper(configuration, saRunner, metaInfo));
StackAdvisorCommand<RecommendationResponse> command = mock(StackAdvisorCommand.class);
@@ -126,8 +140,8 @@ public class StackAdvisorHelperTest {
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.ofType(requestType).build();
- when(command.invoke(request)).thenThrow(new StackAdvisorException("message"));
- doReturn(command).when(helper).createRecommendationCommand(requestType);
+ when(command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON)).thenThrow(new StackAdvisorException("message"));
+ doReturn(command).when(helper).createRecommendationCommand("ZOOKEEPER", request);
helper.recommend(request);
assertTrue(false);
@@ -140,11 +154,16 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
+ StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+ .ofType(requestType).build();
StackAdvisorCommand<RecommendationResponse> command = helper
- .createRecommendationCommand(requestType);
+ .createRecommendationCommand("ZOOKEEPER", request);
assertEquals(ComponentLayoutRecommendationCommand.class, command.getClass());
}
@@ -156,10 +175,15 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
StackAdvisorRequestType requestType = StackAdvisorRequestType.HOST_GROUPS;
+ StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+ .ofType(requestType).build();
- StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand(requestType);
+ StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand("ZOOKEEPER", request);
assertEquals(ComponentLayoutValidationCommand.class, command.getClass());
}
@@ -171,10 +195,15 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
StackAdvisorRequestType requestType = StackAdvisorRequestType.CONFIGURATIONS;
+ StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+ .ofType(requestType).build();
- StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand(requestType);
+ StackAdvisorCommand<ValidationResponse> command = helper.createValidationCommand("ZOOKEEPER", request);
assertEquals(ConfigurationValidationCommand.class, command.getClass());
}
@@ -186,12 +215,16 @@ public class StackAdvisorHelperTest {
when(configuration.getRecommendationsArtifactsRolloverMax()).thenReturn(100);
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
+ ServiceInfo service = mock(ServiceInfo.class);
+ when(metaInfo.getService(Mockito.anyString(), Mockito.anyString(), Mockito.anyString())).thenReturn(service);
+ when(service.getServiceAdvisorType()).thenReturn(ServiceInfo.ServiceAdvisorType.PYTHON);
StackAdvisorHelper helper = new StackAdvisorHelper(configuration, saRunner, metaInfo);
StackAdvisorRequestType requestType = StackAdvisorRequestType.CONFIGURATION_DEPENDENCIES;
+ StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
+ .ofType(requestType).build();
- StackAdvisorCommand<RecommendationResponse> command = helper.createRecommendationCommand(requestType);
+ StackAdvisorCommand<RecommendationResponse> command = helper.createRecommendationCommand("ZOOKEEPER", request);
assertEquals(ConfigurationDependenciesRecommendationCommand.class, command.getClass());
}
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
index 8d104ea..7eb9fb4 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorRunnerTest.java
@@ -28,6 +28,7 @@ import java.io.File;
import java.io.IOException;
import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommandType;
+import org.apache.ambari.server.state.ServiceInfo;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
@@ -68,7 +69,7 @@ public class StackAdvisorRunnerTest {
.toReturn(processBuilder);
expect(processBuilder.start()).andThrow(new IOException());
replay(processBuilder);
- saRunner.runScript(script, saCommandType, actionDirectory);
+ saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
}
@Test(expected = StackAdvisorRequestException.class)
@@ -85,7 +86,7 @@ public class StackAdvisorRunnerTest {
expect(processBuilder.start()).andReturn(process);
expect(process.waitFor()).andReturn(1);
replay(processBuilder, process);
- saRunner.runScript(script, saCommandType, actionDirectory);
+ saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
}
@Test(expected = StackAdvisorException.class)
@@ -102,7 +103,7 @@ public class StackAdvisorRunnerTest {
expect(processBuilder.start()).andReturn(process);
expect(process.waitFor()).andReturn(2);
replay(processBuilder, process);
- saRunner.runScript(script, saCommandType, actionDirectory);
+ saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
}
@Test
@@ -120,10 +121,9 @@ public class StackAdvisorRunnerTest {
expect(process.waitFor()).andReturn(0);
replay(processBuilder, process);
try {
- saRunner.runScript(script, saCommandType, actionDirectory);
+ saRunner.runScript(ServiceInfo.ServiceAdvisorType.PYTHON, saCommandType, actionDirectory);
} catch (StackAdvisorException ex) {
fail("Should not fail with StackAdvisorException");
}
}
-
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
index 17293eb..5e373c0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/ConfigurationRecommendationCommandTest.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.api.services.AmbariMetaInfo;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
+import org.apache.ambari.server.state.ServiceInfo;
import org.junit.Test;
public class ConfigurationRecommendationCommandTest {
@@ -43,7 +44,7 @@ public class ConfigurationRecommendationCommandTest {
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
File file = mock(File.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
- ConfigurationRecommendationCommand command = new ConfigurationRecommendationCommand(file, "1w", "script", 1, saRunner, metaInfo);
+ ConfigurationRecommendationCommand command = new ConfigurationRecommendationCommand(file, "1w", ServiceInfo.ServiceAdvisorType.PYTHON, 1, saRunner, metaInfo);
StackAdvisorRequest request = mock(StackAdvisorRequest.class);
Map<String, Set<String>> componentHostGroupMap = new HashMap<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
index 46552a3..eaa4716 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/services/stackadvisor/commands/StackAdvisorCommandTest.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequestExc
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorResponse;
import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRunner;
import org.apache.ambari.server.api.services.stackadvisor.commands.StackAdvisorCommand.StackAdvisorData;
+import org.apache.ambari.server.state.ServiceInfo;
import org.apache.commons.io.FileUtils;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.annotate.JsonProperty;
@@ -78,19 +79,18 @@ public class StackAdvisorCommandTest {
public void testInvoke_invalidRequest_throwsException() throws StackAdvisorException {
File recommendationsDir = temp.newFolder("recommendationDir");
String recommendationsArtifactsLifetime = "1w";
- String stackAdvisorScript = "echo";
int requestId = 0;
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
- StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
- stackAdvisorScript, requestId, saRunner, metaInfo));
+ StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
+ ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.build();
doThrow(new StackAdvisorException("message")).when(command).validate(request);
- command.invoke(request);
+ command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
assertTrue(false);
}
@@ -98,14 +98,13 @@ public class StackAdvisorCommandTest {
@Test(expected = StackAdvisorException.class)
public void testInvoke_saRunnerNotSucceed_throwsException() throws StackAdvisorException {
File recommendationsDir = temp.newFolder("recommendationDir");
- String stackAdvisorScript = "echo";
String recommendationsArtifactsLifetime = "1w";
int requestId = 0;
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
- stackAdvisorScript, requestId, saRunner, metaInfo));
+ ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.build();
@@ -117,24 +116,23 @@ public class StackAdvisorCommandTest {
doReturn(servicesJSON).when(command).getServicesInformation(request);
doReturn(data).when(command)
.adjust(any(StackAdvisorData.class), any(StackAdvisorRequest.class));
- doThrow(new StackAdvisorRequestException("error")).when(saRunner)
- .runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
- command.invoke(request);
+ doThrow(new StackAdvisorRequestException("error")).when(saRunner)
+ .runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+ command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
assertTrue(false);
}
@Test(expected = WebApplicationException.class)
public void testInvoke_adjustThrowsException_throwsException() throws StackAdvisorException {
File recommendationsDir = temp.newFolder("recommendationDir");
- String stackAdvisorScript = "echo";
String recommendationsArtifactsLifetime = "1w";
int requestId = 0;
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(recommendationsDir, recommendationsArtifactsLifetime,
- stackAdvisorScript, requestId, saRunner, metaInfo));
+ ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.build();
@@ -143,9 +141,11 @@ public class StackAdvisorCommandTest {
doReturn("{\"services\" : \"HDFS\"").when(command).getServicesInformation(request);
doThrow(new WebApplicationException()).when(command).adjust(any(StackAdvisorData.class),
any(StackAdvisorRequest.class));
+
doThrow(new StackAdvisorException("error")).when(saRunner)
- .runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
- command.invoke(request);
+ .runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+ command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
+
assertTrue(false);
}
@@ -155,14 +155,13 @@ public class StackAdvisorCommandTest {
String expected = "success";
final String testResourceString = String.format("{\"type\": \"%s\"}", expected);
final File recommendationsDir = temp.newFolder("recommendationDir");
- String stackAdvisorScript = "echo";
String recommendationsArtifactsLifetime = "1w";
final int requestId = 2;
StackAdvisorRunner saRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo metaInfo = mock(AmbariMetaInfo.class);
doReturn(Collections.emptyList()).when(metaInfo).getStackParentVersions(anyString(), anyString());
final StackAdvisorCommand<TestResource> command = spy(new TestStackAdvisorCommand(
- recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo));
+ recommendationsDir, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, requestId, saRunner, metaInfo));
StackAdvisorRequest request = StackAdvisorRequestBuilder.forStack("stackName", "stackVersion")
.build();
@@ -174,6 +173,7 @@ public class StackAdvisorCommandTest {
doReturn(servicesJSON).when(command).getServicesInformation(request);
doReturn(data).when(command)
.adjust(any(StackAdvisorData.class), any(StackAdvisorRequest.class));
+
doAnswer(new Answer() {
public Object answer(InvocationOnMock invocation) throws Throwable {
String resultFilePath = String.format("%s/%s", requestId, command.getResultFileName());
@@ -182,8 +182,9 @@ public class StackAdvisorCommandTest {
FileUtils.writeStringToFile(resultFile, testResourceString);
return null;
}
- }).when(saRunner).runScript(any(String.class), any(StackAdvisorCommandType.class), any(File.class));
- TestResource result = command.invoke(request);
+ }).when(saRunner).runScript(any(ServiceInfo.ServiceAdvisorType.class), any(StackAdvisorCommandType.class), any(File.class));
+
+ TestResource result = command.invoke(request, ServiceInfo.ServiceAdvisorType.PYTHON);
assertEquals(expected, result.getType());
assertEquals(requestId, result.getId());
@@ -195,7 +196,7 @@ public class StackAdvisorCommandTest {
String recommendationsArtifactsLifetime = "1w";
StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
- StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+ StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
stackAdvisorRunner, ambariMetaInfo);
ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
"{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -223,7 +224,7 @@ public class StackAdvisorCommandTest {
String recommendationsArtifactsLifetime = "1w";
StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
- StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+ StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
stackAdvisorRunner, ambariMetaInfo);
ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
"{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -245,7 +246,7 @@ public class StackAdvisorCommandTest {
String recommendationsArtifactsLifetime = "1w";
StackAdvisorRunner stackAdvisorRunner = mock(StackAdvisorRunner.class);
AmbariMetaInfo ambariMetaInfo = mock(AmbariMetaInfo.class);
- StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, "test", 1,
+ StackAdvisorCommand<TestResource> cmd = new TestStackAdvisorCommand(file, recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType.PYTHON, 1,
stackAdvisorRunner, ambariMetaInfo);
ObjectNode objectNode = (ObjectNode) cmd.mapper.readTree("{\"Versions\": " +
"{\"stack_name\": \"stack\", \"stack_version\":\"1.0.0\"}}");
@@ -265,9 +266,9 @@ public class StackAdvisorCommandTest {
}
class TestStackAdvisorCommand extends StackAdvisorCommand<TestResource> {
- public TestStackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, String stackAdvisorScript,
- int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
- super(recommendationsDir, recommendationsArtifactsLifetime, stackAdvisorScript, requestId, saRunner, metaInfo);
+ public TestStackAdvisorCommand(File recommendationsDir, String recommendationsArtifactsLifetime, ServiceInfo.ServiceAdvisorType serviceAdvisorType,
+ int requestId, StackAdvisorRunner saRunner, AmbariMetaInfo metaInfo) {
+ super(recommendationsDir, recommendationsArtifactsLifetime, serviceAdvisorType, requestId, saRunner, metaInfo);
}
@Override
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java b/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
index 20d2168..784d884 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/stack/ServiceModuleTest.java
@@ -439,6 +439,37 @@ public class ServiceModuleTest {
}
@Test
+ public void testResolveServiceAdvisor() throws Exception {
+ ServiceInfo info = new ServiceInfo();
+ ServiceInfo parentInfo = new ServiceInfo();
+ ServiceModule child = createServiceModule(info);
+ ServiceModule parent = createServiceModule(parentInfo);
+
+ // Parent is NULL, Child is NULL => Child defaults to PYTHON
+ parent.getModuleInfo().setServiceAdvisorType(null);
+ child.getModuleInfo().setServiceAdvisorType(null);
+ resolveService(child, parent);
+ assertEquals(ServiceInfo.ServiceAdvisorType.PYTHON, child.getModuleInfo().getServiceAdvisorType());
+
+ // Parent is NULL, Child is JAVA => Child is JAVA
+ child.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.JAVA);
+ resolveService(child, parent);
+ assertEquals(ServiceInfo.ServiceAdvisorType.JAVA, child.getModuleInfo().getServiceAdvisorType());
+
+ // Parent is JAVA, Child is NULL => Child inherits JAVA
+ parent.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.JAVA);
+ child.getModuleInfo().setServiceAdvisorType(null);
+ resolveService(child, parent);
+ assertEquals(ServiceInfo.ServiceAdvisorType.JAVA, child.getModuleInfo().getServiceAdvisorType());
+
+ // Parent is JAVA, Child is PYTHON => Child overrides and keeps PYTHON
+ parent.getModuleInfo().setServiceAdvisorType(null);
+ child.getModuleInfo().setServiceAdvisorType(ServiceInfo.ServiceAdvisorType.PYTHON);
+ resolveService(child, parent);
+ assertEquals(ServiceInfo.ServiceAdvisorType.PYTHON, child.getModuleInfo().getServiceAdvisorType());
+ }
+
+ @Test
public void testResolve_UpgradeCheckDirectory() throws Exception {
File checks = new File("checks");
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/ambari-views/examples/weather-view/pom.xml
----------------------------------------------------------------------
diff --git a/ambari-views/examples/weather-view/pom.xml b/ambari-views/examples/weather-view/pom.xml
index abed017..d339fbb 100644
--- a/ambari-views/examples/weather-view/pom.xml
+++ b/ambari-views/examples/weather-view/pom.xml
@@ -81,7 +81,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.6</version>
+ <version>1.7.20</version>
</dependency>
</dependencies>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hawq/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hawq/pom.xml b/contrib/views/hawq/pom.xml
index 0c6591e..5a6e525 100644
--- a/contrib/views/hawq/pom.xml
+++ b/contrib/views/hawq/pom.xml
@@ -68,7 +68,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hive-next/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive-next/pom.xml b/contrib/views/hive-next/pom.xml
index 578a82c..9a6c65d 100644
--- a/contrib/views/hive-next/pom.xml
+++ b/contrib/views/hive-next/pom.xml
@@ -92,12 +92,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/hive20/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/hive20/pom.xml b/contrib/views/hive20/pom.xml
index 7ea95ad..0da3c88 100644
--- a/contrib/views/hive20/pom.xml
+++ b/contrib/views/hive20/pom.xml
@@ -93,12 +93,12 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
<scope>test</scope>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/pig/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/pig/pom.xml b/contrib/views/pig/pom.xml
index 5239cc2..1430f69 100644
--- a/contrib/views/pig/pom.xml
+++ b/contrib/views/pig/pom.xml
@@ -80,7 +80,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/tez/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/tez/pom.xml b/contrib/views/tez/pom.xml
index 170b89a..fa1a773 100644
--- a/contrib/views/tez/pom.xml
+++ b/contrib/views/tez/pom.xml
@@ -236,11 +236,10 @@
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
-
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
- <version>1.7.5</version>
+ <version>1.7.20</version>
</dependency>
<dependency>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/contrib/views/wfmanager/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/views/wfmanager/pom.xml b/contrib/views/wfmanager/pom.xml
index a38cae5..1363a93 100644
--- a/contrib/views/wfmanager/pom.xml
+++ b/contrib/views/wfmanager/pom.xml
@@ -74,6 +74,7 @@
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
+ <version>1.7.20</version>
</dependency>
<dependency>
<groupId>javax.inject</groupId>
http://git-wip-us.apache.org/repos/asf/ambari/blob/f1ca09c0/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 8faec29..4e27ca6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -264,7 +264,9 @@
<exclude>pass.txt</exclude>
<exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_groups.conf</exclude>
<exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/windows/metric_groups.conf</exclude>
- <exclude>contrib/addons/test/dataServices/jmx/data/cluster_configuration.json.nohbase</exclude>
+ <exclude>ambari-metrics/ambari-metrics-host-monitoring/conf/unix/metric_groups.conf</exclude>
+ <exclude>stack-advisor/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst</exclude>
+ <exclude>stack-advisor/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst</exclude>
<exclude>contrib/ambari-scom/msi/src/GUI_Ambari.sln</exclude>
<exclude>contrib/fast-hdfs-resource/dependency-reduced-pom.xml</exclude>
<exclude>contrib/agent-simulator/docker_image/package_list.txt</exclude>
@@ -457,6 +459,7 @@
</property>
</activation>
<modules>
+ <module>serviceadvisor</module>
<module>ambari-web</module>
<module>ambari-project</module>
<module>ambari-views</module>
@@ -480,6 +483,7 @@
</property>
</activation>
<modules>
+ <module>serviceadvisor</module>
<module>ambari-web</module>
<module>ambari-project</module>
<module>ambari-views</module>
@@ -507,6 +511,7 @@
<module>ambari-shell</module>
<module>ambari-logsearch</module>
<module>ambari-infra</module>
+ <module>serviceadvisor</module>
</modules>
</profile>
<profile>
@@ -529,6 +534,7 @@
<module>ambari-shell</module>
<module>ambari-logsearch</module>
<module>ambari-infra</module>
+ <module>serviceadvisor</module>
</modules>
</profile>
<profile>
@@ -538,6 +544,12 @@
</modules>
</profile>
<profile>
+ <id>serviceadvisor</id>
+ <modules>
+ <module>serviceadvisor</module>
+ </modules>
+ </profile>
+ <profile>
<id>windows</id>
<activation>
<os>
@@ -545,6 +557,7 @@
</os>
</activation>
<modules>
+ <module>serviceadvisor</module>
<module>ambari-web</module>
<module>ambari-project</module>
<module>ambari-views</module>
@@ -555,7 +568,7 @@
<module>ambari-agent</module>
<module>ambari-client</module>
<module>ambari-shell</module>
- </modules>
+ </modules>
</profile>
<profile>
<id>clover</id>
[16/26] ambari git commit: AMBARI-21224. RU: Oozie LR job failed
(aonishuk)
Posted by rl...@apache.org.
AMBARI-21224. RU: Oozie LR job failed (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/27a99389
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/27a99389
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/27a99389
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 27a99389e3c3566b6fc58b17cb06510ab9bffa13
Parents: 1f19461
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Tue Jun 13 14:44:05 2017 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Tue Jun 13 14:44:05 2017 +0300
----------------------------------------------------------------------
.../HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/27a99389/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
index bbfdc24..f03125b 100644
--- a/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
+++ b/ambari-server/src/main/resources/stacks/HDP/2.6/services/YARN/configuration-mapred/mapred-site.xml
@@ -19,7 +19,7 @@
<configuration supports_final="true">
<property>
<name>yarn.app.mapreduce.client.job.max-retries</name>
- <value>30</value>
+ <value>60</value>
<description>
The number of retries the client will make for getJob and dependent calls.
</description>
[08/26] ambari git commit: AMBARI-21091. HDP deploy from public repo
failed (dlysnichenko)
Posted by rl...@apache.org.
AMBARI-21091. HDP deploy from public repo failed (dlysnichenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/871f85b3
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/871f85b3
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/871f85b3
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: 871f85b34e5d0586dd21ed332a16abd012a72eef
Parents: 7750c9a
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Mon Jun 12 19:38:34 2017 +0300
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Mon Jun 12 19:38:34 2017 +0300
----------------------------------------------------------------------
.../test/python/ambari_agent/TestHostInfo.py | 107 ++++++++++
.../libraries/functions/packages_analyzer.py | 53 ++++-
.../libraries/script/script.py | 25 ++-
.../server/orm/entities/UpgradeEntity.java | 3 +-
.../orm/entities/UpgradeHistoryEntity.java | 3 +-
.../custom_actions/scripts/install_packages.py | 8 +-
.../upgrades/UpgradeActionTest.java | 2 +-
.../custom_actions/TestInstallPackages.py | 202 +++++++------------
.../configs/install_packages_config.json | 19 +-
.../stacks/2.0.6/HBASE/test_hbase_master.py | 11 +-
.../stacks/2.0.6/configs/hbase_with_phx.json | 12 ++
utility/pom.xml | 21 ++
12 files changed, 322 insertions(+), 144 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
index a00771d..027a0a8 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestHostInfo.py
@@ -538,5 +538,112 @@ class TestHostInfo(TestCase):
os_path_isfile_mock.return_value = False
self.assertEqual("", hostInfo.getTransparentHugePage())
+ @staticmethod
+ def _add_packages_available(command, arg):
+ arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+ arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+ arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+ @staticmethod
+ def _add_packages_lookUpYum(command, key, arg):
+ TestHostInfo._add_packages_available(command, arg)
+
+ @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+ @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+ @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
+ def test_get_available_packages_in_repos_suse(self, lookUpZypperPackages, is_redhat_family, is_ubuntu_family,
+ is_suse_family_mock):
+ is_suse_family_mock.return_value = True
+ is_redhat_family.return_value = False
+ is_ubuntu_family.return_value = False
+ lookUpZypperPackages.side_effect = TestHostInfo._add_packages_available
+
+ command_json = {
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 1,
+ "repoVersion": "2",
+ "repositories": [
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2"
+ }
+ ]
+ }
+ }
+
+ available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+ command_json['repositoryFile']['repositories'])
+
+ self.assertEqual(available_packages_in_repos,
+ ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+ @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+ @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+ @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+ def test_get_available_packages_in_repos_rhel(self, lookUpYumPackages, is_redhat_family, is_ubuntu_family,
+ is_suse_family_mock):
+ is_suse_family_mock.return_value = False
+ is_redhat_family.return_value = True
+ is_ubuntu_family.return_value = False
+ lookUpYumPackages.side_effect = TestHostInfo._add_packages_lookUpYum
+
+ command_json = {
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 1,
+ "repoVersion": "2",
+ "repositories": [
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2"
+ }
+ ]
+ }
+ }
+
+ available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+ command_json['repositoryFile']['repositories'])
+
+ self.assertEqual(available_packages_in_repos,
+ ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs", "hadoop_2_2_0_1_885",
+ "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
+ @patch("ambari_commons.os_check.OSCheck.is_suse_family")
+ @patch("ambari_commons.os_check.OSCheck.is_ubuntu_family")
+ @patch("ambari_commons.os_check.OSCheck.is_redhat_family")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpAptPackages")
+ def test_get_available_packages_in_repos_ubuntu(self, lookUpAptPackages, is_redhat_family, is_ubuntu_family,
+ is_suse_family_mock):
+ is_suse_family_mock.return_value = False
+ is_redhat_family.return_value = False
+ is_ubuntu_family.return_value = True
+ lookUpAptPackages.side_effect = TestHostInfo._add_packages_available
+
+ command_json = {
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 1,
+ "repoVersion": "2",
+ "repositories": [
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2"
+ }
+ ]
+ }
+ }
+
+ available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(
+ command_json['repositoryFile']['repositories'])
+
+ self.assertEqual(available_packages_in_repos,
+ ["hadoop_2_2_0_1_885", "hadooplzo_2_2_0_1_885", "hadoop_2_2_0_1_885-libhdfs"])
+
if __name__ == "__main__":
unittest.main()
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
index 8a15ee5..f4db3d2 100644
--- a/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
+++ b/ambari-common/src/main/python/resource_management/libraries/functions/packages_analyzer.py
@@ -34,8 +34,8 @@ __all__ = ["installedPkgsByName", "allInstalledPackages", "allAvailablePackages"
"getInstalledRepos", "getInstalledPkgsByRepo", "getInstalledPkgsByNames", "getPackageDetails"]
LIST_INSTALLED_PACKAGES_UBUNTU = "COLUMNS=9999 ; for i in $(dpkg -l |grep ^ii |awk -F' ' '{print $2}'); do apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -; done"
-LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for i in $(ls -1 /var/lib/apt/lists | grep -v \"ubuntu.com\") ; do grep ^Package: /var/lib/apt/lists/$i | awk '{print $2}' ; done` ; for i in $packages; do apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -; done"
-
+LIST_AVAILABLE_PACKAGES_UBUNTU = "packages=`for i in $(ls -1 /var/lib/apt/lists | grep %s ) ; do grep ^Package: /var/lib/apt/lists/$i | awk '{print $2}' ; done` ; for i in $packages; do apt-cache showpkg \"$i\"|head -3|grep -v '^Versions'| tr -d '()' | awk '{ print $1\" \"$2 }'|sed -e 's/^Package: //;' | paste -d ' ' - -; done"
+GREP_REPO_EXCLUDE_SYSTEM = "-v \"ubuntu.com\""
logger = logging.getLogger()
# default timeout for async invoked processes
@@ -91,8 +91,6 @@ def allInstalledPackages(allInstalledPackages):
"""
All installed packages in system
"""
- osType = OSCheck.get_os_family()
-
if OSCheck.is_suse_family():
return _lookUpZypperPackages(
["sudo", "zypper", "--no-gpg-checks", "search", "--installed-only", "--details"],
@@ -108,9 +106,47 @@ def allInstalledPackages(allInstalledPackages):
allInstalledPackages)
-def allAvailablePackages(allAvailablePackages):
- osType = OSCheck.get_os_family()
+def get_available_packages_in_repos(repositories):
+ """
+ Gets all (both installed and available) packages that are available at given repositories.
+ :param repositories: from command configs like config['repositoryFile']['repositories']
+ :return: installed and available packages from these repositories
+ """
+ available_packages = []
+ installed_packages = []
+ available_packages_in_repos = []
+ repo_ids = [repository['repoId'] for repository in repositories]
+ if OSCheck.is_ubuntu_family():
+ allInstalledPackages(installed_packages)
+ repo_urls = [repository['baseUrl'] for repository in repositories]
+ repo_urls = [repo_url.replace("http://","") for repo_url in repo_urls]
+ repo_urls = [repo_url.replace("/","_") for repo_url in repo_urls]
+ for url in repo_urls:
+ _lookUpAptPackages(
+ LIST_AVAILABLE_PACKAGES_UBUNTU % url,
+ available_packages)
+ for package in installed_packages:
+ if url in package[2]:
+ available_packages_in_repos.append(package[0])
+ for package in available_packages:
+ available_packages_in_repos.append(package[0])
+ elif OSCheck.is_suse_family():
+ for repo in repo_ids:
+ _lookUpZypperPackages(["sudo", "zypper", "--no-gpg-checks", "search", "--details", "--repo", repo],
+ available_packages)
+ available_packages_in_repos += [package[0] for package in available_packages]
+ elif OSCheck.is_redhat_family():
+ for repo in repo_ids:
+ _lookUpYumPackages(["sudo", "yum", "list", "available", "--disablerepo=*", "--enablerepo=" + repo],
+ 'Available Packages', available_packages)
+ _lookUpYumPackages(["sudo", "yum", "list", "installed", "--disablerepo=*", "--enablerepo=" + repo],
+ 'Installed Packages', installed_packages)
+ available_packages_in_repos += [package[0] for package in available_packages + installed_packages]
+ return available_packages_in_repos
+
+
+def allAvailablePackages(allAvailablePackages):
if OSCheck.is_suse_family():
return _lookUpZypperPackages(
["sudo", "zypper", "--no-gpg-checks", "search", "--uninstalled-only", "--details"],
@@ -122,7 +158,7 @@ def allAvailablePackages(allAvailablePackages):
allAvailablePackages)
elif OSCheck.is_ubuntu_family():
return _lookUpAptPackages(
- LIST_AVAILABLE_PACKAGES_UBUNTU,
+ LIST_AVAILABLE_PACKAGES_UBUNTU % GREP_REPO_EXCLUDE_SYSTEM,
allAvailablePackages)
# ToDo: add execution via sudo for ubuntu (currently Ubuntu is not supported)
@@ -170,7 +206,6 @@ def _lookUpZypperPackages(command, allPackages):
if 0 == result['retCode']:
lines = result['out'].split('\n')
lines = [line.strip() for line in lines]
- items = []
for index in range(len(lines)):
if "--+--" in lines[index]:
skipIndex = index + 1
@@ -281,7 +316,7 @@ def getInstalledPackageVersion(package_name):
code, out, err = rmf_shell.checked_call("dpkg -s {0} | grep Version | awk '{{print $2}}'".format(package_name), stderr=subprocess.PIPE)
else:
code, out, err = rmf_shell.checked_call("rpm -q --queryformat '%{{version}}-%{{release}}' {0} | sed -e 's/\.el[0-9]//g'".format(package_name), stderr=subprocess.PIPE)
-
+
return out
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-common/src/main/python/resource_management/libraries/script/script.py
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py
index 054490b..2c56a13 100644
--- a/ambari-common/src/main/python/resource_management/libraries/script/script.py
+++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py
@@ -463,10 +463,26 @@ class Script(object):
return Script.stack_version_from_distro_select
+
+ def get_package_from_available(self, name, available_packages_in_repos):
+ """
+ This function matches package names with ${stack_version} placeholder to actual package names from
+ Ambari-managed repository.
+ Package names without ${stack_version} placeholder are returned as is.
+ """
+ if STACK_VERSION_PLACEHOLDER not in name:
+ return name
+ package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_'
+ package_regex = name.replace(STACK_VERSION_PLACEHOLDER, '(\d|{0})+'.format(package_delimiter))
+ for package in available_packages_in_repos:
+ if re.match(package_regex, package):
+ return package
+
+
def format_package_name(self, name):
from resource_management.libraries.functions.default import default
"""
- This function replaces ${stack_version} placeholder into actual version. If the package
+ This function replaces ${stack_version} placeholder with actual version. If the package
version is passed from the server, use that as an absolute truth.
"""
@@ -703,12 +719,15 @@ class Script(object):
package_list_str = config['hostLevelParams']['package_list']
agent_stack_retry_on_unavailability = bool(config['hostLevelParams']['agent_stack_retry_on_unavailability'])
agent_stack_retry_count = int(config['hostLevelParams']['agent_stack_retry_count'])
-
+ try:
+ available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+ except Exception as err:
+ available_packages_in_repos = []
if isinstance(package_list_str, basestring) and len(package_list_str) > 0:
package_list = json.loads(package_list_str)
for package in package_list:
if self.check_package_condition(package):
- name = self.format_package_name(package['name'])
+ name = self.get_package_from_available(package['name'], available_packages_in_repos)
# HACK: On Windows, only install ambari-metrics packages using Choco Package Installer
# TODO: Update this once choco packages for hadoop are created. This is because, service metainfo.xml support
# <osFamily>any<osFamily> which would cause installation failure on Windows.
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
index 975d6a6..43b2e08 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeEntity.java
@@ -41,7 +41,8 @@ import org.apache.ambari.server.actionmanager.HostRoleStatus;
import org.apache.ambari.server.state.stack.upgrade.Direction;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
/**
* Models the data representation of an upgrade
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
index 8bfafd3..0f7ac72 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/UpgradeHistoryEntity.java
@@ -31,7 +31,8 @@ import javax.persistence.TableGenerator;
import javax.persistence.UniqueConstraint;
import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.hadoop.metrics2.sink.relocated.google.common.base.Objects;
+
+import com.google.common.base.Objects;
/**
* The {@link UpgradeHistoryEntity} represents the version history of components
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
index d6da0fc..a4a7a8c 100644
--- a/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
+++ b/ambari-server/src/main/resources/custom_actions/scripts/install_packages.py
@@ -22,6 +22,7 @@ import signal
import re
import ambari_simplejson as json
+import sys, traceback
from ambari_commons.os_check import OSCheck
from ambari_commons.str_utils import cbool, cint
@@ -36,6 +37,7 @@ from resource_management.libraries.functions.version import format_stack_version
from resource_management.libraries.functions.repo_version_history \
import read_actual_version_from_history_file, write_actual_version_to_history_file, REPO_VERSION_HISTORY_FILE
from resource_management.libraries.functions import StackFeature
+from resource_management.libraries.functions import packages_analyzer
from resource_management.libraries.functions.repository_util import create_repo_files, CommandRepository
from resource_management.libraries.functions.stack_features import check_stack_feature
from resource_management.libraries.resources.repository import Repository
@@ -352,8 +354,12 @@ class InstallPackages(Script):
packages_installed_before = [package[0] for package in packages_installed_before]
packages_were_checked = True
filtered_package_list = self.filter_package_list(package_list)
+ try:
+ available_packages_in_repos = packages_analyzer.get_available_packages_in_repos(config['repositoryFile']['repositories'])
+ except Exception:
+ available_packages_in_repos = []
for package in filtered_package_list:
- name = self.format_package_name(package['name'])
+ name = self.get_package_from_available(package['name'], available_packages_in_repos)
Package(name,
action="upgrade", # this enables upgrading non-versioned packages, despite the fact they exist. Needed by 'mahout' which is non-version but have to be updated
retry_on_repo_unavailability=agent_stack_retry_on_unavailability,
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
index e3ffae0..50d219c 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/upgrades/UpgradeActionTest.java
@@ -79,7 +79,7 @@ import org.apache.ambari.server.state.UpgradeState;
import org.apache.ambari.server.state.stack.UpgradePack;
import org.apache.ambari.server.state.stack.upgrade.UpgradeType;
import org.apache.ambari.server.utils.EventBusSynchronizer;
-import org.apache.hadoop.metrics2.sink.relocated.commons.lang.StringUtils;
+import org.apache.commons.lang.StringUtils;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
index 5f5576e..3e90c64 100644
--- a/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
+++ b/ambari-server/src/test/python/custom_actions/TestInstallPackages.py
@@ -61,8 +61,18 @@ class TestInstallPackages(RMFTestCase):
arg.append(["pkg1", "1.0", "repo"])
arg.append(["pkg2", "2.0", "repo2"])
+ @staticmethod
+ def _add_packages_available(command, arg):
+ arg.append(["hadoop_2_2_0_1_885", "1.0", "HDP-2.2"])
+ arg.append(["hadooplzo_2_2_0_1_885", "1.0", "HDP-2.2"])
+ arg.append(["hadoop_2_2_0_1_885-libhdfs", "1.0", "HDP-2.2"])
+
+ @staticmethod
+ def _add_packages_lookUpYum(command, key, arg):
+ TestInstallPackages._add_packages_available(command, arg)
+
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
@patch("resource_management.libraries.script.Script.put_structured_out")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@@ -71,12 +81,13 @@ class TestInstallPackages(RMFTestCase):
write_actual_version_to_history_file_mock,
read_actual_version_from_history_file_mock,
stack_versions_mock,
- put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+ put_structured_out_mock,
+ lookUpYumPackages, list_ambari_managed_repos_mock):
stack_versions_mock.side_effect = [
[], # before installation attempt
[VERSION_STUB]
]
- allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+ lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
list_ambari_managed_repos_mock.return_value=[]
self.executeScript("scripts/install_packages.py",
classname="InstallPackages",
@@ -91,21 +102,21 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'actual_version': VERSION_STUB})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP-UTILS', 'main'],
repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=False,
)
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-2.2',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP', 'main'],
repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=True,
)
@@ -140,6 +151,7 @@ class TestInstallPackages(RMFTestCase):
command_json = json.load(f)
command_json['roleParams']['base_urls'] = "[]"
+ del command_json['repositoryFile']
allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
@@ -159,32 +171,33 @@ class TestInstallPackages(RMFTestCase):
'actual_version': VERSION_STUB})
self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', None, action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertNoMoreResources()
@patch("ambari_commons.os_check.OSCheck.is_suse_family")
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
@patch("resource_management.libraries.script.Script.put_structured_out")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
def test_normal_flow_sles(self, write_actual_version_to_history_file_mock,
read_actual_version_from_history_file_mock,
- stack_versions_mock, put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock, is_suse_family_mock):
+ stack_versions_mock, put_structured_out_mock,
+ lookUpZypperPackages, list_ambari_managed_repos_mock, is_suse_family_mock):
is_suse_family_mock = True
Script.stack_version_from_distro_select = VERSION_STUB
stack_versions_mock.side_effect = [
[], # before installation attempt
[VERSION_STUB]
]
- allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+ lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
list_ambari_managed_repos_mock.return_value=[]
self.executeScript("scripts/install_packages.py",
classname="InstallPackages",
@@ -199,21 +212,21 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'actual_version': VERSION_STUB})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP-UTILS', 'main'],
repo_template='[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=False,
)
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-2.2',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=True,
)
@@ -231,21 +244,21 @@ class TestInstallPackages(RMFTestCase):
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
@patch("ambari_commons.os_check.OSCheck.is_redhat_family")
@patch("resource_management.libraries.script.Script.put_structured_out")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
- def test_exclude_existing_repo(self, write_actual_version_to_history_file_mock,
+ def test_exclude_existing_repo(self, write_actual_version_to_history_file_mock,
read_actual_version_from_history_file_mock,
stack_versions_mock,
- allInstalledPackages_mock, put_structured_out_mock,
+ lookUpYumPackages, put_structured_out_mock,
is_redhat_family_mock, list_ambari_managed_repos_mock):
stack_versions_mock.side_effect = [
[], # before installation attempt
[VERSION_STUB]
]
Script.stack_version_from_distro_select = VERSION_STUB
- allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+ lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
list_ambari_managed_repos_mock.return_value=["HDP-UTILS-2.2.0.1-885"]
is_redhat_family_mock.return_value = True
self.executeScript("scripts/install_packages.py",
@@ -261,21 +274,21 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'actual_version': VERSION_STUB})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP-UTILS', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name='HDP-2.2.0.1-885',
+ repo_file_name='ambari-hdp-1',
mirror_list=None,
append_to_file=False,
)
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-2.2',
base_url='http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=True,
)
@@ -337,21 +350,21 @@ class TestInstallPackages(RMFTestCase):
{'stack_id': 'HDP-2.2',
'installed_repository_version': VERSION_STUB,
'package_installation_result': 'FAIL'})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP-UTILS', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=False,
)
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-2.2',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=True,
)
@@ -363,14 +376,14 @@ class TestInstallPackages(RMFTestCase):
@patch("ambari_commons.os_check.OSCheck.is_suse_family")
@patch("resource_management.core.resources.packaging.Package")
@patch("resource_management.libraries.script.Script.put_structured_out")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
- def test_format_package_name(self, write_actual_version_to_history_file_mock,
+ def test_format_package_name(self, write_actual_version_to_history_file_mock,
read_actual_version_from_history_file_mock,
stack_versions_mock,
- allInstalledPackages_mock, put_structured_out_mock,
+ lookUpZypperPackages, put_structured_out_mock,
package_mock, is_suse_family_mock):
Script.stack_version_from_distro_select = VERSION_STUB
stack_versions_mock.side_effect = [
@@ -378,7 +391,7 @@ class TestInstallPackages(RMFTestCase):
[VERSION_STUB]
]
read_actual_version_from_history_file_mock.return_value = VERSION_STUB
- allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+ lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
is_suse_family_mock.return_value = True
self.executeScript("scripts/install_packages.py",
classname="InstallPackages",
@@ -393,21 +406,21 @@ class TestInstallPackages(RMFTestCase):
'installed_repository_version': VERSION_STUB,
'stack_id': 'HDP-2.2',
'actual_version': VERSION_STUB})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-UTILS-1.1.0.20',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP-UTILS', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=False,
)
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
+ self.assertResourceCalled('Repository', 'HDP-2.2',
base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
action=['create'],
components=[u'HDP', 'main'],
repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
+ repo_file_name=u'ambari-hdp-1',
mirror_list=None,
append_to_file=True,
)
@@ -421,99 +434,30 @@ class TestInstallPackages(RMFTestCase):
self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertNoMoreResources()
- @patch("ambari_commons.os_check.OSCheck.is_suse_family")
- @patch("resource_management.core.resources.packaging.Package")
- @patch("resource_management.libraries.script.Script.put_structured_out")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
- @patch("resource_management.libraries.functions.stack_select.get_stack_versions")
- @patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
- @patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
- def test_format_package_name_specific(self, write_actual_version_to_history_file_mock,
- read_actual_version_from_history_file_mock,
- stack_versions_mock,
- allInstalledPackages_mock, put_structured_out_mock,
- package_mock, is_suse_family_mock):
- Script.stack_version_from_distro_select = VERSION_STUB
- stack_versions_mock.side_effect = [
- [], # before installation attempt
- [VERSION_STUB]
- ]
- read_actual_version_from_history_file_mock.return_value = VERSION_STUB
- allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
- is_suse_family_mock.return_value = True
-
-
- config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_config.json"
- with open(config_file, "r") as f:
- command_json = json.load(f)
-
- command_json['roleParams']['package_version'] = "2_2_0_1_889"
-
-
- self.executeScript("scripts/install_packages.py",
- classname="InstallPackages",
- command="actionexecute",
- config_dict=command_json,
- target=RMFTestCase.TARGET_CUSTOM_ACTIONS,
- os_type=('Suse', '11', 'Final'),
- )
- self.assertTrue(put_structured_out_mock.called)
- self.assertEquals(put_structured_out_mock.call_args[0][0],
- {'package_installation_result': 'SUCCESS',
- 'installed_repository_version': VERSION_STUB,
- 'stack_id': 'HDP-2.2',
- 'actual_version': VERSION_STUB})
- self.assertResourceCalled('Repository', 'HDP-UTILS-2.2.0.1-885',
- base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
- action=['create'],
- components=[u'HDP-UTILS', 'main'],
- repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
- mirror_list=None,
- append_to_file=False,
- )
- self.assertResourceCalled('Repository', 'HDP-2.2.0.1-885',
- base_url=u'http://repo1/HDP/centos5/2.x/updates/2.2.0.0',
- action=['create'],
- components=[u'HDP', 'main'],
- repo_template=u'[{{repo_id}}]\nname={{repo_id}}\n{% if mirror_list %}mirrorlist={{mirror_list}}{% else %}baseurl={{base_url}}{% endif %}\n\npath=/\nenabled=1\ngpgcheck=0',
- repo_file_name=u'HDP-2.2.0.1-885',
- mirror_list=None,
- append_to_file=True,
- )
- self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_889', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_889-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertNoMoreResources()
@patch("ambari_commons.os_check.OSCheck.is_suse_family")
@patch("resource_management.core.resources.packaging.Package")
@patch("resource_management.libraries.script.Script.put_structured_out")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpZypperPackages")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
def test_format_package_name_via_repositoryFile(self, write_actual_version_to_history_file_mock,
- read_actual_version_from_history_file_mock,
- stack_versions_mock,
- allInstalledPackages_mock, put_structured_out_mock,
- package_mock, is_suse_family_mock):
+ read_actual_version_from_history_file_mock,
+ stack_versions_mock,
+ lookUpZypperPackages, put_structured_out_mock,
+ package_mock, is_suse_family_mock):
Script.stack_version_from_distro_select = VERSION_STUB
stack_versions_mock.side_effect = [
[], # before installation attempt
[VERSION_STUB]
]
read_actual_version_from_history_file_mock.return_value = VERSION_STUB
- allInstalledPackages_mock = MagicMock(side_effect = TestInstallPackages._add_packages)
+ lookUpZypperPackages.side_effect = TestInstallPackages._add_packages_available
is_suse_family_mock.return_value = True
-
+
config_file = self.get_src_folder() + "/test/python/custom_actions/configs/install_packages_repository_file.json"
with open(config_file, "r") as f:
command_json = json.load(f)
@@ -552,12 +496,15 @@ class TestInstallPackages(RMFTestCase):
append_to_file=True,
)
self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_990', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_990-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertNoMoreResources()
@@ -1106,21 +1053,23 @@ class TestInstallPackages(RMFTestCase):
self.assertFalse(write_actual_version_to_history_file_mock.called)
@patch("resource_management.libraries.functions.list_ambari_managed_repos.list_ambari_managed_repos")
- @patch("resource_management.libraries.functions.packages_analyzer.allInstalledPackages")
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
@patch("resource_management.libraries.script.Script.put_structured_out")
@patch("resource_management.libraries.functions.stack_select.get_stack_versions")
@patch("resource_management.libraries.functions.repo_version_history.read_actual_version_from_history_file")
@patch("resource_management.libraries.functions.repo_version_history.write_actual_version_to_history_file")
def test_normal_flow_rhel_with_command_repo(self,
- write_actual_version_to_history_file_mock,
- read_actual_version_from_history_file_mock,
- stack_versions_mock,
- put_structured_out_mock, allInstalledPackages_mock, list_ambari_managed_repos_mock):
+ write_actual_version_to_history_file_mock,
+ read_actual_version_from_history_file_mock,
+ stack_versions_mock,
+ put_structured_out_mock,
+ lookUpYumPackages,
+ list_ambari_managed_repos_mock):
stack_versions_mock.side_effect = [
[], # before installation attempt
[VERSION_STUB]
]
- allInstalledPackages_mock.side_effect = TestInstallPackages._add_packages
+ lookUpYumPackages.side_effect = TestInstallPackages._add_packages_lookUpYum
list_ambari_managed_repos_mock.return_value=[]
self.executeScript("scripts/install_packages.py",
classname="InstallPackages",
@@ -1155,11 +1104,14 @@ class TestInstallPackages(RMFTestCase):
append_to_file=True,
)
self.assertResourceCalled('Package', 'hdp-select', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'snappy-devel', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'lzo', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
- self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadooplzo_2_2_0_1_885', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
+ self.assertResourceCalled('Package', 'hadoop_2_2_0_1_885-libhdfs', action=["upgrade"], retry_count=5,
+ retry_on_repo_unavailability=False)
self.assertResourceCalled('Package', 'ambari-log4j', action=["upgrade"], retry_count=5, retry_on_repo_unavailability=False)
self.assertNoMoreResources()
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
index c6575b5..be010b3 100644
--- a/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
+++ b/ambari-server/src/test/python/custom_actions/configs/install_packages_config.json
@@ -49,7 +49,24 @@
"package_list": "[{\"name\":\"hadoop_${stack_version}\", \"condition\": \"\"},{\"name\":\"snappy\", \"condition\": \"\"},{\"name\":\"snappy-devel\", \"condition\": \"\"},{\"name\":\"lzo\", \"condition\": \"\"},{\"name\":\"hadooplzo_${stack_version}\", \"condition\": \"\"},{\"name\":\"hadoop_${stack_version}-libhdfs\", \"condition\": \"\"},{\"name\":\"ambari-log4j\", \"condition\": \"\"}]",
"script": "install_packages.py"
},
- "commandId": "14-1",
+ "commandId": "14-1",
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 1,
+ "repoVersion": "2",
+ "repositories": [
+ {
+ "repoName": "HDP-UTILS",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-UTILS-1.1.0.20"
+ },
+ {
+ "repoName": "HDP",
+ "baseUrl": "http://repo1/HDP/centos5/2.x/updates/2.2.0.0",
+ "repoId": "HDP-2.2"
+ }
+ ]
+ },
"clusterHostInfo": {
"snamenode_host": [
"0b3.vm"
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
index fda63e0..05fa204 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
+++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
@@ -69,11 +69,17 @@ class TestHBaseMaster(RMFTestCase):
self.assertNoMoreResources()
- def test_install_hbase_master_with_version(self):
+ @patch("resource_management.libraries.functions.packages_analyzer._lookUpYumPackages")
+ def test_install_hbase_master_with_version(self, lookUpYumPackages):
+ def _add_packages_available(command, key, arg):
+ arg.append(["hbase_2_3_0_1_1234", "1.0", "testrepo"])
+
config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/hbase_with_phx.json"
with open(config_file, "r") as f:
json_content = json.load(f)
version = '2.3.0.1-1234'
+
+ lookUpYumPackages.side_effect = _add_packages_available
# the json file is not a "well formed" install command
json_content['roleCommand'] = 'INSTALL'
json_content['commandParams']['version'] = version
@@ -86,8 +92,9 @@ class TestHBaseMaster(RMFTestCase):
stack_version = self.STACK_VERSION,
target = RMFTestCase.TARGET_COMMON_SERVICES,
try_install=True,
+ os_type=('Redhat', '6.4', 'Final'),
checked_call_mocks = [(0, "OK.", "")],
- )
+ )
# only assert that the correct package is trying to be installed
self.assertResourceCalled('Package', 'hbase_2_3_0_1_1234',
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
index 5147603..9979e9d 100644
--- a/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
+++ b/ambari-server/src/test/python/stacks/2.0.6/configs/hbase_with_phx.json
@@ -28,6 +28,18 @@
"roleParams": {},
"serviceName": "HIVE",
"role": "HIVE_SERVER",
+ "repositoryFile": {
+ "stackName": "HDP",
+ "repoVersionId": 1,
+ "repoVersion": "2",
+ "repositories": [
+ {
+ "repoName": "HDP",
+ "baseUrl": "testurl",
+ "repoId": "testrepo"
+ }
+ ]
+ },
"commandParams": {
"command_timeout": "300",
"service_package_folder": "OOZIE",
http://git-wip-us.apache.org/repos/asf/ambari/blob/871f85b3/utility/pom.xml
----------------------------------------------------------------------
diff --git a/utility/pom.xml b/utility/pom.xml
index 7d5eb93..918080e 100644
--- a/utility/pom.xml
+++ b/utility/pom.xml
@@ -67,6 +67,27 @@
</configuration>
</plugin>
<plugin>
+ <groupId>org.vafer</groupId>
+ <artifactId>jdeb</artifactId>
+ <version>1.0.1</version>
+ <executions>
+ <execution>
+ <!--Stub execution on direct plugin call - workaround for ambari deb build process-->
+ <id>stub-execution</id>
+ <phase>none</phase>
+ <goals>
+ <goal>jdeb</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <skip>true</skip>
+ <attach>false</attach>
+ <submodules>false</submodules>
+ <controlDir>${project.basedir}/../src/main/package/deb/control</controlDir>
+ </configuration>
+ </plugin>
+ <plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
[03/26] ambari git commit: AMBARI-21179 - Remove
RepositoryVersionState of INIT (jonathanhurley)
Posted by rl...@apache.org.
AMBARI-21179 - Remove RepositoryVersionState of INIT (jonathanhurley)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/cd3fb859
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/cd3fb859
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/cd3fb859
Branch: refs/heads/branch-feature-AMBARI-20859
Commit: cd3fb85953c01f8049950f140215de4e2257d139
Parents: 7847e4b
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Mon Jun 5 14:31:43 2017 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Mon Jun 5 14:31:43 2017 -0400
----------------------------------------------------------------------
.../ServiceComponentDesiredStateEntity.java | 2 +-
.../server/state/RepositoryVersionState.java | 31 ++++++++++----------
.../apache/ambari/server/state/ServiceImpl.java | 2 +-
.../server/upgrade/UpgradeCatalog300.java | 13 ++++----
.../main/resources/Ambari-DDL-Derby-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 2 +-
.../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +-
.../resources/Ambari-DDL-Postgres-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLAnywhere-CREATE.sql | 2 +-
.../resources/Ambari-DDL-SQLServer-CREATE.sql | 2 +-
10 files changed, 30 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
index 84e464e..e0f52c6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/ServiceComponentDesiredStateEntity.java
@@ -89,7 +89,7 @@ public class ServiceComponentDesiredStateEntity {
@Column(name = "repo_state", nullable = false, insertable = true, updatable = true)
@Enumerated(EnumType.STRING)
- private RepositoryVersionState repoState = RepositoryVersionState.INIT;
+ private RepositoryVersionState repoState = RepositoryVersionState.NOT_REQUIRED;
/**
* Unidirectional one-to-one association to {@link RepositoryVersionEntity}
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
index a2e220e..720f307 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/RepositoryVersionState.java
@@ -21,10 +21,13 @@ package org.apache.ambari.server.state;
import java.util.List;
/**
- * There must be exactly one repository version that is in a CURRENT state for a particular cluster or host.
- * There may be 0 or more repository versions in an INSTALLED or INSTALLING state.
- * The operation to transition a repository version state from INSTALLED into CURRENT must be atomic and change the existing
- * relation between repository version and cluster or host from CURRENT to INSTALLED.
+ * The {@link RepositoryVersionState} represents the state of a repository on a
+ * particular host. Because hosts can contain a mixture of components from
+ * different repositories, there can be any combination of
+ * {@link RepositoryVersionState#CURRENT}} entries for a single host. A host may
+ * not have multiple entries for the same repository.
+ * <p/>
+ *
*
* <pre>
* Step 1: Initial Configuration
@@ -43,20 +46,23 @@ import java.util.List;
* Version 1: CURRENT
* Version 2: INSTALL_FAILED (a retry can set this back to INSTALLING)
*
- * Step 4: Perform an upgrade from Version 1 to Version 2
+ * Step 4: Perform an upgrade of every component on the host from version 1 to version 2
* Version 1: INSTALLED
* Version 2: CURRENT
*
- * Step 4: May revert to the original version via a downgrade, which is technically still an upgrade to a version
+ * Step 4a: Perform an upgrade of a single component, leaving other components on the prior version
+ * Version 1: CURRENT
+ * Version 2: CURRENT
+ *
+ * Step 4b: May revert to the original version via a downgrade, which is technically still an upgrade to a version
* and eventually becomes
*
* Version 1: CURRENT
* Version 2: INSTALLED
*
* *********************************************
- * Start states: CURRENT, INSTALLING
+ * Start states: NOT_REQUIRED, INSTALLING, CURRENT
* Allowed Transitions:
- * INIT -> CURRENT
* INSTALLED -> CURRENT
* INSTALLING -> INSTALLED | INSTALL_FAILED | OUT_OF_SYNC
* INSTALLED -> INSTALLED | INSTALLING | OUT_OF_SYNC
@@ -67,13 +73,6 @@ import java.util.List;
*/
public enum RepositoryVersionState {
/**
- * Repository version is initialized, and will transition to current. This is used
- * when creating a cluster using a specific version. Transition occurs naturally as
- * hosts report CURRENT.
- */
- INIT(2),
-
- /**
* Repository version is not required
*/
NOT_REQUIRED(0),
@@ -125,7 +124,7 @@ public enum RepositoryVersionState {
*/
public static RepositoryVersionState getAggregateState(List<RepositoryVersionState> states) {
if (null == states || states.isEmpty()) {
- return INIT;
+ return NOT_REQUIRED;
}
RepositoryVersionState heaviestState = states.get(0);
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
index fe37a93..ecf19d4 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/state/ServiceImpl.java
@@ -348,7 +348,7 @@ public class ServiceImpl implements Service {
@Override
public RepositoryVersionState getRepositoryState() {
if (components.isEmpty()) {
- return RepositoryVersionState.INIT;
+ return RepositoryVersionState.NOT_REQUIRED;
}
List<RepositoryVersionState> states = new ArrayList<>();
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
index f068798..9b44c53 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog300.java
@@ -182,9 +182,10 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
*/
protected void addServiceComponentColumn() throws SQLException {
dbAccessor.addColumn(UpgradeCatalog250.COMPONENT_TABLE,
- new DBColumnInfo("repo_state", String.class, 255, RepositoryVersionState.INIT.name(), false));
-
+ new DBColumnInfo("repo_state", String.class, 255,
+ RepositoryVersionState.NOT_REQUIRED.name(), false));
}
+
protected void setStatusOfStagesAndRequests() {
executeInTransaction(new Runnable() {
@Override
@@ -336,15 +337,15 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
removeConfigurationPropertiesFromCluster(cluster, configType, removeProperties);
}
-
+
Config logSearchProperties = cluster.getDesiredConfigByType("logsearch-properties");
Config logFeederProperties = cluster.getDesiredConfigByType("logfeeder-properties");
if (logSearchProperties != null && logFeederProperties != null) {
String defaultLogLevels = logSearchProperties.getProperties().get("logsearch.logfeeder.include.default.level");
-
+
Set<String> removeProperties = Sets.newHashSet("logsearch.logfeeder.include.default.level");
removeConfigurationPropertiesFromCluster(cluster, "logsearch-properties", removeProperties);
-
+
Map<String, String> newProperties = new HashMap<>();
newProperties.put("logfeeder.include.default.level", defaultLogLevels);
updateConfigurationPropertiesForCluster(cluster, "logfeeder-properties", newProperties, true, true);
@@ -358,7 +359,7 @@ public class UpgradeCatalog300 extends AbstractUpgradeCatalog {
updateConfigurationPropertiesForCluster(cluster, "logfeeder-log4j", Collections.singletonMap("content", content), true, true);
}
}
-
+
Config logsearchLog4jProperties = cluster.getDesiredConfigByType("logsearch-log4j");
if (logsearchLog4jProperties != null) {
String content = logsearchLog4jProperties.getProperties().get("content");
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
index c5c83ab..e341405 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -172,7 +172,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
recovery_enabled SMALLINT NOT NULL DEFAULT 0,
- repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+ repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 230ae10..ce8736e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -192,7 +192,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(100) NOT NULL,
recovery_enabled SMALLINT NOT NULL DEFAULT 0,
- repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+ repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
index 903fc9e..0edbb91 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -173,7 +173,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR2(255) NOT NULL,
service_name VARCHAR2(255) NOT NULL,
recovery_enabled SMALLINT DEFAULT 0 NOT NULL,
- repo_state VARCHAR2(255) DEFAULT 'INIT' NOT NULL,
+ repo_state VARCHAR2(255) DEFAULT 'NOT_REQUIRED' NOT NULL,
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
index 86fbc04..5899179 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql
@@ -171,7 +171,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
recovery_enabled SMALLINT NOT NULL DEFAULT 0,
- repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+ repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
index 47ea221..6164b2d 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql
@@ -170,7 +170,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
recovery_enabled SMALLINT NOT NULL DEFAULT 0,
- repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+ repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),
http://git-wip-us.apache.org/repos/asf/ambari/blob/cd3fb859/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
index bbe9068..52d2b87 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql
@@ -184,7 +184,7 @@ CREATE TABLE servicecomponentdesiredstate (
desired_state VARCHAR(255) NOT NULL,
service_name VARCHAR(255) NOT NULL,
recovery_enabled SMALLINT NOT NULL DEFAULT 0,
- repo_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+ repo_state VARCHAR(255) NOT NULL DEFAULT 'NOT_REQUIRED',
CONSTRAINT pk_sc_desiredstate PRIMARY KEY (id),
CONSTRAINT UQ_scdesiredstate_name UNIQUE(component_name, service_name, cluster_id),
CONSTRAINT FK_scds_desired_repo_id FOREIGN KEY (desired_repo_version_id) REFERENCES repo_version (repo_version_id),