mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Search: fix cache in the frontend search engine (#55681)
This commit is contained in:
parent
2fadeeff4c
commit
af9e58eeeb
@ -4,7 +4,7 @@ import { TermCount } from 'app/core/components/TagFilter/TagFilter';
|
|||||||
import { DashboardQueryResult, GrafanaSearcher, QueryResponse, SearchQuery } from '.';
|
import { DashboardQueryResult, GrafanaSearcher, QueryResponse, SearchQuery } from '.';
|
||||||
|
|
||||||
export class FrontendSearcher implements GrafanaSearcher {
|
export class FrontendSearcher implements GrafanaSearcher {
|
||||||
readonly cache = new Map<string, FullResultCache>();
|
readonly cache = new Map<string, Promise<FullResultCache>>();
|
||||||
|
|
||||||
constructor(private parent: GrafanaSearcher) {}
|
constructor(private parent: GrafanaSearcher) {}
|
||||||
|
|
||||||
@ -29,20 +29,28 @@ export class FrontendSearcher implements GrafanaSearcher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async getCache(kind?: string[]): Promise<FullResultCache> {
|
async getCache(kind?: string[]): Promise<FullResultCache> {
|
||||||
const key = kind ? kind.join(',') : '*';
|
const key = kind ? kind.sort().join(',') : '*';
|
||||||
let res = this.cache.get(key);
|
|
||||||
if (res) {
|
const cacheHit = this.cache.get(key);
|
||||||
return Promise.resolve(res);
|
if (cacheHit) {
|
||||||
|
try {
|
||||||
|
return await cacheHit;
|
||||||
|
} catch (e) {
|
||||||
|
// delete the cache key so that the next request will retry
|
||||||
|
this.cache.delete(key);
|
||||||
|
return new FullResultCache(new DataFrameView({ name: 'error', fields: [], length: 0 }));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const v = await this.parent.search({
|
const resultPromise = this.parent
|
||||||
|
.search({
|
||||||
kind, // match the request
|
kind, // match the request
|
||||||
limit: 5000, // max for now
|
limit: 5000, // max for now
|
||||||
});
|
})
|
||||||
|
.then((res) => new FullResultCache(res.view));
|
||||||
|
|
||||||
res = new FullResultCache(v.view);
|
this.cache.set(key, resultPromise);
|
||||||
this.cache.set(key, res);
|
return resultPromise;
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async starred(query: SearchQuery): Promise<QueryResponse> {
|
async starred(query: SearchQuery): Promise<QueryResponse> {
|
||||||
|
Loading…
Reference in New Issue
Block a user