mirror of
https://github.com/grafana/grafana.git
synced 2024-11-26 02:40:26 -06:00
SQL Datasources: Prevent Call Stack Overflows with Large Numbers of Values for Variable (#64937)
* Push values with every map call to avoid hitting the maximum call stack size. * Add test and refactor to for of * Use native fill instead of lodash --------- Co-authored-by: Zoltán Bedi <zoltan.bedi@gmail.com>
This commit is contained in:
parent
5435ae25f7
commit
bf687fff45
23
public/app/features/plugins/sql/ResponseParser.test.ts
Normal file
23
public/app/features/plugins/sql/ResponseParser.test.ts
Normal file
@ -0,0 +1,23 @@
|
||||
import { DataFrameDTO, FieldType, MutableDataFrame } from '@grafana/data';
|
||||
|
||||
import { ResponseParser } from './ResponseParser';
|
||||
|
||||
describe('transformMetricFindResponse function', () => {
|
||||
it('should handle big arrays', () => {
|
||||
const responseParser = new ResponseParser();
|
||||
const stringValues = new Array(150_000).fill('a');
|
||||
const numberValues = new Array(150_000).fill(1);
|
||||
|
||||
const frame: DataFrameDTO = {
|
||||
fields: [
|
||||
{ name: 'name', type: FieldType.string, values: stringValues },
|
||||
{ name: 'value', type: FieldType.number, values: numberValues },
|
||||
],
|
||||
};
|
||||
|
||||
const dataFrame = new MutableDataFrame(frame);
|
||||
const result = responseParser.transformMetricFindResponse(dataFrame);
|
||||
|
||||
expect(result).toHaveLength(2);
|
||||
});
|
||||
});
|
@ -14,13 +14,11 @@ export class ResponseParser implements ResponseParserType {
|
||||
values.push({ text: '' + textField.values.get(i), value: '' + valueField.values.get(i) });
|
||||
}
|
||||
} else {
|
||||
values.push(
|
||||
...frame.fields
|
||||
.flatMap((f) => f.values.toArray())
|
||||
.map((v) => ({
|
||||
text: v,
|
||||
}))
|
||||
);
|
||||
for (const field of frame.fields) {
|
||||
for (const value of field.values.toArray()) {
|
||||
values.push({ text: value });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return uniqBy(values, 'text');
|
||||
|
Loading…
Reference in New Issue
Block a user