You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2015/09/17 13:55:08 UTC

ignite git commit: IGNITE-843 WIP load metadata in batch

Repository: ignite
Updated Branches:
  refs/heads/ignite-843 5f0e912c0 -> 10202fa74


IGNITE-843 WIP load metadata in batch


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/10202fa7
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/10202fa7
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/10202fa7

Branch: refs/heads/ignite-843
Commit: 10202fa74f48754cc03b9c377acefd9b0eeaa04f
Parents: 5f0e912
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Thu Sep 17 18:55:03 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Thu Sep 17 18:55:03 2015 +0700

----------------------------------------------------------------------
 .../src/main/js/controllers/admin-controller.js |  2 +-
 .../main/js/controllers/caches-controller.js    |  6 +-
 .../main/js/controllers/clusters-controller.js  |  6 +-
 .../src/main/js/controllers/common-module.js    | 97 ++++++++------------
 .../main/js/controllers/metadata-controller.js  | 68 +++++++++-----
 .../src/main/js/controllers/sql-controller.js   |  4 +-
 .../src/main/js/routes/metadata.js              | 85 +++++++++++------
 7 files changed, 154 insertions(+), 114 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/admin-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/admin-controller.js b/modules/control-center-web/src/main/js/controllers/admin-controller.js
index 094e5a7..5e0dc46 100644
--- a/modules/control-center-web/src/main/js/controllers/admin-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/admin-controller.js
@@ -37,7 +37,7 @@ controlCenterModule.controller('adminController', ['$scope', '$window', '$http',
     };
 
     $scope.removeUser = function (user) {
-        $confirm.show('Are you sure you want to remove user: "' + user.username + '"?').then(function () {
+        $confirm.confirm('Are you sure you want to remove user: "' + user.username + '"?').then(function () {
             $http.post('admin/remove', {userId: user._id}).success(
                 function () {
                     var i = _.findIndex($scope.users, function (u) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/caches-controller.js b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index ae1b4e2..0b0516b 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -500,7 +500,7 @@ controlCenterModule.controller('cachesController', [
                 $table.tableReset();
 
                 if (validate($scope.backupItem))
-                    $copy.show($scope.backupItem.name).then(function (newName) {
+                    $copy.confirm($scope.backupItem.name).then(function (newName) {
                         var item = angular.copy($scope.backupItem);
 
                         item._id = undefined;
@@ -516,7 +516,7 @@ controlCenterModule.controller('cachesController', [
 
                 var selectedItem = $scope.selectedItem;
 
-                $confirm.show('Are you sure you want to remove cache: "' + selectedItem.name + '"?').then(
+                $confirm.confirm('Are you sure you want to remove cache: "' + selectedItem.name + '"?').then(
                     function () {
                         $scope.ui.markPristine(0);
 
@@ -552,7 +552,7 @@ controlCenterModule.controller('cachesController', [
             $scope.removeAllItems = function () {
                 $table.tableReset();
 
-                $confirm.show('Are you sure you want to remove all caches?').then(
+                $confirm.confirm('Are you sure you want to remove all caches?').then(
                     function () {
                         $scope.ui.markPristine(0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/clusters-controller.js b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
index 0ea516f..f79b32e 100644
--- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
@@ -422,7 +422,7 @@ controlCenterModule.controller('clustersController', ['$scope', '$controller', '
             $table.tableReset();
 
             if (validate($scope.backupItem))
-                $copy.show($scope.backupItem.name).then(function (newName) {
+                $copy.confirm($scope.backupItem.name).then(function (newName) {
                     var item = angular.copy($scope.backupItem);
 
                     item._id = undefined;
@@ -438,7 +438,7 @@ controlCenterModule.controller('clustersController', ['$scope', '$controller', '
 
             var selectedItem = $scope.selectedItem;
 
-            $confirm.show('Are you sure you want to remove cluster: "' + selectedItem.name + '"?').then(
+            $confirm.confirm('Are you sure you want to remove cluster: "' + selectedItem.name + '"?').then(
                 function () {
                     $scope.ui.markPristine(0);
 
@@ -474,7 +474,7 @@ controlCenterModule.controller('clustersController', ['$scope', '$controller', '
         $scope.removeAllItems = function () {
             $table.tableReset();
 
-            $confirm.show('Are you sure you want to remove all clusters?').then(
+            $confirm.confirm('Are you sure you want to remove all clusters?').then(
                 function () {
                     $scope.ui.markPristine(0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/common-module.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js
index e8b974d..e5c118f 100644
--- a/modules/control-center-web/src/main/js/controllers/common-module.js
+++ b/modules/control-center-web/src/main/js/controllers/common-module.js
@@ -857,7 +857,7 @@ controlCenterModule.service('$common', [
 controlCenterModule.service('$confirm', function ($modal, $rootScope, $q) {
     var scope = $rootScope.$new();
 
-    var deferred;
+    var deferred = $q.defer();
 
     // Configure title of cancel button.
     scope.cancelTitle = 'Cancel';
@@ -870,14 +870,10 @@ controlCenterModule.service('$confirm', function ($modal, $rootScope, $q) {
 
     var confirmModal = $modal({templateUrl: '/confirm', scope: scope, placement: 'center', show: false});
 
-    var parentShow = confirmModal.show;
-
-    confirmModal.show = function (content) {
+    confirmModal.confirm = function (content) {
         scope.content = content || 'Confirm deletion?';
 
-        deferred = $q.defer();
-
-        parentShow();
+        confirmModal.show();
 
         return deferred.promise;
     };
@@ -886,93 +882,84 @@ controlCenterModule.service('$confirm', function ($modal, $rootScope, $q) {
 });
 
 // Service for confirm or skip several steps.
-controlCenterModule.service('$stepConfirm', function ($timeout, $modal, $rootScope, $q) {
+controlCenterModule.service('$stepConfirm', function ($rootScope, $modal,  $q) {
     var scope = $rootScope.$new();
 
-    var deferred;
-
-    scope.ui = {forAll: false};
+    scope.ui = {batchConfirmApplyToAll: false};
 
     var contentGenerator = function () {
         return 'No content';
     };
 
-    var itemsToConfirm = [];
+    var items = [];
 
     var curIx = 0;
 
-    function nextElement(skip) {
-        itemsToConfirm[curIx].skip = skip;
-
-        curIx += 1;
+    var deferred = $q.defer();
 
-        if (curIx >= modelArray.length) {
+    function _done(cancel) {
+        if (cancel)
+            deferred.reject('cancelled');
+        else
             deferred.resolve();
 
-            stepConfirmModal.hide();
-        }
+        stepConfirmModal.hide();
+    }
+
+    function _nextElement(skip) {
+        items[curIx].skip = skip;
+
+        curIx++;
+
+        if (curIx < items.length)
+            scope.content = contentGenerator(itemsToConfirm = [curIx]);
+        else
+            _done();
     }
 
     /**
      * Generate reject event on cancel for special event processing.
      */
     scope.batchConfirmCancel = function () {
-        deferred.reject('cancelled');
-
-        stepConfirmModal.hide();
+        _done(true);
     };
 
     scope.batchConfirmSkip = function () {
-        if (scope.ui.batchConfirmAll) {
+        if (scope.ui.batchConfirmApplyToAll) {
             for (var i = curIx; i < itemsToConfirm.length; i++)
                 itemsToConfirm[i].skip = true;
 
-            deferred.resolve();
-
-            stepConfirmModal.hide();
+            _done();
         }
         else
-            nextElement(true);
+            _nextElement(true);
     };
 
     scope.batchConfirmOverwrite = function () {
-        if (scope.ui.batchConfirmAll) {
-            deferred.resolve();
-
-            stepConfirmModal.hide();
-        }
+        if (scope.ui.batchConfirmApplyToAll)
+            _done();
         else
-            nextElement(false);
+            _nextElement(false);
     };
 
     var stepConfirmModal = $modal({templateUrl: '/confirm/batch', scope: scope, placement: 'center', show: false});
 
-    var parentShow = stepConfirmModal.show;
-
     /**
      * Show confirm all dialog.
      *
      * @param confirmMessageFx Function to generate a confirm message.
-     * @param model Array of element to process by confirm.
+     * @param itemsToConfirm Array of element to process by confirm.
      */
-    stepConfirmModal.confirmAll = function (confirmMessageFx, model) {
-        contentGenerator = generator;
+    stepConfirmModal.confirm = function (confirmMessageFx, itemsToConfirm) {
+        contentGenerator = confirmMessageFx;
 
-        items = _.filter(model, function (item) {
-            return item.confirm;
-        });
+        items = itemsToConfirm;
 
-        $timeout(function () {
-            scope.content = contentGenerator(items[0]);
-        });
-
-        curIx = 0;
+        scope.content = contentGenerator(items[0]);
 
         scope.ui.batchConfirmAll = false;
 
-        deferred = $q.defer();
-
-        parentShow();
+        stepConfirmModal.show();
 
         return deferred.promise;
     };
@@ -980,11 +967,11 @@ controlCenterModule.service('$stepConfirm', function ($timeout, $modal, $rootSco
     return stepConfirmModal;
 });
 
-// 'Save as' popup service.
+// 'Clone' popup service.
 controlCenterModule.service('$copy', function ($modal, $rootScope, $q) {
     var scope = $rootScope.$new();
 
-    var deferred;
+    var deferred = $q.defer();
 
     scope.ok = function (newName) {
         deferred.resolve(newName);
@@ -994,14 +981,10 @@ controlCenterModule.service('$copy', function ($modal, $rootScope, $q) {
 
     var copyModal = $modal({templateUrl: '/clone', scope: scope, placement: 'center', show: false});
 
-    var parentShow = copyModal.show;
-
-    copyModal.show = function (oldName) {
+    copyModal.confirm = function (oldName) {
         scope.newName = oldName + '(1)';
 
-        deferred = $q.defer();
-
-        parentShow();
+        copyModal.show();
 
         return deferred.promise;
     };

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/metadata-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/metadata-controller.js b/modules/control-center-web/src/main/js/controllers/metadata-controller.js
index d50cdd2..4ad7ec2 100644
--- a/modules/control-center-web/src/main/js/controllers/metadata-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/metadata-controller.js
@@ -345,7 +345,33 @@ controlCenterModule.controller('metadataController', [
                 $loading.start('loadingMetadataFromDb');
 
                 $http.post('metadata/save/batch', batch)
-                    .success(function (saved) {
+                    .success(function (savedBatch) {
+                        var lastItem = undefined;
+                        var newItems = [];
+
+                        _.forEach(savedBatch, function (savedItem) {
+                            var idx = _.findIndex($scope.metadatas, function (meta) {
+                                return meta._id == savedItem._id;
+                            });
+
+                            if (idx >= 0)
+                                $scope.metadatas[idx] = savedItem;
+                            else
+                                newItems.push(savedItem);
+
+                            lastItem = savedItem;
+                        });
+
+                        _.forEach(newItems, function (item) {
+                            $scope.metadatas.push(item);
+                        });
+
+                        if (!lastItem && $scope.metadatas.length > 0)
+                            lastItem = $scope.metadatas[0];
+
+                        $scope.selectItem(lastItem);
+                        $scope.ui.markPristine(1);
+
                         $common.showInfo('Cache type metadata loaded from database.');
                     })
                     .error(function (errMsg) {
@@ -369,7 +395,6 @@ controlCenterModule.controller('metadataController', [
                 var batch = [];
                 var tables = [];
                 var dupCnt = 1;
-                var confirmNeeded = false;
 
                 _.forEach($scope.loadMeta.tables, function (table) {
                     if (table.use) {
@@ -459,8 +484,6 @@ controlCenterModule.controller('metadataController', [
                         };
 
                         if ($common.isDefined(metaFound)) {
-                            confirmNeeded = true;
-
                             meta = metaFound;
                             meta.confirm = true;
                         }
@@ -494,8 +517,12 @@ controlCenterModule.controller('metadataController', [
                         '</span>';
                 }
 
-                if (confirmNeeded)
-                    $stepConfirm.confirmAll(overwriteMessage, batch).then(function () {
+                var itemsToConfirm = _.filter(batch, function (item) {
+                    return item.confirm;
+                });
+
+                if (itemsToConfirm.length > 0)
+                    $stepConfirm.confirm(overwriteMessage, itemsToConfirm).then(function () {
                         _saveBatch(batch);
                     }, function () {
                         $common.showError('Cache type metadata loading interrupted by user.');
@@ -731,7 +758,7 @@ controlCenterModule.controller('metadataController', [
             }
 
             // Save cache type metadata into database.
-            function save(item, quiet) {
+            function save(item) {
                 var qry = $common.metadataForQueryConfigured(item);
                 var str = $common.metadataForStoreConfigured(item);
 
@@ -743,25 +770,24 @@ controlCenterModule.controller('metadataController', [
                     item.kind = 'store';
 
                 $http.post('metadata/save', item)
-                    .success(function (_id) {
+                    .success(function (res) {
                         $scope.ui.markPristine(0);
 
+                        var savedMeta = res[0];
+
                         var idx = _.findIndex($scope.metadatas, function (metadata) {
-                            return metadata._id == _id;
+                            return metadata._id == savedMeta._id;
                         });
 
                         if (idx >= 0)
-                            angular.extend($scope.metadatas[idx], item);
-                        else {
-                            item._id = _id;
+                            $scope.metadatas[idx] = savedMeta;
+                        else
+                            $scope.metadatas.push(savedMeta);
 
-                            $scope.metadatas.push(item);
-                            $scope.selectItem(item);
-                            $scope.ui.markPristine(1);
-                        }
+                        $scope.selectItem(savedMeta);
+                        $scope.ui.markPristine(1);
 
-                        if (!quiet)
-                            $common.showInfo('Cache type metadata"' + item.valueType + '" saved.');
+                        $common.showInfo('Cache type metadata"' + item.valueType + '" saved.');
                     })
                     .error(function (errMsg) {
                         $common.showError(errMsg);
@@ -783,7 +809,7 @@ controlCenterModule.controller('metadataController', [
                 $table.tableReset();
 
                 if (validate($scope.backupItem))
-                    $copy.show($scope.backupItem.valueType).then(function (newName) {
+                    $copy.confirm($scope.backupItem.valueType).then(function (newName) {
                         var item = angular.copy($scope.backupItem);
 
                         item._id = undefined;
@@ -799,7 +825,7 @@ controlCenterModule.controller('metadataController', [
 
                 var selectedItem = $scope.selectedItem;
 
-                $confirm.show('Are you sure you want to remove cache type metadata: "' + selectedItem.valueType + '"?').then(
+                $confirm.confirm('Are you sure you want to remove cache type metadata: "' + selectedItem.valueType + '"?').then(
                     function () {
                         var _id = selectedItem._id;
 
@@ -834,7 +860,7 @@ controlCenterModule.controller('metadataController', [
             $scope.removeAllItems = function () {
                 $table.tableReset();
 
-                $confirm.show('Are you sure you want to remove all metadata?').then(
+                $confirm.confirm('Are you sure you want to remove all metadata?').then(
                     function () {
                         $scope.ui.markPristine(0);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/controllers/sql-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/sql-controller.js b/modules/control-center-web/src/main/js/controllers/sql-controller.js
index 61f3e59..2f1f5d9 100644
--- a/modules/control-center-web/src/main/js/controllers/sql-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/sql-controller.js
@@ -154,7 +154,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
     };
 
     $scope.removeNotebook = function () {
-        $confirm.show('Are you sure you want to remove notebook: "' + $scope.notebook.name + '"?').then(
+        $confirm.confirm('Are you sure you want to remove notebook: "' + $scope.notebook.name + '"?').then(
             function () {
                 $http.post('/notebooks/remove', {_id: $scope.notebook._id})
                     .success(function () {
@@ -236,7 +236,7 @@ controlCenterModule.controller('sqlController', ['$scope', '$window','$controlle
     };
 
     $scope.removeParagraph = function(paragraph) {
-        $confirm.show('Are you sure you want to remove paragraph: "' + paragraph.name + '"?').then(
+        $confirm.confirm('Are you sure you want to remove paragraph: "' + paragraph.name + '"?').then(
             function () {
                 var paragraph_idx = _.findIndex($scope.notebook.paragraphs, function (item) {
                     return paragraph == item;

http://git-wip-us.apache.org/repos/asf/ignite/blob/10202fa7/modules/control-center-web/src/main/js/routes/metadata.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/metadata.js b/modules/control-center-web/src/main/js/routes/metadata.js
index 22e3016..78843d9 100644
--- a/modules/control-center-web/src/main/js/routes/metadata.js
+++ b/modules/control-center-web/src/main/js/routes/metadata.js
@@ -74,44 +74,75 @@ router.post('/list', function (req, res) {
     });
 });
 
-/**
- * Save metadata.
- */
-router.post('/save', function (req, res) {
-    var params = req.body;
-    var metaId = params._id;
-    var caches = params.caches;
-
-    if (req.body._id)
-        db.CacheTypeMetadata.update({_id: req.body._id}, req.body, {upsert: true}, function (err) {
-            if (db.processed(err, res))
-                db.Cache.update({_id: {$in: caches}}, {$addToSet: {metadatas: metaId}}, {multi: true}, function (err) {
+function _save(metas, res) {
+    var total = metas.length;
+
+    var results = [];
+
+    function saveAll() {
+        if (total > 0) {
+            total--;
+
+            var meta = metas.pop();
+            var metaId = meta._id;
+            var caches = meta.caches;
+
+            if (metaId)
+                db.CacheTypeMetadata.update({_id: meta._id}, meta, {upsert: true}, function (err) {
                     if (db.processed(err, res))
-                        db.Cache.update({_id: {$nin: caches}}, {$pull: {metadatas: metaId}}, {multi: true}, function (err) {
+                        db.Cache.update({_id: {$in: caches}}, {$addToSet: {metadatas: metaId}}, {multi: true}, function (err) {
                             if (db.processed(err, res))
-                                res.send(params._id);
+                                db.Cache.update({_id: {$nin: caches}}, {$pull: {metadatas: metaId}}, {multi: true}, function (err) {
+                                    if (db.processed(err, res)) {
+                                        results.push(meta);
+
+                                        saveAll();
+                                    }
+                                });
                         });
                 });
-        });
-    else {
-        db.CacheTypeMetadata.findOne({space: req.body.space, valueType: req.body.valueType}, function (err, metadata) {
-            if (db.processed(err, res)) {
-                if (metadata)
-                    return res.status(500).send('Cache type metadata with value type: "' + metadata.valueType + '" already exist.');
-
-                (new db.CacheTypeMetadata(req.body)).save(function (err, metadata) {
+            else {
+                db.CacheTypeMetadata.findOne({space: meta.space, valueType: meta.valueType}, function (err, metadata) {
                     if (db.processed(err, res)) {
-                        metaId = metadata._id;
+                        if (metadata)
+                            return res.status(500).send('Cache type metadata with value type: "' + metadata.valueType + '" already exist.');
 
-                        db.Cache.update({_id: {$in: caches}}, {$addToSet: {metadatas: metaId}}, {multi: true}, function (err) {
-                            if (db.processed(err, res))
-                                res.send(metaId);
+                        (new db.CacheTypeMetadata(meta)).save(function (err, metadata) {
+                            if (db.processed(err, res)) {
+                                metaId = metadata._id;
+
+                                db.Cache.update({_id: {$in: caches}}, {$addToSet: {metadatas: metaId}}, {multi: true}, function (err) {
+                                    if (db.processed(err, res)) {
+                                        results.push(metadata);
+
+                                        saveAll();
+                                    }
+                                });
+                            }
                         });
                     }
                 });
             }
-        });
+        }
+        else
+            res.send(results);
     }
+
+    saveAll();
+}
+
+/**
+ * Save metadata.
+ */
+router.post('/save', function (req, res) {
+    _save([req.body], res);
+});
+
+/**
+ * Batch save metadata .
+ */
+router.post('/save/batch', function (req, res) {
+    _save(req.body, res);
 });
 
 /**