Skip to content
This repository has been archived by the owner on Mar 31, 2024. It is now read-only.

Commit

Permalink
[courier/fetch] decouple client & dataSource from fetch
Browse files Browse the repository at this point in the history
Currently the courier only fetches requests that wrap a dataSource object and use the es client. In order to support requests from more generic sources we need to break these pieces up.

With this change the courier request objects no longer wrap a dataSource.

To prevent changing too much existing behavior the AbstractRequest class was broken up into the DataSourceRequest and AbstractRequest classes. Any logic that depended on DataSource objects was split into the DataSourceRequest and the AbstractRequest now just manages the state and timing information for requests.

To allow for creating more diverse request types, the doc and search types were renamed to EsDocRequest and EsSearchRequest.

The strategies were also made more generic (they only need a single #execute() method now) and were similarly renamed to EsDocStrategy and EsSearchStrategy. Both of these strategies inherit from the EsAbstractStrategy class which implements their execute method and uses the subclasses to get #reqsFetchParamsToBody() and #getResponses() methods.
  • Loading branch information
spalger committed Feb 24, 2016
1 parent 5dd2452 commit a4abbe7
Show file tree
Hide file tree
Showing 28 changed files with 617 additions and 397 deletions.
6 changes: 3 additions & 3 deletions src/ui/public/courier/courier.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import Notifier from 'ui/notify/notifier';

import DocSourceProvider from './data_source/doc_source';
import SearchSourceProvider from './data_source/search_source';
import SearchStrategyProvider from './fetch/strategy/search';
import EsSearchStrategyProvider from './fetch_types/es_search_strategy';
import RequestQueueProvider from './_request_queue';
import ErrorHandlersProvider from './_error_handlers';
import FetchProvider from './fetch';
Expand All @@ -28,7 +28,7 @@ uiModules.get('kibana/courier')

var DocSource = Private(DocSourceProvider);
var SearchSource = Private(SearchSourceProvider);
var searchStrategy = Private(SearchStrategyProvider);
var esSearchStrategy = Private(EsSearchStrategyProvider);

var requestQueue = Private(RequestQueueProvider);
var errorHandlers = Private(ErrorHandlersProvider);
Expand Down Expand Up @@ -75,7 +75,7 @@ uiModules.get('kibana/courier')
* individual errors are routed to their respective requests.
*/
self.fetch = function () {
fetch.fetchQueued(searchStrategy).then(function () {
fetch.fetchQueued(esSearchStrategy).then(function () {
searchLooper.restart();
});
};
Expand Down
12 changes: 6 additions & 6 deletions src/ui/public/courier/data_source/doc_source.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@ import 'ui/storage';

import DocSendToEsProvider from './_doc_send_to_es';
import AbstractDataSourceProvider from './_abstract';
import DocRequestProvider from '../fetch/request/doc';
import DocStrategyProvider from '../fetch/strategy/doc';
import EsDocRequestProvider from '../fetch_types/es_doc_request';
import EsDocStrategyProvider from '../fetch_types/es_doc_strategy';

export default function DocSourceFactory(Private, Promise, es, sessionStorage) {
var sendToEs = Private(DocSendToEsProvider);
var SourceAbstract = Private(AbstractDataSourceProvider);
var DocRequest = Private(DocRequestProvider);
var docStrategy = Private(DocStrategyProvider);
var EsDocRequest = Private(EsDocRequestProvider);
var esDocStrategy = Private(EsDocStrategyProvider);

_.class(DocSource).inherits(SourceAbstract);
function DocSource(initialState) {
DocSource.Super.call(this, initialState, docStrategy);
DocSource.Super.call(this, initialState, esDocStrategy);
}

DocSource.prototype.onUpdate = SourceAbstract.prototype.onResults;
Expand All @@ -27,7 +27,7 @@ export default function DocSourceFactory(Private, Promise, es, sessionStorage) {
*****/

DocSource.prototype._createRequest = function (defer) {
return new DocRequest(this, defer);
return new EsDocRequest(this, defer);
};

/**
Expand Down
16 changes: 8 additions & 8 deletions src/ui/public/courier/data_source/search_source.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
import _ from 'lodash';

import NormalizeSortRequestProvider from './_normalize_sort_request';
import rootSearchSource from './_root_search_source';
import AbstractDataSourceProvider from './_abstract';
import SearchRequestProvider from '../fetch/request/search';
import SegmentedRequestProvider from '../fetch/request/segmented';
import SearchStrategyProvider from '../fetch/strategy/search';
import EsSearchRequestProvider from '../fetch_types/es_search_request';
import EsSegmentedRequestProvider from '../fetch_types/es_segmented_request';
import EsSearchStrategyProvider from '../fetch_types/es_search_strategy';
import NormalizeSortRequestProvider from './_normalize_sort_request';

export default function SearchSourceFactory(Promise, Private) {
var SourceAbstract = Private(AbstractDataSourceProvider);
var SearchRequest = Private(SearchRequestProvider);
var SegmentedRequest = Private(SegmentedRequestProvider);
var searchStrategy = Private(SearchStrategyProvider);
var SearchRequest = Private(EsSearchRequestProvider);
var SegmentedRequest = Private(EsSegmentedRequestProvider);
var esSearchStrategy = Private(EsSearchStrategyProvider);
var normalizeSortRequest = Private(NormalizeSortRequestProvider);

_.class(SearchSource).inherits(SourceAbstract);
function SearchSource(initialState) {
SearchSource.Super.call(this, initialState, searchStrategy);
SearchSource.Super.call(this, initialState, esSearchStrategy);
}

/*****
Expand Down
125 changes: 0 additions & 125 deletions src/ui/public/courier/fetch/call_client.js

This file was deleted.

18 changes: 4 additions & 14 deletions src/ui/public/courier/fetch/call_response_handlers.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { RequestFailure, SearchTimeout, ShardFailure } from 'ui/errors';
import { RequestFailure } from 'ui/errors';

import 'ui/promises';

import ReqStatusProvider from './req_status';
import NotifierProvider from './notifier';
Expand All @@ -15,15 +17,7 @@ export default function CourierFetchCallResponseHandlers(Private, Promise) {
return ABORTED;
}

let resp = responses[i];

if (resp.timed_out) {
notify.warning(new SearchTimeout());
}

if (resp._shards && resp._shards.failed) {
notify.warning(new ShardFailure(resp));
}
const resp = responses[i];

function progress() {
if (req.isIncomplete()) {
Expand All @@ -43,10 +37,6 @@ export default function CourierFetchCallResponseHandlers(Private, Promise) {
}

return Promise.try(function () {
return req.transformResponse(resp);
})
.then(function () {
resp = arguments[0];
return req.handleResponse(resp);
})
.then(progress);
Expand Down
4 changes: 1 addition & 3 deletions src/ui/public/courier/fetch/fetch_these.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import NotifierProvider from './notifier';
import ForEachStrategyProvider from './for_each_strategy';
import CallClientProvider from './call_client';
import CallResponseHandlersProvider from './call_response_handlers';
import ContinueIncompleteProvider from './continue_incomplete';
import ReqStatusProvider from './req_status';
Expand All @@ -10,7 +9,6 @@ export default function FetchTheseProvider(Private, Promise) {
const forEachStrategy = Private(ForEachStrategyProvider);

// core tasks
const callClient = Private(CallClientProvider);
const callResponseHandlers = Private(CallResponseHandlersProvider);
const continueIncomplete = Private(ContinueIncompleteProvider);

Expand All @@ -36,7 +34,7 @@ export default function FetchTheseProvider(Private, Promise) {

return startRequests(requests)
.then(function () {
return callClient(strategy, requests);
return strategy.execute(requests);
})
.then(function (responses) {
return callResponseHandlers(requests, responses);
Expand Down
2 changes: 1 addition & 1 deletion src/ui/public/courier/fetch/is_request.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import AbstractRequestProvider from './request';
import AbstractRequestProvider from '../fetch_types/abstract_request';

export default function IsRequestProvider(Private) {
const AbstractRequest = Private(AbstractRequestProvider);
Expand Down
29 changes: 0 additions & 29 deletions src/ui/public/courier/fetch/merge_duplicate_requests.js

This file was deleted.

29 changes: 0 additions & 29 deletions src/ui/public/courier/fetch/request/error_handler.js

This file was deleted.

Loading

0 comments on commit a4abbe7

Please sign in to comment.