From d0332e283599d3793f19e0942375658f042020f7 Mon Sep 17 00:00:00 2001 From: Sven Nierlein Date: Wed, 20 Sep 2023 15:06:58 +0200 Subject: [PATCH] only check every 10.000 row if the query has been canceled checking the channel did take too much time --- lmd/response.go | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/lmd/response.go b/lmd/response.go index 297b794..a0cb90d 100644 --- a/lmd/response.go +++ b/lmd/response.go @@ -19,6 +19,9 @@ import ( const ( // SpinUpPeersTimeout sets timeout to wait for peers after spin up SpinUpPeersTimeout = 5 * time.Second + + // Number of processes rows after which the context is checked again + RowContextCheck = 10000 ) // Response contains the livestatus response data as long with some meta data @@ -865,12 +868,15 @@ func (res *Response) gatherResultRows(ctx context.Context, store *DataStore, res done := ctx.Done() Rows: - for _, row := range store.GetPreFilteredData(req.Filter) { - select { - case <-done: - // request canceled - return - default: + for i, row := range store.GetPreFilteredData(req.Filter) { + // only check every couple of rows + if i%RowContextCheck == 0 { + select { + case <-done: + // request canceled + return + default: + } } result.RowsScanned++ @@ -907,12 +913,15 @@ func (res *Response) gatherStatsResult(ctx context.Context, store *DataStore) *R done := ctx.Done() Rows: - for _, row := range store.GetPreFilteredData(req.Filter) { - select { - case <-done: - // request canceled - return nil - default: + for i, row := range store.GetPreFilteredData(req.Filter) { + // only check every couple of rows + if i%RowContextCheck == 0 { + select { + case <-done: + // request canceled + return nil + default: + } } result.RowsScanned++ // does our filter match?