Fix some tiles not getting returned at all by map requests, causing a tile to never be requeued.

This commit is contained in:
Joseph Verburg 2015-04-08 16:36:07 +02:00
parent c7595c85f8
commit aa48e18639

View File

@ -487,6 +487,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success)
var errorTiles = []; var errorTiles = [];
var retryTiles = []; var retryTiles = [];
var timeoutTiles = []; var timeoutTiles = [];
var unaccountedTiles = tiles.slice(0); // Clone
if (!success || !data || !data.result) { if (!success || !data || !data.result) {
console.warn('Request.handleResponse: request failed - requeuing...'+(data && data.error?' error: '+data.error:'')); console.warn('Request.handleResponse: request failed - requeuing...'+(data && data.error?' error: '+data.error:''));
@ -513,7 +514,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success)
window.runHooks('requestFinished', {success: false}); window.runHooks('requestFinished', {success: false});
} }
unaccountedTiles = [];
} else { } else {
// TODO: use result.minLevelOfDetail ??? stock site doesn't use it yet... // TODO: use result.minLevelOfDetail ??? stock site doesn't use it yet...
@ -522,7 +523,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success)
for (var id in m) { for (var id in m) {
var val = m[id]; var val = m[id];
unaccountedTiles.splice(unaccountedTiles.indexOf(id), 1);
if ('error' in val) { if ('error' in val) {
// server returned an error for this individual data tile // server returned an error for this individual data tile
@ -571,6 +572,7 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success)
if (retryTiles.length) statusMsg += ', '+retryTiles.length+' retried'; if (retryTiles.length) statusMsg += ', '+retryTiles.length+' retried';
if (timeoutTiles.length) statusMsg += ', '+timeoutTiles.length+' timed out'; if (timeoutTiles.length) statusMsg += ', '+timeoutTiles.length+' timed out';
if (errorTiles.length) statusMsg += ', '+errorTiles.length+' failed'; if (errorTiles.length) statusMsg += ', '+errorTiles.length+' failed';
if (unaccountedTiles.length) statusMsg += ', '+unaccountedTiles.length+' unaccounted';
statusMsg += '. delay '+nextQueueDelay+' seconds'; statusMsg += '. delay '+nextQueueDelay+' seconds';
console.log (statusMsg); console.log (statusMsg);
@ -602,6 +604,14 @@ window.MapDataRequest.prototype.handleResponse = function (data, tiles, success)
} }
} }
if (unaccountedTiles.length > 0) {
for (var i in unaccountedTiles) {
var id = unaccountedTiles[i];
delete this.requestedTiles[id];
this.requeueTile(id, true);
}
}
for (var i in successTiles) { for (var i in successTiles) {
var id = successTiles[i]; var id = successTiles[i];
delete this.requestedTiles[id]; delete this.requestedTiles[id];