You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2014/06/19 21:19:13 UTC
git commit: AMBARI-6162. Behavior change: host filtering no longer
handles startsWith matches. additional patch (Buzhor Denys via alexantonenko)
Repository: ambari
Updated Branches:
refs/heads/trunk da428c652 -> 12dd8bd51
AMBARI-6162. Behavior change: host filtering no longer handles startsWith matches. additional patch (Buzhor Denys via alexantonenko)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/12dd8bd5
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/12dd8bd5
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/12dd8bd5
Branch: refs/heads/trunk
Commit: 12dd8bd51f1841aa049e54ff64baed7fff781250
Parents: da428c6
Author: Alex Antonenko <hi...@gmail.com>
Authored: Thu Jun 19 22:11:12 2014 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Thu Jun 19 22:11:12 2014 +0300
----------------------------------------------------------------------
.../app/controllers/global/update_controller.js | 5 +++--
ambari-web/app/controllers/main/host.js | 4 +++-
ambari-web/app/mixins/common/tableServerProvider.js | 7 +++++++
ambari-web/app/utils/validator.js | 15 ++++++++++++++-
ambari-web/app/views/main/host.js | 7 +++++++
ambari-web/test/controllers/main/host_test.js | 15 +++++++--------
ambari-web/test/utils/validator_test.js | 12 +++++++++++-
7 files changed, 52 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/app/controllers/global/update_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js
index bfd0822..f8288ac 100644
--- a/ambari-web/app/controllers/global/update_controller.js
+++ b/ambari-web/app/controllers/global/update_controller.js
@@ -155,7 +155,7 @@ App.UpdateController = Em.Controller.extend({
}
},
- updateHost: function (callback) {
+ updateHost: function (callback, error) {
var testUrl = App.get('isHadoop2Stack') ? '/data/hosts/HDP2/hosts.json' : '/data/hosts/hosts.json';
var realUrl = '/hosts?<parameters>fields=Hosts/host_name,Hosts/maintenance_state,Hosts/public_host_name,Hosts/cpu_count,Hosts/ph_cpu_count,Hosts/total_mem,' +
'Hosts/host_status,Hosts/last_heartbeat_time,Hosts/os_arch,Hosts/os_type,Hosts/ip,host_components/HostRoles/state,host_components/HostRoles/maintenance_state,' +
@@ -165,7 +165,8 @@ App.UpdateController = Em.Controller.extend({
this.get('queryParams').set('Hosts', App.router.get('mainHostController').getQueryParameters());
var hostsUrl = this.getComplexUrl(testUrl, realUrl, this.get('queryParams.Hosts'));
App.HttpClient.get(hostsUrl, App.hostsMapper, {
- complete: callback
+ complete: callback,
+ error: error
});
},
graphs: [],
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/app/controllers/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host.js b/ambari-web/app/controllers/main/host.js
index f6ab34e..11bffd1 100644
--- a/ambari-web/app/controllers/main/host.js
+++ b/ambari-web/app/controllers/main/host.js
@@ -210,7 +210,9 @@ App.MainHostController = Em.ArrayController.extend({
* @return {String}
**/
getRegExp: function (value) {
- return validator.isValidMatchesRegexp(value) ? value.replace(/(\.+\*?|(\.\*)+)$/, '') + '.*' : '^$';
+ value = validator.isValidMatchesRegexp(value) ? value.replace(/(\.+\*?|(\.\*)+)$/, '') + '.*' : '^$';
+ value = /^\.\*/.test(value) || value == '^$' ? value : '.*' + value;
+ return value;
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/app/mixins/common/tableServerProvider.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/tableServerProvider.js b/ambari-web/app/mixins/common/tableServerProvider.js
index 07a8918..3315011 100644
--- a/ambari-web/app/mixins/common/tableServerProvider.js
+++ b/ambari-web/app/mixins/common/tableServerProvider.js
@@ -28,6 +28,11 @@ App.TableServerProvider = Em.Mixin.create({
* total number of entities in table
*/
totalCount: 0,
+ /**
+ * Request error data
+ *
+ */
+ requestError: null,
filteredContent: function () {
return this.get('content');
@@ -50,6 +55,8 @@ App.TableServerProvider = Em.Mixin.create({
this.get('updater')[this.get('updater.tableUpdaterMap')[this.get('tableName')]](function () {
self.set('filteringComplete', true);
self.propertyDidChange('pageContent');
+ }, function() {
+ self.set('requestError', arguments);
});
return true;
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/app/utils/validator.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/validator.js b/ambari-web/app/utils/validator.js
index 602a377..3c41da2 100644
--- a/ambari-web/app/utils/validator.js
+++ b/ambari-web/app/utils/validator.js
@@ -146,6 +146,7 @@ module.exports = {
},
/**
* Validate string that will pass as parameter to .matches() url param.
+ * Try to prevent invalid regexp.
* For example: /api/v1/clusters/c1/hosts?Hosts/host_name.matches(.*localhost.)
*
* @params {String} value - string to validate
@@ -153,6 +154,18 @@ module.exports = {
* @method isValidMatchesRegexp
*/
isValidMatchesRegexp: function(value) {
- return /^((\.\*?)?([\w]+)?)+(\.\*?)?$/g.test(value);
+ var checkPair = function(chars) {
+ chars = chars.map(function(char) { return '\\' + char; });
+ var charsReg = new RegExp(chars.join('|'), 'g');
+ if (charsReg.test(value)) {
+ var pairContentReg = new RegExp(chars.join('.*'), 'g');
+ if (!pairContentReg.test(value)) return false;
+ var pairCounts = chars.map(function(char) { return value.match(new RegExp(char, 'g')).length; });
+ if (pairCounts[0] != pairCounts[1] ) return false;
+ }
+ return true;
+ }
+ if (/^[\?\|\*\!,]/.test(value)) return false;
+ return /^((\.\*?)?([\w\[\]\?\-_,\|\*\!\{\}]*)?)+(\.\*?)?$/g.test(value) && (checkPair(['[',']'])) && (checkPair(['{','}']));
}
};
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/app/views/main/host.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host.js b/ambari-web/app/views/main/host.js
index 8af2d8f..24608f2 100644
--- a/ambari-web/app/views/main/host.js
+++ b/ambari-web/app/views/main/host.js
@@ -62,6 +62,13 @@ App.MainHostView = App.TableView.extend(App.TableServerProvider, {
return [];
}.property('controller.content'),
+ onRequestErrorHandler: function() {
+ this.set('requestError', null);
+ this.get('controller').get('dataSource').setEach('isRequested', false);
+ this.set('filteringComplete', true);
+ this.propertyDidChange('pageContent');
+ }.observes('requestError'),
+
/**
* Contains content to show on the current page of data page view
* @type {Array}
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/test/controllers/main/host_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/host_test.js b/ambari-web/test/controllers/main/host_test.js
index b425f5f..1734d41 100644
--- a/ambari-web/test/controllers/main/host_test.js
+++ b/ambari-web/test/controllers/main/host_test.js
@@ -303,7 +303,7 @@ describe('MainHostController', function () {
});
- describe('#getRegExp()', function() {
+ describe.only('#getRegExp()', function() {
before(function() {
hostController = App.MainHostController.create({});
});
@@ -316,13 +316,12 @@ describe('MainHostController', function () {
{ value: '*', expected: '^$' },
{ value: '........', expected: '.*' },
{ value: '........*', expected: '.*' },
- { value: '........?', expected: '^$' },
- { value: 'a1', expected: 'a1.*' },
- { value: 'a1.', expected: 'a1.*' },
- { value: 'a1...', expected: 'a1.*' },
- { value: 'a1.*', expected: 'a1.*' },
- { value: 'a1.*.a2.a3', expected: 'a1.*.a2.a3.*' },
- { value: 'a1.*.a2...a3', expected: 'a1.*.a2...a3.*' }
+ { value: 'a1', expected: '.*a1.*' },
+ { value: 'a1.', expected: '.*a1.*' },
+ { value: 'a1...', expected: '.*a1.*' },
+ { value: 'a1.*', expected: '.*a1.*' },
+ { value: 'a1.*.a2.a3', expected: '.*a1.*.a2.a3.*' },
+ { value: 'a1.*.a2...a3', expected: '.*a1.*.a2...a3.*' }
]
tests.forEach(function(test){
http://git-wip-us.apache.org/repos/asf/ambari/blob/12dd8bd5/ambari-web/test/utils/validator_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/utils/validator_test.js b/ambari-web/test/utils/validator_test.js
index 65c8769..0ba85b7 100644
--- a/ambari-web/test/utils/validator_test.js
+++ b/ambari-web/test/utils/validator_test.js
@@ -346,7 +346,17 @@ describe('validator', function () {
{ value: '.*a1.*.a2.*.a3.a4.*.*', expected: true },
{ value: '*', expected: false },
{ value: '1>1', expected: false },
- { value: '.*a1,*', expected: false }
+ { value: '.*a1,*', expected: false },
+ { value: '?a1[1]asd[1]', expected: false },
+ { value: 'a1[1]asd[1]', expected: true },
+ { value: 'a1[1]asd[1][', expected: false },
+ { value: 'a1[1|1]asd[1]', expected: true },
+ { value: 'a1-2!', expected: true },
+ { value: '|a1-2', expected: false },
+ { value: '[a1', expected: false },
+ { value: 'a{1}', expected: true },
+ { value: 'a{1,2}', expected: true },
+ { value: 'a{1,2}{', expected: false }
];
tests.forEach(function(test) {
it(message.format(test.value, (test.expected) ? 'valid' : 'not valid'), function() {