OSDN Git Service

Allow hash joins to be interrupted while searching hash table for match.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Jun 2011 21:01:59 +0000 (17:01 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 1 Jun 2011 21:01:59 +0000 (17:01 -0400)
Per experimentation with a recent example, in which unreasonable amounts
of time could elapse before the backend would respond to a query-cancel.

This might be something to back-patch, but the patch doesn't apply cleanly
because this code was rewritten for 9.1.  Given the lack of field
complaints I won't bother for now.

Cédric Villemain

src/backend/executor/nodeHashjoin.c

index 26da3b2..0e7ca62 100644 (file)
@@ -19,6 +19,7 @@
 #include "executor/hashjoin.h"
 #include "executor/nodeHash.h"
 #include "executor/nodeHashjoin.h"
+#include "miscadmin.h"
 #include "utils/memutils.h"
 
 
@@ -263,6 +264,13 @@ ExecHashJoin(HashJoinState *node)
                        case HJ_SCAN_BUCKET:
 
                                /*
+                                * We check for interrupts here because this corresponds to
+                                * where we'd fetch a row from a child plan node in other
+                                * join types.
+                                */
+                               CHECK_FOR_INTERRUPTS();
+
+                               /*
                                 * Scan the selected hash bucket for matches to current outer
                                 */
                                if (!ExecScanHashBucket(node, econtext))