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/10/21 05:22:18 UTC

ignite git commit: IGNITE-1200 WIP on IGFS support.

Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc1 60d850009 -> 7d0cd45c4


IGNITE-1200 WIP on IGFS support.


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

Branch: refs/heads/ignite-843-rc1
Commit: 7d0cd45c4078a5d024d108c0fce7a137d0c30537
Parents: 60d8500
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Wed Oct 21 10:22:13 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Wed Oct 21 10:22:13 2015 +0700

----------------------------------------------------------------------
 .../main/js/controllers/clusters-controller.js  |   6 +
 .../main/js/controllers/models/clusters.json    |   4 +-
 .../src/main/js/controllers/models/igfs.json    | 139 +++++++++++++------
 modules/control-center-web/src/main/js/db.js    |  13 +-
 .../src/main/js/routes/clusters.js              |  37 +++--
 .../main/js/routes/generator/generator-java.js  |   9 ++
 .../main/js/routes/generator/generator-xml.js   |   9 ++
 .../src/main/js/routes/igfs.js                  |  96 +++++--------
 .../src/main/js/views/configuration/caches.jade |   2 +-
 .../src/main/js/views/configuration/igfs.jade   |   8 +-
 10 files changed, 194 insertions(+), 129 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/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 dda0c13..a7c94d5 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
@@ -178,11 +178,17 @@ consoleModule.controller('clustersController', [
         $http.post('clusters/list')
             .success(function (data) {
                 $scope.spaces = data.spaces;
+
                 $scope.clusters = data.clusters;
+
                 $scope.caches = _.map(data.caches, function (cache) {
                     return {value: cache._id, label: cache.name, cache: cache};
                 });
 
+                $scope.igfss = _.map(data.igfss, function (igfs) {
+                    return {value: igfs._id, label: igfs.name, igfs: igfs};
+                });
+
                 // Load page descriptor.
                 $http.get('/models/clusters.json')
                     .success(function (data) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/controllers/models/clusters.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/clusters.json b/modules/control-center-web/src/main/js/controllers/models/clusters.json
index 59ca422..325c4c9 100644
--- a/modules/control-center-web/src/main/js/controllers/models/clusters.json
+++ b/modules/control-center-web/src/main/js/controllers/models/clusters.json
@@ -1041,10 +1041,10 @@
           "label": "IGFS",
           "id": "igfs",
           "type": "dropdown-multiple",
-          "model": "igfs",
+          "model": "igfss",
           "placeholder": "Choose IGFS",
           "placeholderEmpty": "No IGFS configured",
-          "items": "igfs",
+          "items": "igfss",
           "tip": [
             "Select IGFS to start in cluster or add a new IGFS"
           ],

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/controllers/models/igfs.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/igfs.json b/modules/control-center-web/src/main/js/controllers/models/igfs.json
index 7891bff..23b07e0 100644
--- a/modules/control-center-web/src/main/js/controllers/models/igfs.json
+++ b/modules/control-center-web/src/main/js/controllers/models/igfs.json
@@ -36,50 +36,20 @@
           "placeholder": "Input name"
         },
         {
-          "label": "Block size",
-          "id": "BlockSize",
-          "type": "number",
-          "model": "blockSize",
-          "placeholder": "65536",
+          "label": "Clusters",
+          "id": "clusters",
+          "type": "dropdown-multiple",
+          "model": "clusters",
+          "placeholder": "Choose clusters",
+          "placeholderEmpty": "No clusters configured",
+          "items": "clusters",
           "tip": [
-            "File's data block size (bytes)"
-          ]
-        },
-        {
-          "label": "Stream buffer size",
-          "id": "streamBufferSize",
-          "type": "number",
-          "model": "streamBufferSize"
-        },
-        {
-          "label": "DefaultMode"
-        },
-        {
-          "label": "MaxSpaceSize"
-        },
-        {
-          "label": "MaximumTaskRangeLength"
-        },
-        {
-          "label": "ManagementPort"
-        },
-        {
-          "label": "PathModes"
-        },
-        {
-          "label": "PerNodeBatchSize"
-        },
-        {
-          "label": "PerNodeParallelBatchCount"
-        },
-        {
-          "label": "PrefetchBlocks"
-        },
-        {
-          "label": "SequentialReadsBeforePrefetch"
-        },
-        {
-          "label": "TrashPurgeTimeout"
+            "Associate clusters with the current IGFS"
+          ],
+          "addLink": {
+            "label": "Add cluster(s)",
+            "ref": "/configuration/clusters?new"
+          }
         }
       ]
     }
@@ -89,7 +59,7 @@
       "label": "IPC",
       "group": "ipc",
       "tip": [
-        "TODO"
+        "IGFS Inter-process communication properties"
       ],
       "fields": [
         {
@@ -98,7 +68,34 @@
           "model": "ipcEndpointEnabled"
         },
         {
-          "label": "IpcEndpointConfiguration"
+          "label": "Type",
+          "type": "dropdown",
+          "path": "ipcEndpointConfiguration",
+          "model": "type"
+        },
+        {
+          "label": "Host",
+          "type": "text",
+          "path": "ipcEndpointConfiguration",
+          "model": "host"
+        },
+        {
+          "label": "Port",
+          "type": "number",
+          "path": "ipcEndpointConfiguration",
+          "model": "port"
+        },
+        {
+          "label": "Memory size",
+          "type": "number",
+          "path": "ipcEndpointConfiguration",
+          "model": "memorySize"
+        },
+        {
+          "label": "Token directory",
+          "type": "text",
+          "path": "ipcEndpointConfiguration",
+          "model": "tokenDirectoryPath"
         }
       ]
     },
@@ -148,7 +145,57 @@
       ]
     },
     {
-      "label": "Miscellaneous"
+      "label": "Miscellaneous",
+      "group": "misc",
+      "tip": [],
+      "fields": [
+        {
+          "label": "Block size",
+          "id": "BlockSize",
+          "type": "number",
+          "model": "blockSize",
+          "placeholder": "65536",
+          "tip": [
+            "File's data block size (bytes)"
+          ]
+        },
+        {
+          "label": "Stream buffer size",
+          "id": "streamBufferSize",
+          "type": "number",
+          "model": "streamBufferSize"
+        },
+        {
+          "label": "DefaultMode"
+        },
+        {
+          "label": "MaxSpaceSize"
+        },
+        {
+          "label": "MaximumTaskRangeLength"
+        },
+        {
+          "label": "ManagementPort"
+        },
+        {
+          "label": "PathModes"
+        },
+        {
+          "label": "PerNodeBatchSize"
+        },
+        {
+          "label": "PerNodeParallelBatchCount"
+        },
+        {
+          "label": "PrefetchBlocks"
+        },
+        {
+          "label": "SequentialReadsBeforePrefetch"
+        },
+        {
+          "label": "TrashPurgeTimeout"
+        }
+      ]
     }
   ]
 }

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index c987da3..f9cacb4 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -222,19 +222,26 @@ exports.Cache = mongoose.model('Cache', CacheSchema);
 var IgfsSchema = new Schema({
     space: {type: ObjectId, ref: 'Space'},
     name: String,
+    clusters: [{type: ObjectId, ref: 'Cluster'}],
     blockSize: Number,
     streamBufferSize: Number,
     dataCacheName: String,
     metaCacheName: String,
     defaultMode: {type: String, enum: ['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']},
     dualModeMaxPendingPutsSize: Number,
-    //dualModePutExec = cfg.getDualModePutExecutorService();
+    dualModePutExecutorService: String,
     dualModePutExecutorServiceShutdown: Boolean,
     fragmentizerConcurrentFiles: Number,
     fragmentizerEnabled: Boolean,
     fragmentizerThrottlingBlockLength: Number,
     fragmentizerThrottlingDelay: Number,
-    ipcEndpointConfiguration: {},
+    ipcEndpointConfiguration: {
+        type: {type: String, enum: ['SHMEM', 'TCP']},
+        host: String,
+        port: Number,
+        memorySize: Number,
+        tokenDirectoryPath: String
+    },
     ipcEndpointEnabled: Boolean,
     maxSpaceSize: Number,
     maximumTaskRangeLength: Number,
@@ -326,7 +333,7 @@ var ClusterSchema = new Schema({
     deploymentMode: {type: String, enum: ['PRIVATE', 'ISOLATED', 'SHARED', 'CONTINUOUS']},
     discoveryStartupDelay: Number,
     igfsThreadPoolSize: Number,
-    igfs: [{type: ObjectId, ref: 'Igfs'}],
+    igfss: [{type: ObjectId, ref: 'Igfs'}],
     includeEventTypes: [{
         type: String, enum: ['EVTS_CHECKPOINT', 'EVTS_DEPLOYMENT', 'EVTS_ERROR', 'EVTS_DISCOVERY',
             'EVTS_JOB_EXECUTION', 'EVTS_TASK_EXECUTION', 'EVTS_CACHE', 'EVTS_CACHE_REBALANCE', 'EVTS_CACHE_LIFECYCLE',

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/clusters.js b/modules/control-center-web/src/main/js/routes/clusters.js
index 6d2208c..77e5677 100644
--- a/modules/control-center-web/src/main/js/routes/clusters.js
+++ b/modules/control-center-web/src/main/js/routes/clusters.js
@@ -43,20 +43,31 @@ router.post('/list', function (req, res) {
             // Get all caches for spaces.
             db.Cache.find({space: {$in: space_ids}}).sort('name').deepPopulate('metadatas').exec(function (err, caches) {
                 if (db.processed(err, res)) {
-                    // Get all clusters for spaces.
-                    db.Cluster.find({space: {$in: space_ids}}).sort('name').exec(function (err, clusters) {
-                        if (db.processed(err, res)) {
-                            // Remove deleted caches.
-                            _.forEach(clusters, function (cluster) {
-                                cluster.caches = _.filter(cluster.caches, function (cacheId) {
-                                    return _.findIndex(caches, function (cache) {
-                                            return cache._id.equals(cacheId);
-                                        }) >= 0;
-                                });
+                    // Get all IGFSs for spaces.
+                    db.Igfs.find({space: {$in: space_ids}}).sort('name').exec(function (err, igfss) {
+                        if (db.processed(err, res))
+                        // Get all clusters for spaces.
+                            db.Cluster.find({space: {$in: space_ids}}).sort('name').exec(function (err, clusters) {
+                                if (db.processed(err, res)) {
+                                    _.forEach(clusters, function (cluster) {
+                                        // Remove deleted caches.
+                                        cluster.caches = _.filter(cluster.caches, function (cacheId) {
+                                            return _.findIndex(caches, function (cache) {
+                                                    return cache._id.equals(cacheId);
+                                                }) >= 0;
+                                        });
+
+                                        // Remove deleted IGFS.
+                                        cluster.igfss = _.filter(cluster.igfss, function (igfsId) {
+                                            return _.findIndex(igfss, function (igfs) {
+                                                    return igfs._id.equals(igfsId);
+                                                }) >= 0;
+                                        });
+                                    });
+
+                                    res.json({spaces: spaces, caches: caches, igfss: igfss, clusters: clusters});
+                                }
                             });
-
-                            res.json({spaces: spaces, caches: caches, clusters: clusters});
-                        }
                     });
                 }
             });

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/routes/generator/generator-java.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-java.js b/modules/control-center-web/src/main/js/routes/generator/generator-java.js
index 4c4ca38..d65f3e9 100644
--- a/modules/control-center-web/src/main/js/routes/generator/generator-java.js
+++ b/modules/control-center-web/src/main/js/routes/generator/generator-java.js
@@ -1517,6 +1517,15 @@ $generatorJava.clusterSsl = function(cluster, res) {
     return res;
 };
 
+$generatorJava.igfs = function(igfs, varName, res) {
+    if (!res)
+        res = $generatorCommon.builder();
+
+    res.line('TODO IGFS java code generation');
+
+    return res;
+};
+
 /**
  * Function to generate java code for cluster configuration.
  *

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/routes/generator/generator-xml.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/generator/generator-xml.js b/modules/control-center-web/src/main/js/routes/generator/generator-xml.js
index f806ba5..6dfd9cf 100644
--- a/modules/control-center-web/src/main/js/routes/generator/generator-xml.js
+++ b/modules/control-center-web/src/main/js/routes/generator/generator-xml.js
@@ -1088,6 +1088,15 @@ $generatorXml.clusterCaches = function(caches, res) {
     return res;
 };
 
+$generatorXml.igfs = function(igfs, res) {
+    if (!res)
+        res = $generatorCommon.builder();
+
+    res.line('TODO IGFS XML generation');
+
+    return res;
+};
+
 // Generate cluster config.
 $generatorXml.cluster = function (cluster, clientNearCfg) {
     if (cluster) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/routes/igfs.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/igfs.js b/modules/control-center-web/src/main/js/routes/igfs.js
index bc5b282..caf99b1 100644
--- a/modules/control-center-web/src/main/js/routes/igfs.js
+++ b/modules/control-center-web/src/main/js/routes/igfs.js
@@ -19,7 +19,7 @@ var _ = require('lodash');
 var router = require('express').Router();
 var db = require('../db');
 
-/* GET caches page. */
+/* GET IGFS page. */
 router.get('/', function (req, res) {
     res.render('configuration/igfs');
 });
@@ -43,89 +43,65 @@ router.post('/list', function (req, res) {
             // Get all clusters for spaces.
             db.Cluster.find({space: {$in: space_ids}}, '_id name').sort('name').exec(function (err, clusters) {
                 if (db.processed(err, res)) {
-                    // Get all caches type metadata for spaces.
-                    db.CacheTypeMetadata.find({space: {$in: space_ids}}).sort('name').exec(function (err, metadatas) {
+                    // Get all IGFSs for spaces.
+                    db.Igfs.find({space: {$in: space_ids}}).sort('name').exec(function (err, igfss) {
                         if (db.processed(err, res)) {
-                            // Get all caches for spaces.
-                            db.Cache.find({space: {$in: space_ids}}).sort('name').exec(function (err, caches) {
-                                if (db.processed(err, res)) {
-                                    _.forEach(caches, function (cache) {
-                                        // Remove deleted clusters.
-                                        cache.clusters = _.filter(cache.clusters, function (clusterId) {
-                                            return _.findIndex(clusters, function (cluster) {
-                                                    return cluster._id.equals(clusterId);
-                                                }) >= 0;
-                                        });
-
-                                        // Remove deleted metadata.
-                                        cache.metadatas = _.filter(cache.metadatas, function (metaId) {
-                                            return _.findIndex(metadatas, function (meta) {
-                                                    return meta._id.equals(metaId);
-                                                }) >= 0;
-                                        });
-                                    });
-
-                                    res.json({
-                                        spaces: spaces,
-                                        clusters: clusters.map(function (cluster) {
-                                            return {value: cluster._id, label: cluster.name};
-                                        }),
-                                        metadatas: metadatas,
-                                        caches: caches
-                                    });
-                                }
+                            _.forEach(igfss, function (igfs) {
+                                // Remove deleted clusters.
+                                igfs.clusters = _.filter(igfs.clusters, function (clusterId) {
+                                    return _.findIndex(clusters, function (cluster) {
+                                            return cluster._id.equals(clusterId);
+                                        }) >= 0;
+                                });
+                            });
+
+                            res.json({
+                                spaces: spaces,
+                                clusters: clusters.map(function (cluster) {
+                                    return {value: cluster._id, label: cluster.name};
+                                }),
+                                igfss: igfss
                             });
                         }
-                    });
-                }
+                    });                }
             });
         }
     });
 });
 
 /**
- * Save cache.
+ * Save IGFS.
  */
 router.post('/save', function (req, res) {
     var params = req.body;
-    var cacheId = params._id;
+    var igfsId = params._id;
     var clusters = params.clusters;
-    var metadatas = params.metadatas;
 
     if (params._id) {
-        db.Cache.update({_id: cacheId}, params, {upsert: true}, function (err) {
+        db.Igfs.update({_id: igfsId}, params, {upsert: true}, function (err) {
             if (db.processed(err, res))
-                db.Cluster.update({_id: {$in: clusters}}, {$addToSet: {caches: cacheId}}, {multi: true}, function (err) {
+                db.Cluster.update({_id: {$in: clusters}}, {$addToSet: {igfss: igfsId}}, {multi: true}, function (err) {
                     if (db.processed(err, res))
-                        db.Cluster.update({_id: {$nin: clusters}}, {$pull: {caches: cacheId}}, {multi: true}, function (err) {
+                        db.Cluster.update({_id: {$nin: clusters}}, {$pull: {igfss: igfsId}}, {multi: true}, function (err) {
                             if (db.processed(err, res))
-                                db.CacheTypeMetadata.update({_id: {$in: metadatas}}, {$addToSet: {caches: cacheId}}, {multi: true}, function (err) {
-                                    if (db.processed(err, res))
-                                        db.CacheTypeMetadata.update({_id: {$nin: metadatas}}, {$pull: {caches: cacheId}}, {multi: true}, function (err) {
-                                            if (db.processed(err, res))
-                                                res.send(params._id);
-                                        });
-                                });
+                                res.send(params._id);
                         });
                 });
         })
     }
     else
-        db.Cache.findOne({space: params.space, name: params.name}, function (err, cache) {
+        db.Igfs.findOne({space: params.space, name: params.name}, function (err, igfs) {
             if (db.processed(err, res)) {
-                if (cache)
-                    return res.status(500).send('Cache with name: "' + cache.name + '" already exist.');
+                if (igfs)
+                    return res.status(500).send('IGFS with name: "' + igfs.name + '" already exist.');
 
-                (new db.Cache(params)).save(function (err, cache) {
+                (new db.Igfs(params)).save(function (err, igfs) {
                     if (db.processed(err, res)) {
-                        cacheId = cache._id;
+                        igfsId = igfs._id;
 
-                        db.Cluster.update({_id: {$in: clusters}}, {$addToSet: {caches: cacheId}}, {multi: true}, function (err) {
+                        db.Cluster.update({_id: {$in: clusters}}, {$addToSet: {igfss: igfsId}}, {multi: true}, function (err) {
                             if (db.processed(err, res))
-                                db.CacheTypeMetadata.update({_id: {$in: metadatas}}, {$addToSet: {caches: cacheId}}, {multi: true}, function (err) {
-                                    if (db.processed(err, res))
-                                        res.send(cacheId);
-                                });
+                                res.send(igfsId);
                         });
                     }
                 });
@@ -134,17 +110,17 @@ router.post('/save', function (req, res) {
 });
 
 /**
- * Remove cache by ._id.
+ * Remove IGFS by ._id.
  */
 router.post('/remove', function (req, res) {
-    db.Cache.remove(req.body, function (err) {
+    db.Igfs.remove(req.body, function (err) {
         if (db.processed(err, res))
             res.sendStatus(200);
     })
 });
 
 /**
- * Remove all caches.
+ * Remove all IGFSs.
  */
 router.post('/remove/all', function (req, res) {
     var user_id = req.currentUserId();
@@ -156,7 +132,7 @@ router.post('/remove/all', function (req, res) {
                 return value._id;
             });
 
-            db.Cache.remove({space: {$in: space_ids}}, function (err) {
+            db.Igfs.remove({space: {$in: space_ids}}, function (err) {
                 if (err)
                     return res.status(500).send(err.message);
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/views/configuration/caches.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/caches.jade b/modules/control-center-web/src/main/js/views/configuration/caches.jade
index 93751ed..f2ebed6 100644
--- a/modules/control-center-web/src/main/js/views/configuration/caches.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/caches.jade
@@ -31,7 +31,7 @@ block content
                 hr
                 +main-table('Caches:', 'caches', 'cacheName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}, {{row.cacheMode | displayValue:cacheModes:"Cache mode not set"}}, {{row.atomicityMode | displayValue:atomicities:"Cache atomicity not set"}}')
                 .padding-top-dflt(bs-affix)
-                    .panel-tip-container(data-placement='bottom' bs-tooltip data-title='Create new caches')
+                    .panel-tip-container(data-placement='bottom' bs-tooltip data-title='Create new cache')
                         button.btn.btn-primary(id='new-item' ng-click='createItem()') Add cache
                     +save-remove-buttons('cache')
                     hr

http://git-wip-us.apache.org/repos/asf/ignite/blob/7d0cd45c/modules/control-center-web/src/main/js/views/configuration/igfs.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/igfs.jade b/modules/control-center-web/src/main/js/views/configuration/igfs.jade
index 28c4384..2a99d71 100644
--- a/modules/control-center-web/src/main/js/views/configuration/igfs.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/igfs.jade
@@ -29,11 +29,11 @@ block content
             div(ng-show='ui.ready')
                 +block-callout('{{screenTip.workflowTitle}}', 'screenTip.workflowContent', '{{screenTip.whatsNextTitle}}', 'screenTip.whatsNextContent')
                 hr
-                +main-table('IGFS:', 'igfs', 'igfsName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}')
+                +main-table('IGFS:', 'igfss', 'igfsName', 'selectItem(row)', '{{$index + 1}}) {{row.name}}')
                 .padding-top-dflt(bs-affix)
-                    .panel-tip-container(data-placement='bottom' bs-tooltip data-title='Create new caches')
+                    .panel-tip-container(data-placement='bottom' bs-tooltip data-title='Create new IGFS')
                         button.btn.btn-primary(id='new-item' ng-click='createItem()') Add IGFS
-                    +save-remove-buttons('igfs')
+                    +save-remove-buttons('IGFS')
                     hr
                 form.form-horizontal(name='ui.inputForm' ng-show='backupItem && tableVisibleRow(displayedRows, selectedItem)' novalidate unsaved-warning-form)
                     .panel-group(bs-collapse ng-model='panels.activePanels' data-allow-multiple='true' ng-click='triggerDigest = true')
@@ -43,4 +43,4 @@ block content
                             +groups('advanced', 'backupItem')
                     +advanced-options
                     .section(ng-show='ui.expanded')
-                        +save-remove-buttons('igfs')
+                        +save-remove-buttons('IGFS')