speed-up displaying 802.1Q queue summary
authorAlexey Andriyanov <alan@al-an.info>
Mon, 24 Jun 2013 12:12:57 +0000 (16:12 +0400)
committerAlexey Andriyanov <alan@al-an.info>
Mon, 24 Jun 2013 12:12:57 +0000 (16:12 +0400)
The problem with this summary is that it requires to perform
considerConfiguredConstraint for each switch. On large installations
this leads to a poor rendering time of main 802.1Q page. The solution
is to cache the disabled sync state in last_errno DB field.
This changeset turns the 'disabled' 802.1Q state to a real state, and
makes syncdomain.php to operate with it.

syncdomain.php: set the disabled state for those switches which do not
comply to SYNC_802Q_LISTSRC. Force sync of those switches which are in
disabled state, but do not compy to SYNC_802Q_LISTSRC.

detectVLANSwitchQueue: E_8021Q_SYNC_DISABLED leads to 'disbaled' state
get8021QDeployQueues: change the output format, do not group by
enabled/disabled key
render8021QStatus: do not use enabled/disabled keys
renderDeployQueue: idem

scripts/syncdomain.php
wwwroot/inc/functions.php
wwwroot/inc/interface.php

index a0361e9..c75ba2a 100755 (executable)
@@ -100,12 +100,21 @@ fclose ($fp);
 // fetch all the needed data from DB (preparing for DB connection loss)
 $switch_queue = array();
 foreach ($switch_list as $object_id)
-       if (in_array (detectVLANSwitchQueue (getVLANSwitchInfo ($object_id)), $todo[$options['mode']]))
+{
+       $queue = detectVLANSwitchQueue (getVLANSwitchInfo ($object_id));
+       if ($queue == 'disabled' || in_array ($queue, $todo[$options['mode']]))
        {
                $cell = spotEntity ('object', $object_id);
                if (considerConfiguredConstraint ($cell, 'SYNC_802Q_LISTSRC'))
                        $switch_queue[] = $cell;
+               else
+                       usePreparedExecuteBlade
+                       (
+                               'UPDATE VLANSwitch SET out_of_sync="yes", last_error_ts=NOW(), last_errno=? WHERE object_id=?',
+                               array (E_8021Q_SYNC_DISABLED, $cell['id'])
+                       );
        }
+}
 
 // YOU SHOULD NOT USE DB FUNCTIONS BELOW IN THE PARENT PROCESS
 // THE PARENT'S DB CONNECTION IS LOST DUE TO RECONNECTING IN THE CHILD
index 582ed2e..ddca885 100644 (file)
@@ -4486,7 +4486,7 @@ function detectVLANSwitchQueue ($vswitch)
                else
                        return 'resync_ready';
        case E_8021Q_SYNC_DISABLED:
-               return 'sync_ready';
+               return 'disabled';
        }
        return '';
 }
@@ -4496,21 +4496,12 @@ function get8021QDeployQueues()
        global $dqtitle;
        $ret = array();
        foreach (array_keys ($dqtitle) as $qcode)
-               if ($qcode != 'disabled')
-                       $ret[$qcode] = array
-                       (
-                               'enabled' => array(),
-                               'disabled' => array(),
-                       );
+               $ret[$qcode] = array();
        foreach (getVLANSwitches() as $object_id)
        {
                $vswitch = getVLANSwitchInfo ($object_id);
                if ('' != $qcode = detectVLANSwitchQueue ($vswitch))
-               {
-                       $cell = spotEntity ('object', $vswitch['object_id']);
-                       $enabled_key = considerConfiguredConstraint ($cell, 'SYNC_802Q_LISTSRC') ? 'enabled' : 'disabled';
-                       $ret[$qcode][$enabled_key][] = $vswitch;
-               }
+                       $ret[$qcode][] = $vswitch;
        }
        return $ret;
 }
index bc4d195..c4385c8 100644 (file)
@@ -6619,23 +6619,18 @@ function render8021QStatus ()
        echo '</td><td class=pcright>';
 
        startPortlet ('deploy queues');
-       $enabled_total = 0;
-       $disabled_total = 0;
+       $total = 0;
        echo '<table border=0 cellspacing=0 cellpadding=3 width="100%">';
        foreach (get8021QDeployQueues() as $qcode => $qitems)
        {
                echo '<tr><th width="50%" class=tdright>' . mkA ($dqtitle[$qcode], 'dqueue', $qcode) . ':</th>';
-               echo '<td class=tdleft>' . count ($qitems['enabled']) . '</td></tr>';
+               echo '<td class=tdleft>' . count ($qitems) . '</td></tr>';
 
-               $enabled_total += count ($qitems['enabled']);
-               $disabled_total += count ($qitems['disabled']);
+               $total += count ($qitems);
        }
+       echo '<tr><th width="50%" class=tdright>Total:</th>';
+       echo '<td class=tdleft>' . $total . '</td></tr>';
        echo '</table>';
-       $total = $enabled_total + $disabled_total;
-       echo "<p align=left>$total switches total";
-       if ($disabled_total)
-               echo ', ' . mkA ($disabled_total, 'dqueue', 'disabled') . ' disabled';
-       echo '</p>';
        finishPortlet();
        echo '</td></tr></table>';
 }
@@ -7886,17 +7881,15 @@ function renderDeployQueue()
        $order = 'odd';
        $dqcode = getBypassValue();
        $allq = get8021QDeployQueues();
-       $en_key = $dqcode == 'disabled' ? 'disabled' : 'enabled';
        foreach ($allq as $qcode => $data)
-               if ($dqcode == 'disabled' || $dqcode == $qcode)
+               if ($dqcode == $qcode)
                {
-                       if (! count ($data[$en_key]))
+                       echo "<h2 align=center>Queue '" . $dqtitle[$qcode] . "' (" . count ($data) . ")</h2>";
+                       if (! count ($data))
                                continue;
-                       if ($dqcode == 'disabled')
-                               echo "<h2 align=center>Queue " . $dqtitle[$qcode] . " (" . count ($data[$en_key]) . ")</h2>";
                        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
                        echo '<tr><th>switch</th><th>changed</th><th>';
-                       foreach ($data[$en_key] as $item)
+                       foreach ($data as $item)
                        {
                                echo "<tr class=row_${order}><td>";
                                renderCell (spotEntity ('object', $item['object_id']));