Changeset: bc93cebd6cd5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/bc93cebd6cd5 Modified Files: gdk/gdk_aggr.c gdk/gdk_batop.c gdk/gdk_calc_convert.c gdk/gdk_string.c Branch: Jun2023 Log Message:
Replace almost all CAND_LOOP calls to TIMEOUT_LOOP calls. This way, the calling functions also obey the timeout. diffs (truncated from 913 to 300 lines): diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -2008,6 +2008,12 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT BUN i; oid o; + lng timeoffset = 0; + QryCtx *qry_ctx = MT_thread_get_qry_ctx(); + if (qry_ctx != NULL) { + timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0; + } + if ((err = BATgroupaggrinit(b, g, e, s, &min, &max, &ngrp, &ci)) != NULL) { GDKerror("%s\n", err); return GDK_FAIL; @@ -2053,7 +2059,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT case TYPE_bte: { const bte *vals = (const bte *) bi.base; bte *avgs = Tloc(bn, 0); - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { o = canditer_next(&ci) - b->hseqbase; if (ngrp > 1) gid = gids ? gids[o] - min : o; @@ -2070,7 +2076,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT AVERAGE_ITER(bte, vals[o], avgs[gid], rems[gid], cnts[gid]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = bte_nil; bn->tnil = true; @@ -2101,7 +2107,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT case TYPE_sht: { const sht *vals = (const sht *) bi.base; sht *avgs = Tloc(bn, 0); - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { o = canditer_next(&ci) - b->hseqbase; if (ngrp > 1) gid = gids ? gids[o] - min : o; @@ -2118,7 +2124,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT AVERAGE_ITER(sht, vals[o], avgs[gid], rems[gid], cnts[gid]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = sht_nil; bn->tnil = true; @@ -2149,7 +2155,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT case TYPE_int: { const int *vals = (const int *) bi.base; int *avgs = Tloc(bn, 0); - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { o = canditer_next(&ci) - b->hseqbase; if (ngrp > 1) gid = gids ? gids[o] - min : o; @@ -2166,7 +2172,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT AVERAGE_ITER(int, vals[o], avgs[gid], rems[gid], cnts[gid]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = int_nil; bn->tnil = true; @@ -2197,7 +2203,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT case TYPE_lng: { const lng *vals = (const lng *) bi.base; lng *avgs = Tloc(bn, 0); - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { o = canditer_next(&ci) - b->hseqbase; if (ngrp > 1) gid = gids ? gids[o] - min : o; @@ -2214,7 +2220,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT AVERAGE_ITER(lng, vals[o], avgs[gid], rems[gid], cnts[gid]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = lng_nil; bn->tnil = true; @@ -2246,7 +2252,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT case TYPE_hge: { const hge *vals = (const hge *) bi.base; hge *avgs = Tloc(bn, 0); - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { o = canditer_next(&ci) - b->hseqbase; if (ngrp > 1) gid = gids ? gids[o] - min : o; @@ -2263,7 +2269,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT AVERAGE_ITER(hge, vals[o], avgs[gid], rems[gid], cnts[gid]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = hge_nil; bn->tnil = true; @@ -2294,6 +2300,7 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT #endif } bat_iterator_end(&bi); + TIMEOUT_CHECK(timeoffset, GOTO_LABEL_TIMEOUT_HANDLER(bailout)); BATsetcount(bn, ngrp); BATsetcount(rn, ngrp); BATsetcount(cn, ngrp); @@ -2307,6 +2314,12 @@ BATgroupavg3(BAT **avgp, BAT **remp, BAT *remp = rn; *cntp = cn; return GDK_SUCCEED; + + bailout: + BBPreclaim(bn); + BBPreclaim(rn); + BBPreclaim(cn); + return GDK_FAIL; } #ifdef HAVE_HGE @@ -2636,6 +2649,12 @@ BATgroupavg3combine(BAT *avg, BAT *rem, BUN i; BAT *bn, *rn, *cn; + lng timeoffset = 0; + QryCtx *qry_ctx = MT_thread_get_qry_ctx(); + if (qry_ctx != NULL) { + timeoffset = (qry_ctx->starttime && qry_ctx->querytimeout) ? (qry_ctx->starttime + qry_ctx->querytimeout) : 0; + } + if ((err = BATgroupaggrinit(avg, g, e, NULL, &min, &max, &ngrp, &ci)) != NULL) { GDKerror("%s\n", err); return NULL; @@ -2675,7 +2694,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, case TYPE_bte: { const bte *vals = (const bte *) bi.base; bte *avgs = Tloc(bn, 0); - CAND_LOOP_IDX(&ci, i) { + TIMEOUT_LOOP_IDX(i, ci.ncand, timeoffset) { if (ngrp > 1) gid = gids ? gids[i] - min : i; if (is_bte_nil(vals[i])) { @@ -2691,7 +2710,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, ocnts[i]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = bte_nil; bn->tnil = true; @@ -2716,7 +2735,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, case TYPE_sht: { const sht *vals = (const sht *) bi.base; sht *avgs = Tloc(bn, 0); - CAND_LOOP_IDX(&ci, i) { + TIMEOUT_LOOP_IDX(i, ci.ncand, timeoffset) { if (ngrp > 1) gid = gids ? gids[i] - min : i; if (is_sht_nil(vals[i])) { @@ -2732,7 +2751,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, ocnts[i]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = sht_nil; bn->tnil = true; @@ -2757,7 +2776,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, case TYPE_int: { const int *vals = (const int *) bi.base; int *avgs = Tloc(bn, 0); - CAND_LOOP_IDX(&ci, i) { + TIMEOUT_LOOP_IDX(i, ci.ncand, timeoffset) { if (ngrp > 1) gid = gids ? gids[i] - min : i; if (is_int_nil(vals[i])) { @@ -2773,7 +2792,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, ocnts[i]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = int_nil; bn->tnil = true; @@ -2798,7 +2817,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, case TYPE_lng: { const lng *vals = (const lng *) bi.base; lng *avgs = Tloc(bn, 0); - CAND_LOOP_IDX(&ci, i) { + TIMEOUT_LOOP_IDX(i, ci.ncand, timeoffset) { if (ngrp > 1) gid = gids ? gids[i] - min : i; if (is_lng_nil(vals[i])) { @@ -2814,7 +2833,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, ocnts[i]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = lng_nil; bn->tnil = true; @@ -2840,7 +2859,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, case TYPE_hge: { const hge *vals = (const hge *) bi.base; hge *avgs = Tloc(bn, 0); - CAND_LOOP_IDX(&ci, i) { + TIMEOUT_LOOP_IDX(i, ci.ncand, timeoffset) { if (ngrp > 1) gid = gids ? gids[i] - min : i; if (is_hge_nil(vals[i])) { @@ -2856,7 +2875,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, ocnts[i]); } } - for (i = 0; i < ngrp; i++) { + TIMEOUT_LOOP_IDX(i, ngrp, timeoffset) { if (cnts[i] == 0) { avgs[i] = hge_nil; bn->tnil = true; @@ -2883,12 +2902,17 @@ BATgroupavg3combine(BAT *avg, BAT *rem, bat_iterator_end(&bi); BBPreclaim(rn); BBPreclaim(cn); + TIMEOUT_CHECK(timeoffset, GOTO_LABEL_TIMEOUT_HANDLER(bailout)); BATsetcount(bn, ngrp); bn->tnonil = !bn->tnil; bn->tkey = ngrp == 1; bn->tsorted = ngrp == 1; bn->trevsorted = ngrp == 1; return bn; + + bailout: + BBPreclaim(bn); + return NULL; } #define AVERAGE_TYPE_LNG_HGE(TYPE,lng_hge) \ @@ -2909,8 +2933,6 @@ BATgroupavg3combine(BAT *avg, BAT *rem, /* don't count value until after overflow check */ \ n++; \ } \ - TIMEOUT_CHECK(timeoffset, \ - GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \ /* the sum fit, so now we can calculate the average */ \ *avg = n > 0 ? (dbl) sum / n : dbl_nil; \ if (0) { \ @@ -2936,7 +2958,7 @@ BATgroupavg3combine(BAT *avg, BAT *rem, r = n - r; \ } \ } \ - CAND_LOOP(&ci) { \ + TIMEOUT_LOOP(ci.ncand, timeoffset) { \ /* loop invariant: */ \ /* a + r/n == average(x[0],...,x[n]); */ \ /* 0 <= r < n */ \ @@ -2948,6 +2970,8 @@ BATgroupavg3combine(BAT *avg, BAT *rem, } \ *avg = a + (dbl) r / n; \ } \ + TIMEOUT_CHECK(timeoffset, \ + GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \ } while (0) #ifdef HAVE_HGE @@ -3055,8 +3079,6 @@ bailout: } \ } \ } \ - TIMEOUT_CHECK(timeoffset, \ - GOTO_LABEL_TIMEOUT_HANDLER(bailout)); \ } while (0) /* calculate group counts with optional candidates list */ @@ -3119,13 +3141,13 @@ BATgroupcount(BAT *b, BAT *g, BAT *e, BA /* if nils are nothing special, or if there are no * nils, we don't need to look at the values at all */ if (gids) { - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { i = canditer_next(&ci) - b->hseqbase; if (gids[i] >= min && gids[i] <= max) cnts[gids[i] - min]++; } } else { - CAND_LOOP(&ci) { + TIMEOUT_LOOP(ci.ncand, timeoffset) { i = canditer_next(&ci) - b->hseqbase; cnts[i] = 1; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org