+++ /dev/null
-// Serialize load (avoid too many parallel connections)
-Ext.define('Proxmox.data.UpdateQueue', {
- singleton: true,
-
- constructor : function(){
- var me = this;
-
- var queue = [];
- var queue_idx = {};
-
- var idle = true;
-
- var start_update = function() {
- if (!idle) {
- return;
- }
-
- var storeid = queue.shift();
- if (!storeid) {
- return;
- }
- var info = queue_idx[storeid];
- queue_idx[storeid] = null;
-
- info.updatestart = new Date();
-
- idle = false;
- info.store.load({
- callback: function(records, operation, success) {
- idle = true;
- if (info.callback) {
- var runtime = (new Date()).getTime() - info.updatestart.getTime();
- info.callback(runtime, success);
- }
- start_update();
- }
- });
- };
-
- Ext.apply(me, {
- queue: function(store, cb) {
- var storeid = store.storeid;
- if (!storeid) {
- throw "unable to queue store without storeid";
- }
- if (!queue_idx[storeid]) {
- queue_idx[storeid] = {
- store: store,
- callback: cb
- };
- queue.push(storeid);
- }
- start_update();
- },
- unqueue: function(store) {
- var storeid = store.storeid;
- if (!storeid) {
- throw "unabel to unqueue store without storeid";
- }
- if (queue_idx[storeid]) {
- Ext.Array.remove(queue,storeid);
- queue_idx[storeid] = null;
- }
- }
- });
- }
-});
destroy: function() {
var me = this;
- me.load_task.cancel();
- Proxmox.data.UpdateQueue.unqueue(me);
+ me.stopUpdate();
me.callParent();
},
}
if (Proxmox.Utils.authOK()) {
- Proxmox.data.UpdateQueue.queue(me, function(runtime, success) {
+ var start = new Date();
+ me.load(function() {
+ var runtime = (new Date()) - start;
var interval = config.interval + runtime*2;
load_task.delay(interval, run_load_task);
});
stopUpdate: function() {
me.isStopped = true;
load_task.cancel();
- Proxmox.data.UpdateQueue.unqueue(me);
}
});