---------

**Commit 1:**
[es/versionCheck] prevent spamming logs with compatibility warnings

* Original sha: bb95cf874c
* Authored by spalger <email@spalger.com> on 2016-10-27T20:48:36Z

**Commit 2:**
[es/versionCheck] clarify new var and reason for check

* Original sha: cda9594859
* Authored by spalger <email@spalger.com> on 2016-10-27T22:36:43Z

**Commit 3:**
[es/versionCheck] explain why we need to track per-server

* Original sha: 5eb9ccdc41
* Authored by spalger <email@spalger.com> on 2016-10-27T23:30:41Z
This commit is contained in:
jasper 2016-10-28 12:58:43 -04:00 committed by Spencer
parent f2e3528498
commit 236557b349
2 changed files with 61 additions and 11 deletions

View file

@ -17,7 +17,7 @@ describe('plugins/elasticsearch', () => {
beforeEach(function () {
server = {
log: _.noop,
log: sinon.stub(),
// This is required or else we get a SetupError.
config: () => ({
get: sinon.stub(),
@ -95,5 +95,41 @@ describe('plugins/elasticsearch', () => {
expect(e).to.be.a(SetupError);
}
});
it('warns if a node is only off by a patch version', async () => {
setNodes('5.1.1');
await checkEsVersion(server, KIBANA_VERSION);
sinon.assert.callCount(server.log, 2);
expect(server.log.getCall(0).args[0]).to.contain('debug');
expect(server.log.getCall(1).args[0]).to.contain('warning');
});
it('only warns once per node list', async () => {
setNodes('5.1.1');
await checkEsVersion(server, KIBANA_VERSION);
sinon.assert.callCount(server.log, 2);
expect(server.log.getCall(0).args[0]).to.contain('debug');
expect(server.log.getCall(1).args[0]).to.contain('warning');
await checkEsVersion(server, KIBANA_VERSION);
sinon.assert.callCount(server.log, 3);
expect(server.log.getCall(2).args[0]).to.contain('debug');
});
it('warns again if the node list changes', async () => {
setNodes('5.1.1');
await checkEsVersion(server, KIBANA_VERSION);
sinon.assert.callCount(server.log, 2);
expect(server.log.getCall(0).args[0]).to.contain('debug');
expect(server.log.getCall(1).args[0]).to.contain('warning');
setNodes('5.1.2');
await checkEsVersion(server, KIBANA_VERSION);
sinon.assert.callCount(server.log, 4);
expect(server.log.getCall(2).args[0]).to.contain('debug');
expect(server.log.getCall(3).args[0]).to.contain('warning');
});
});
});

View file

@ -9,6 +9,16 @@ import semver from 'semver';
import isEsCompatibleWithKibana from './is_es_compatible_with_kibana';
import SetupError from './setup_error';
/**
* tracks the node descriptions that get logged in warnings so
* that we don't spam the log with the same message over and over.
*
* There are situations, like in testing or multi-tenancy, where
* the server argument changes, so we must track the previous
* node warnings per server
*/
const lastWarnedNodesForServer = new WeakMap();
module.exports = function checkEsVersion(server, kibanaVersion) {
server.log(['plugin', 'debug'], 'Checking Elasticsearch version');
@ -50,16 +60,20 @@ module.exports = function checkEsVersion(server, kibanaVersion) {
ip: node.ip,
}));
server.log(['warning'], {
tmpl: (
'You\'re running Kibana <%= kibanaVersion %> with some newer versions of ' +
'Elasticsearch. Update Kibana to the latest version to prevent compatibility issues: ' +
'<%= getHumanizedNodeNames(nodes).join(", ") %>'
),
kibanaVersion,
getHumanizedNodeNames,
nodes: simplifiedNodes,
});
// Don't show the same warning over and over again.
const warningNodeNames = getHumanizedNodeNames(simplifiedNodes).join(', ');
if (lastWarnedNodesForServer.get(server) !== warningNodeNames) {
lastWarnedNodesForServer.set(server, warningNodeNames);
server.log(['warning'], {
tmpl: (
`You're running Kibana ${kibanaVersion} with some newer versions of ` +
'Elasticsearch. Update Kibana to the latest version to prevent compatibility issues: ' +
warningNodeNames
),
kibanaVersion,
nodes: simplifiedNodes,
});
}
}
if (incompatibleNodes.length) {