- connection's ping method now accepts requestTimeout, path, and method params like all the grown-up API calls - ConnectionPool now managed connection timeouts. When a connection dies a timeout object is created to track when the timeout is scheduled and the function to call when it does. It also tracks how many times it has run to allow the timeout to grow - Timeouts now grow with use of `config.calcDeadTimeout` which is set to 'exponential' by default, but can also be set to flat in order to always use the standard deadTimeout. Exponential growth of the deadTimeout is stopped at config.maxDeadTimeout which is set to 30 minutes by default. - Connections no longer have a resuscitate method (too hard to spell). Now the method is created dynamically as a part of the timeout object as it just calls the connection's ping method and needed to access variables like revive attempts. - Timeouts were moved to the transport layer, meaning that you need to capture the abort method and abort the request yourself if you are handling connections directly, ConnectionsAbstract's ping method does this.
84 lines
1.8 KiB
JavaScript
84 lines
1.8 KiB
JavaScript
if (process.browser) {
|
|
/* jshint browser: true */
|
|
var es = window.elasticsearch;
|
|
} else {
|
|
var es = require('../../../src/elasticsearch');
|
|
}
|
|
var argv = require('./argv');
|
|
var server = require('./server');
|
|
// var path = require('path');
|
|
// var fs = require('fs');
|
|
var _ = require('../../../src/lib/utils');
|
|
|
|
// current client
|
|
var client = null;
|
|
|
|
// when set to a boolean, hold the test of a ping
|
|
var externalExists;
|
|
|
|
// a reference to a personal instance of ES Server
|
|
var esServer = null;
|
|
|
|
module.exports = {
|
|
create: function create(cb) {
|
|
if (argv.createServer || externalExists === false) {
|
|
if (!esServer) {
|
|
server.start(function (err, _server) {
|
|
esServer = _server;
|
|
if (err) {
|
|
done(err);
|
|
} else {
|
|
doCreateClient(done);
|
|
}
|
|
});
|
|
} else {
|
|
doCreateClient(done);
|
|
}
|
|
} else if (externalExists === void 0) {
|
|
doCreateClient(function () {
|
|
client.ping({
|
|
requestTimeout: 1000
|
|
}, function (err) {
|
|
if (err instanceof es.errors.ConnectionFault) {
|
|
externalExists = false;
|
|
create(done);
|
|
} else {
|
|
done(err);
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
doCreateClient(done);
|
|
}
|
|
|
|
function done(err) {
|
|
cb(err, client);
|
|
}
|
|
|
|
function doCreateClient(cb) {
|
|
// close existing client
|
|
if (client) {
|
|
client.close();
|
|
}
|
|
|
|
client = new es.Client({
|
|
hosts: [
|
|
{
|
|
host: esServer ? esServer.__hostname : argv.host,
|
|
port: esServer ? esServer.__port : argv.port
|
|
}
|
|
],
|
|
log: {
|
|
type: process.browser ? 'console' : 'stdio',
|
|
level: process.env.VERBOSE ? 'trace' : 'warning'
|
|
}
|
|
});
|
|
|
|
_.nextTick(cb);
|
|
}
|
|
},
|
|
get: function () {
|
|
return client;
|
|
}
|
|
};
|