mirror of https://github.com/grafana/grafana.git
Prevent crash while executing concurrent mixed queries (#874)
limit parallel query execution to 1 at a time
This commit is contained in:
parent
f4c04d4055
commit
f1178e0b81
|
|
@ -101,7 +101,10 @@ func (s *ServiceImpl) QueryData(ctx context.Context, user *user.SignedInUser, sk
|
||||||
// executeConcurrentQueries executes queries to multiple datasources concurrently and returns the aggregate result.
|
// executeConcurrentQueries executes queries to multiple datasources concurrently and returns the aggregate result.
|
||||||
func (s *ServiceImpl) executeConcurrentQueries(ctx context.Context, user *user.SignedInUser, skipDSCache bool, reqDTO dtos.MetricRequest, queriesbyDs map[string][]parsedQuery) (*backend.QueryDataResponse, error) {
|
func (s *ServiceImpl) executeConcurrentQueries(ctx context.Context, user *user.SignedInUser, skipDSCache bool, reqDTO dtos.MetricRequest, queriesbyDs map[string][]parsedQuery) (*backend.QueryDataResponse, error) {
|
||||||
g, ctx := errgroup.WithContext(ctx)
|
g, ctx := errgroup.WithContext(ctx)
|
||||||
g.SetLimit(8) // arbitrary limit to prevent too many concurrent requests
|
// TODO: Temporarily limiting concurrency here to 1 to avoid concurrent map writes in the plugin middleware that crash the app
|
||||||
|
// This is a workaround to mitigate the security issue. We will implement a more thread-safe way of handling concurrent queries as a next step.
|
||||||
|
g.SetLimit(1)
|
||||||
|
// g.SetLimit(8) // arbitrary limit to prevent too many concurrent requests
|
||||||
rchan := make(chan backend.Responses, len(queriesbyDs))
|
rchan := make(chan backend.Responses, len(queriesbyDs))
|
||||||
|
|
||||||
// Create panic recovery function for loop below
|
// Create panic recovery function for loop below
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue