Merge pull request #5612 from spalger/backport/5460/4.2

Backport/5460/4.2
This commit is contained in:
Court Ewing 2015-12-09 12:50:30 -05:00
commit 125e4d5f19
3 changed files with 54 additions and 4 deletions

View file

@ -0,0 +1,33 @@
import ngMock from 'ngMock';
import expect from 'expect.js';
import sinon from 'auto-release-sinon';
describe('IndexPatterns service', function () {
let indexPatterns;
beforeEach(ngMock.module('kibana'));
beforeEach(ngMock.inject(function (Private) {
const IndexPattern = Private(require('../_index_pattern'));
indexPatterns = Private(require('../index_patterns'));
// prevent IndexPattern initialization from doing anything
Private.stub(
require('../_index_pattern'),
function (...args) {
const indexPattern = new IndexPattern(...args);
sinon.stub(indexPattern, 'init', function () {
return new Promise();
});
return indexPattern;
}
);
}));
it('does not cache gets without an id', function () {
expect(indexPatterns.get()).to.not.be(indexPatterns.get());
});
it('does cache gets for the same id', function () {
expect(indexPatterns.get(1)).to.be(indexPatterns.get(1));
});
});

View file

@ -15,6 +15,7 @@ define(function (require) {
var flattenHit = Private(require('ui/index_patterns/_flatten_hit'));
var formatHit = require('ui/index_patterns/_format_hit');
var patternCache = Private(require('ui/index_patterns/_pattern_cache'));
var type = 'index-pattern';
@ -218,7 +219,14 @@ define(function (require) {
return safeConfirm(confirmMessage).then(
function () {
return docSource.doIndex(body).then(setId);
return Promise.try(function () {
const cached = patternCache.get(self.id);
if (cached) {
return cached.then(pattern => pattern.destroy());
}
})
.then(() => docSource.doIndex(body))
.then(setId);
},
_.constant(false) // if the user doesn't overwrite, resolve with false
);
@ -257,6 +265,11 @@ define(function (require) {
return '' + self.toJSON();
};
self.destroy = function () {
patternCache.clear(self.id);
docSource.destroy();
};
self.metaFields = config.get('metaFields');
self.getComputedFields = getComputedFields.bind(self);

View file

@ -2,7 +2,7 @@ define(function (require) {
var module = require('ui/modules').get('kibana/index_patterns');
require('ui/filters/short_dots');
module.service('indexPatterns', function (es, Notifier, Private, Promise, kbnIndex) {
function IndexPatternsProvider(es, Notifier, Private, Promise, kbnIndex) {
var self = this;
var _ = require('lodash');
var errors = require('ui/errors');
@ -25,7 +25,8 @@ define(function (require) {
self.delete = function (pattern) {
self.getIds.clearCache();
patternCache.delete(pattern.id);
pattern.destroy();
return es.delete({
index: kbnIndex,
type: 'index-pattern',
@ -44,5 +45,8 @@ define(function (require) {
self.patternToWildcard = Private(require('ui/index_patterns/_pattern_to_wildcard'));
self.fieldFormats = Private(require('ui/registry/field_formats'));
self.IndexPattern = IndexPattern;
});
}
module.service('indexPatterns', Private => Private(IndexPatternsProvider));
return IndexPatternsProvider;
});