mirror of
https://github.com/nasa/openmct.git
synced 2025-02-21 09:52:04 +00:00
[Search] Don't block UI between requests
Timeout subsequent calls to keepIndexing at the end of a indexRequest, so that UI operations are not blocked.
This commit is contained in:
parent
9a63e99710
commit
833f57e284
@ -19,7 +19,7 @@
|
|||||||
* this source code distribution or the Licensing information page available
|
* this source code distribution or the Licensing information page available
|
||||||
* at runtime from the About dialog for additional information.
|
* at runtime from the About dialog for additional information.
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
/*global define*/
|
/*global define,setTimeout*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Module defining GenericSearchProvider. Created by shale on 07/16/2015.
|
* Module defining GenericSearchProvider. Created by shale on 07/16/2015.
|
||||||
@ -62,6 +62,8 @@ define([
|
|||||||
ROOTS.forEach(function indexRoot(rootId) {
|
ROOTS.forEach(function indexRoot(rootId) {
|
||||||
provider.scheduleForIndexing(rootId);
|
provider.scheduleForIndexing(rootId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -148,8 +150,10 @@ define([
|
|||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
GenericSearchProvider.prototype.keepIndexing = function () {
|
GenericSearchProvider.prototype.keepIndexing = function () {
|
||||||
if (this.pendingRequests < this.MAX_CONCURRENT_REQUESTS) {
|
while (this.pendingRequests < this.MAX_CONCURRENT_REQUESTS &&
|
||||||
this.beginIndexRequest();
|
this.idsToIndex.length
|
||||||
|
) {
|
||||||
|
this.beginIndexRequest();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -188,10 +192,6 @@ define([
|
|||||||
var idToIndex = this.idsToIndex.shift(),
|
var idToIndex = this.idsToIndex.shift(),
|
||||||
provider = this;
|
provider = this;
|
||||||
|
|
||||||
if (!idToIndex) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.pendingRequests += 1;
|
this.pendingRequests += 1;
|
||||||
this.modelService
|
this.modelService
|
||||||
.getModels([idToIndex])
|
.getModels([idToIndex])
|
||||||
@ -206,8 +206,10 @@ define([
|
|||||||
.warn('Failed to index domain object ' + idToIndex);
|
.warn('Failed to index domain object ' + idToIndex);
|
||||||
})
|
})
|
||||||
.then(function () {
|
.then(function () {
|
||||||
provider.pendingRequests -= 1;
|
setTimeout(function () {
|
||||||
provider.keepIndexing();
|
provider.pendingRequests -= 1;
|
||||||
|
provider.keepIndexing();
|
||||||
|
}, 0);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -235,7 +237,6 @@ define([
|
|||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
pendingQuery.resolve(modelResults);
|
pendingQuery.resolve(modelResults);
|
||||||
delete this.pendingQueries[event.data.queryId];
|
delete this.pendingQueries[event.data.queryId];
|
||||||
};
|
};
|
||||||
|
@ -143,17 +143,38 @@ define([
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('keepIndexing', function () {
|
describe('keepIndexing', function () {
|
||||||
it('kicks off an index request when not at maximum', function () {
|
it('calls beginIndexRequest until at maximum', function () {
|
||||||
spyOn(provider, 'beginIndexRequest');
|
spyOn(provider, 'beginIndexRequest').andCallThrough();
|
||||||
provider.pendingRequests = 0;
|
provider.pendingRequests = 9;
|
||||||
|
provider.idsToIndex = ['a', 'b', 'c'];
|
||||||
provider.MAX_CONCURRENT_REQUESTS = 10;
|
provider.MAX_CONCURRENT_REQUESTS = 10;
|
||||||
provider.keepIndexing();
|
provider.keepIndexing();
|
||||||
expect(provider.beginIndexRequest).toHaveBeenCalled();
|
expect(provider.beginIndexRequest).toHaveBeenCalled();
|
||||||
|
expect(provider.beginIndexRequest.calls.length).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('calls beginIndexRequest for all ids to index', function () {
|
||||||
|
spyOn(provider, 'beginIndexRequest').andCallThrough();
|
||||||
|
provider.pendingRequests = 0;
|
||||||
|
provider.idsToIndex = ['a', 'b', 'c'];
|
||||||
|
provider.MAX_CONCURRENT_REQUESTS = 10;
|
||||||
|
provider.keepIndexing();
|
||||||
|
expect(provider.beginIndexRequest).toHaveBeenCalled();
|
||||||
|
expect(provider.beginIndexRequest.calls.length).toBe(3);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not index when at capacity', function () {
|
it('does not index when at capacity', function () {
|
||||||
spyOn(provider, 'beginIndexRequest');
|
spyOn(provider, 'beginIndexRequest');
|
||||||
provider.pendingRequests = 10;
|
provider.pendingRequests = 10;
|
||||||
|
provider.idsToIndex.push('a');
|
||||||
|
provider.MAX_CONCURRENT_REQUESTS = 10;
|
||||||
|
provider.keepIndexing();
|
||||||
|
expect(provider.beginIndexRequest).not.toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not index when no ids to index', function () {
|
||||||
|
spyOn(provider, 'beginIndexRequest');
|
||||||
|
provider.pendingRequests = 0;
|
||||||
provider.MAX_CONCURRENT_REQUESTS = 10;
|
provider.MAX_CONCURRENT_REQUESTS = 10;
|
||||||
provider.keepIndexing();
|
provider.keepIndexing();
|
||||||
expect(provider.beginIndexRequest).not.toHaveBeenCalled();
|
expect(provider.beginIndexRequest).not.toHaveBeenCalled();
|
||||||
@ -222,12 +243,6 @@ define([
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not error if no objects queued', function () {
|
|
||||||
provider.idsToIndex = [];
|
|
||||||
expect(function () {
|
|
||||||
provider.beginIndexRequest();
|
|
||||||
}).not.toThrow();
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user