]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
HA: Add a warning/info message for HA setups < 3 votes fix: #1228
authorEmmanuel Kasper <e.kasper@proxmox.com>
Thu, 29 Dec 2016 11:04:18 +0000 (12:04 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 3 Jan 2017 10:10:06 +0000 (11:10 +0100)
www/manager6/ha/ResourceEdit.js

index 4dc7474e0a8223d49043f17611bc8d2e9846fca3..06dda104de84d9201cb811ce73f9ef0724f2136f 100644 (file)
@@ -22,6 +22,7 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
 
     initComponent : function() {
        var me = this;
+       var MIN_QUORUM_VOTES = 3;
 
        var disabledHint = Ext.createWidget({
            xtype: 'displayfield', //submitValue is false, so we don't get submitted
@@ -31,6 +32,39 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
            hidden: true
        });
 
+       var fewVotesHint = Ext.createWidget({
+           itemId: 'fewVotesHint',
+           xtype: 'displayfield',
+           userCls: 'pve-hint',
+           updateValue: function(votes) {
+               var me = this;
+               me.setValue(gettext('You need at least three quorum votes for a reliable HA cluster. ' +
+               'See the online help for details. Current votes: ') + votes);
+           },
+           hidden: true
+       });
+
+       PVE.Utils.API2Request({
+           url: '/cluster/config/nodes',
+           method: 'GET',
+           failure: function(response) {
+               Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+           },
+           success: function(response) {
+               var nodes = response.result.data;
+               var votes = 0;
+               Ext.Array.forEach(nodes, function(node) {
+                   var vote = parseInt(node.quorum_votes, 10); // parse as base 10
+                   votes += vote || 0; // parseInt might return NaN, which is false
+               });
+
+               if (votes < MIN_QUORUM_VOTES) {
+                   fewVotesHint.updateValue(votes);
+                   fewVotesHint.setVisible(true);
+               }
+           }
+       });
+
        me.column1 = [
            {
                xtype: me.vmid ? 'displayfield' : 'pveGuestIDSelector',
@@ -100,7 +134,8 @@ Ext.define('PVE.ha.VMResourceInputPanel', {
                xtype: 'textfield',
                name: 'comment',
                fieldLabel: gettext('Comment')
-           }
+           },
+           fewVotesHint
        ];
        
        me.callParent();