Re: Refactoring postgres_fdw/connection.c - Mailing list pgsql-hackers
From | Fujii Masao |
---|---|
Subject | Re: Refactoring postgres_fdw/connection.c |
Date | |
Msg-id | b897813a-1db7-4602-855c-2c0333e8a0b6@oss.nttdata.com Whole thread Raw |
In response to | Re: Refactoring postgres_fdw/connection.c (Etsuro Fujita <etsuro.fujita@gmail.com>) |
Responses |
Re: Refactoring postgres_fdw/connection.c
|
List | pgsql-hackers |
On 2022/09/05 15:17, Etsuro Fujita wrote: > +1 for that refactoring. Here are a few comments about the 0001 patch: Thanks for reviewing the patch! > I'm not sure it's a good idea to change the function's name, because > that would make backpatching hard. To avoid that, how about > introducing a workhorse function for pgfdw_get_result and > pgfdw_get_cleanup_result, based on the latter function as you > proposed, and modifying the two functions so that they call the > workhorse function? That's possible. We can revive pgfdw_get_cleanup_result() and make it call pgfdw_get_result_timed(). Also, with the patch, pgfdw_get_result() already works in that way. But I'm not sure how much we should be concerned about back-patch "issue" in this case. We usually rename the internal functions if new names are better. > > @@ -1599,13 +1572,9 @@ pgfdw_finish_pre_commit_cleanup(List *pending_entries) > entry = (ConnCacheEntry *) lfirst(lc); > > /* Ignore errors (see notes in pgfdw_xact_callback) */ > - while ((res = PQgetResult(entry->conn)) != NULL) > - { > - PQclear(res); > - /* Stop if the connection is lost (else we'll loop infinitely) */ > - if (PQstatus(entry->conn) == CONNECTION_BAD) > - break; > - } > + pgfdw_get_result_timed(entry->conn, 0, &res, NULL); > + PQclear(res); > > The existing code prevents interruption, but this would change to > allow it. Do we need this change? You imply that we intentially avoided calling CHECK_FOR_INTERRUPT() there, don't you? But could you tell me why? > I have to agree with Horiguchi-san, because as mentioned by him, 1) > there isn't enough duplicate code in the two bits to justify merging > them into a single function, and 2) the 0002 patch rather just makes > code complicated. The current implementation is easy to understand, > so I'd vote for leaving them alone for now. > > (I think the introduction of pgfdw_abort_cleanup is good, because that > de-duplicated much code that existed both in pgfdw_xact_callback and > in pgfdw_subxact_callback, which would outweigh the downside of > pgfdw_abort_cleanup that it made code somewhat complicated due to the > logic to handle both the transaction and subtransaction cases within > that single function. But 0002 is not the case, I think.) The function pgfdw_exec_pre_commit() that I newly introduced consists of two parts; issue the transaction-end command based on parallel_commit setting and issue DEALLOCATE ALL. The first part is duplicated between pgfdw_xact_callback() and pgfdw_subxact_callback(), but the second not (i.e., it's used only by pgfdw_xact_callback()). So how about getting rid of that non duplicated part from pgfdw_exec_pre_commit()? >> It gives the same feeling with 0002. > > I have to agree with Horiguchi-san on this as well; the existing > single-purpose functions are easy to understand, so I'd vote for > leaving them alone. Ok, I will reconsider 0003 patch. BTW, parallel abort patch that you're proposing seems to add new function pgfdw_finish_abort_cleanup() with the similar structure as the function added by 0003 patch. So probably it's helpful for us to consider this together :) Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
pgsql-hackers by date: