<div dir="ltr"><div dir="ltr"><br></div><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jul 22, 2020 at 7:32 AM Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Usama,<br>
<br>
Why the test is under src/test/dml-adaptive-test/simple-query-test/test.sh?<br>
It would be good if it&#39;s located under the standard regression test directory.<br></blockquote><div><br></div><div>Thanks for pointing it out, I somehow overlooked it.</div><div>I will take care of it and move the simple query test case</div><div>to the standard regression directory.</div><div><br></div><div>Thanks</div><div>Best Regards</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Best regards,<br>
--<br>
Tatsuo Ishii<br>
SRA OSS, Inc. Japan<br>
English: <a href="http://www.sraoss.co.jp/index_en.php" rel="noreferrer" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
Japanese:<a href="http://www.sraoss.co.jp" rel="noreferrer" target="_blank">http://www.sraoss.co.jp</a><br>
<br>
&gt; Hi Sunbiao,<br>
&gt; <br>
&gt; <br>
&gt; I have committed your patch after a few minor modifications and adjusting<br>
&gt; the documentation.<br>
&gt; <a href="https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=761d30a17d04350fb3a67bce43440731c8ba3c90" rel="noreferrer" target="_blank">https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=761d30a17d04350fb3a67bce43440731c8ba3c90</a><br>
&gt; <br>
&gt; <br>
&gt; Best Regards<br>
&gt; <br>
&gt; On Tue, Jul 7, 2020 at 7:08 AM <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a> &lt;<a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a>&gt;<br>
&gt; wrote:<br>
&gt; <br>
&gt;&gt; Hi, Usama<br>
&gt;&gt;<br>
&gt;&gt; I have seen patch-v7 and tested it.<br>
&gt;&gt; I think removing the parentheses () is a good way.<br>
&gt;&gt;<br>
&gt;&gt; Thanks<br>
&gt;&gt; Best Regards<br>
&gt;&gt; ------------------------------<br>
&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; *From:* Muhammad Usama &lt;<a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a>&gt;<br>
&gt;&gt; *Date:* 2020-07-07 01:19<br>
&gt;&gt; *To:* <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt; *CC:* Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;; pgpool-hackers<br>
&gt;&gt; &lt;<a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a>&gt;<br>
&gt;&gt; *Subject:* Re: Re: [pgpool-hackers: 3592] add a feature: dml object level<br>
&gt;&gt; load balance<br>
&gt;&gt; Hi Sunbiao,<br>
&gt;&gt;<br>
&gt;&gt; Thanks for pointing the mistake.<br>
&gt;&gt; So I have yet again changed the patch a little bit.<br>
&gt;&gt; Instead of doing strncasecmp in<br>
&gt;&gt; get_associated_object_from_dml_adaptive_relations function,<br>
&gt;&gt; I have removed the parentheses () from the original token at the time of<br>
&gt;&gt; parsing.<br>
&gt;&gt; What do you think? see the new attached patch.<br>
&gt;&gt;<br>
&gt;&gt; Thanks<br>
&gt;&gt; Best Regards<br>
&gt;&gt; Muhammad Usama<br>
&gt;&gt;<br>
&gt;&gt; Thanks for the updated patch.<br>
&gt;&gt; On Mon, Jul 6, 2020 at 10:37 AM <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a> &lt;<a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; Hi, Usama<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I think your idea is better then using json.<br>
&gt;&gt;&gt; I tested patch-v5. There was a bug in the function<br>
&gt;&gt;&gt; &quot;get_associated_object_from_dml_adaptive_relations&quot; , when sql calls a<br>
&gt;&gt;&gt; function.<br>
&gt;&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Can you please<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;&gt; I fixed it in the new patch.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt; Best regards.<br>
&gt;&gt;&gt; ------------------------------<br>
&gt;&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; *From:* Muhammad Usama &lt;<a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a>&gt;<br>
&gt;&gt;&gt; *Date:* 2020-07-02 05:15<br>
&gt;&gt;&gt; *To:* <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt; *CC:* Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;; pgpool-hackers<br>
&gt;&gt;&gt; &lt;<a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a>&gt;<br>
&gt;&gt;&gt; *Subject:* Re: [pgpool-hackers: 3592] add a feature: dml object level<br>
&gt;&gt;&gt; load balance<br>
&gt;&gt;&gt; Hi Sunbiao,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks for the patch, It is working as expected. Though while reviewing it<br>
&gt;&gt;&gt; I realized we are doing the dml_adaptive_relationship_list parsing at the<br>
&gt;&gt;&gt; start of every<br>
&gt;&gt;&gt; session, That is better than the previous approach but still has room for<br>
&gt;&gt;&gt; improvement.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; My idea is to do the parsing at the very beginning while loading the<br>
&gt;&gt;&gt; configuration parameter<br>
&gt;&gt;&gt; and then use that.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Secondly, I do like your idea of using the JSON object for storing the<br>
&gt;&gt;&gt; parsed dml_adaptive_relationship_list<br>
&gt;&gt;&gt; but the string manipulation we were doing for searching the function<br>
&gt;&gt;&gt; names from the list was<br>
&gt;&gt;&gt; pinching me a little since it is done for each statement.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; So how about storing the object type at the time of parsing the list and<br>
&gt;&gt;&gt; use that instead<br>
&gt;&gt;&gt; of doing string manipulations for each function name searches.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; With these two changes, I have cooked up a quick patch on top of your<br>
&gt;&gt;&gt; 0001-dml-adaptive-patch-v4.<br>
&gt;&gt;&gt; Can you have a look at the attached patch and see if you have any<br>
&gt;&gt;&gt; reservations with this approach?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Also, note that I have just made this patch and  haven&#39;t tested it, so I<br>
&gt;&gt;&gt; am expecting that you may find<br>
&gt;&gt;&gt; some issues with it :-)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt; Best regards.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Mon, Jun 29, 2020 at 6:36 AM <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a> &lt;<a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Hi, Usama<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I made a new patch.Including the following:<br>
&gt;&gt;&gt;&gt; 1.Updated documentation<br>
&gt;&gt;&gt;&gt; 2.Used json to save relationship list<br>
&gt;&gt;&gt;&gt; 3.Changed &#39;dml_load_balance&#39; to &#39;dml_adaptive&#39;<br>
&gt;&gt;&gt;&gt; 4.Added extended-query-test<br>
&gt;&gt;&gt;&gt; 5.Tested &#39;git apply&#39;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; Best Regards<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ------------------------------<br>
&gt;&gt;&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; *From:* <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt; *Date:* 2020-06-22 10:57<br>
&gt;&gt;&gt;&gt; *To:* Muhammad Usama &lt;<a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; *CC:* Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;; pgpool-hackers<br>
&gt;&gt;&gt;&gt; &lt;<a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a>&gt;<br>
&gt;&gt;&gt;&gt; *Subject:* Re: [pgpool-hackers: 3592] add a feature: dml object level<br>
&gt;&gt;&gt;&gt; load balance<br>
&gt;&gt;&gt;&gt; Hi, Usama<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; I use the raw_expression_tree_walker() function to find out relname.<br>
&gt;&gt;&gt;&gt; This function is only valid for DML statements<br>
&gt;&gt;&gt;&gt; (SELECT/INSERT/UPDATE/DELETE).<br>
&gt;&gt;&gt;&gt; So I named this feature ‘dml_load_balance’.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ‘adaptive’ it feels like that can parse all statements. It can&#39;t<br>
&gt;&gt;&gt;&gt; actually.<br>
&gt;&gt;&gt;&gt; Maybe we can call it &#39;dml_adaptive&#39;.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; According to comments from you and Tatsuo Ishii, i will make a new patch.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; Best Regards<br>
&gt;&gt;&gt;&gt; ------------------------------<br>
&gt;&gt;&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; *From:* Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;<br>
&gt;&gt;&gt;&gt; *Date:* 2020-06-20 17:50<br>
&gt;&gt;&gt;&gt; *To:* <a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a><br>
&gt;&gt;&gt;&gt; *CC:* <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a>; <a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a><br>
&gt;&gt;&gt;&gt; *Subject:* Re: [pgpool-hackers: 3592] add a feature: dml object level<br>
&gt;&gt;&gt;&gt; load balance<br>
&gt;&gt;&gt;&gt; Hi Usama,<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Hi Sunbiao,<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Thanks for the updated patch. Overall the patch looks good and works as<br>
&gt;&gt;&gt;&gt; &gt; expected.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; However, I am a little concerned about the performance aspect of<br>
&gt;&gt;&gt;&gt; &gt; the check_object_relationship_list() function.<br>
&gt;&gt;&gt;&gt; &gt; Since it is parsing the item in the<br>
&gt;&gt;&gt;&gt; &gt; dml_load_balance_object_relationship_list<br>
&gt;&gt;&gt;&gt; &gt; list every time it is invoked. So I think we need to fissure out the<br>
&gt;&gt;&gt;&gt; way to<br>
&gt;&gt;&gt;&gt; &gt; store the pre-parsed list (which can be constructed at session start)<br>
&gt;&gt;&gt;&gt; and<br>
&gt;&gt;&gt;&gt; &gt; try<br>
&gt;&gt;&gt;&gt; &gt; to save the parsing at each function call.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Other than that you need to provide the documentation updates for the<br>
&gt;&gt;&gt;&gt; &gt; feature.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Finally, one last comment is how about if we change the<br>
&gt;&gt;&gt;&gt; &gt; disable_load_balance_on_write<br>
&gt;&gt;&gt;&gt; &gt; setting name from &#39;dml_load_balance&#39; to &#39;adaptive&#39;?<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; @Tatsuo Ishii &lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt; What do you think about this feature and patch? If you do not have any<br>
&gt;&gt;&gt;&gt; &gt; reservations then<br>
&gt;&gt;&gt;&gt; &gt; I will commit it after Sunbiao takes care of review comments.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Looks good to me except subtle points below:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - The test should include tests for extended query:<br>
&gt;&gt;&gt;&gt;   i.e. src/test/extended-query-test. There are some tests or<br>
&gt;&gt;&gt;&gt;   disable-load-balance. So it&#39;s better to add a test to them.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; - There are extra spaces in the patch. Also it needs rebase.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; t-ishii$ git apply ~/0001-dml-load-balance-patch-v3.patch<br>
&gt;&gt;&gt;&gt; /home/t-ishii/0001-dml-load-balance-patch-v3.patch:327: space before tab<br>
&gt;&gt;&gt;&gt; in indent.<br>
&gt;&gt;&gt;&gt; * dml_load_balance_object_relationship_list */<br>
&gt;&gt;&gt;&gt; /home/t-ishii/0001-dml-load-balance-patch-v3.patch:679: trailing<br>
&gt;&gt;&gt;&gt; whitespace.<br>
&gt;&gt;&gt;&gt; CREATE OR REPLACE FUNCTION insert_tb_t2_func() RETURNS TRIGGER AS<br>
&gt;&gt;&gt;&gt; $example_table$<br>
&gt;&gt;&gt;&gt; /home/t-ishii/0001-dml-load-balance-patch-v3.patch:680: trailing<br>
&gt;&gt;&gt;&gt; whitespace.<br>
&gt;&gt;&gt;&gt;     BEGIN<br>
&gt;&gt;&gt;&gt; /home/t-ishii/0001-dml-load-balance-patch-v3.patch:681: trailing<br>
&gt;&gt;&gt;&gt; whitespace.<br>
&gt;&gt;&gt;&gt;         INSERT INTO tb_t2 VALUES (1);<br>
&gt;&gt;&gt;&gt; /home/t-ishii/0001-dml-load-balance-patch-v3.patch:682: trailing<br>
&gt;&gt;&gt;&gt; whitespace.<br>
&gt;&gt;&gt;&gt;         RETURN NEW;<br>
&gt;&gt;&gt;&gt; error: patch failed: src/context/pool_session_context.c:170<br>
&gt;&gt;&gt;&gt; error: src/context/pool_session_context.c: patch does not apply<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt; Best Regards<br>
&gt;&gt;&gt;&gt; &gt; Muhammad Usama<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt; Best Regards<br>
&gt;&gt;&gt;&gt; &gt; Muhammad Usama<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; On Mon, Jun 15, 2020 at 7:25 AM <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a> &lt;<a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Hi, Usama<br>
&gt;&gt;&gt;&gt; &gt;&gt; I found a problem in patch v2.<br>
&gt;&gt;&gt;&gt; &gt;&gt; I can not use “pool show” to show new added parameter.<br>
&gt;&gt;&gt;&gt; &gt;&gt; So i made patch v3.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; I make disable_load_balance_on_write to accept new value.<br>
&gt;&gt;&gt;&gt; &gt;&gt; Set disable_load_balance_on_write = &#39;dml_load_balance&#39; to enable this<br>
&gt;&gt;&gt;&gt; &gt;&gt; feature.<br>
&gt;&gt;&gt;&gt; &gt;&gt; This new patch contains a test script in path<br>
&gt;&gt;&gt;&gt; &gt;&gt; ‘src/test/dml-load-balance-test’.<br>
&gt;&gt;&gt;&gt; &gt;&gt; If pg installed by default in /usr/local/pgsql, just execute test.sh.<br>
&gt;&gt;&gt;&gt; &gt;&gt; If pg is in other dir, execute  ‘test.sh -p /path_to_pg_dir/’.<br>
&gt;&gt;&gt;&gt; &gt;&gt; It will show “success: dml load balance test pass.” , when test pass.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; this script will test below sql:<br>
&gt;&gt;&gt;&gt; &gt;&gt; show pool_nodes;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; -- test DML<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; insert into tb_dml_insert values (1);<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_dml_insert ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; update tb_dml_update SET a = 2;<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_dml_update ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; delete from tb_dml_delete;<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_dml_delete;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; -- test trigger<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; insert into tb_t1 values (1);<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_t2 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; -- test function<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; select insert_tb_f_func(6);<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_f ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; -- test view<br>
&gt;&gt;&gt;&gt; &gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; insert into tb_v values (8);<br>
&gt;&gt;&gt;&gt; &gt;&gt; select * from tb_v_view ;<br>
&gt;&gt;&gt;&gt; &gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt;&gt; Best Regards<br>
&gt;&gt;&gt;&gt; &gt;&gt; ------------------------------<br>
&gt;&gt;&gt;&gt; &gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; *From:* Muhammad Usama &lt;<a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; *Date:* 2020-06-12 18:08<br>
&gt;&gt;&gt;&gt; &gt;&gt; *To:* <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt; &gt;&gt; *CC:* pgpool-hackers &lt;<a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; *Subject:* Re: [pgpool-hackers: 3592] add a feature: dml object level<br>
&gt;&gt;&gt;&gt; &gt;&gt; load balance<br>
&gt;&gt;&gt;&gt; &gt;&gt; Hi Sunbiao,<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Can you kindly resend the 0001-dml-load-balance-patch-v2.patch patch?<br>
&gt;&gt;&gt;&gt; I<br>
&gt;&gt;&gt;&gt; &gt;&gt; am not able to download the patch file.<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt;&gt; Best regards<br>
&gt;&gt;&gt;&gt; &gt;&gt; Muhammad Usama<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt; On Fri, Apr 24, 2020 at 9:55 PM Muhammad Usama &lt;<a href="mailto:m.usama@gmail.com" target="_blank">m.usama@gmail.com</a>&gt;<br>
&gt;&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Hi Sunbiao,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Thanks for the patch and it looks line an interesting feature. I have<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; just skimmed<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; through the patch and I have a few of small comments.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; 1 - Wouldn&#39;t it be better to add a new mode existing<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; disable_load_balance_on_write parameter<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; instead of adding a new configuration parameter i.e<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; dml_object_level_load_balance ?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; You can make disable_load_balance_on_write to accept new value like<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; disable_load_balance_on_write = &#39;object&#39; to enable this feature.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; 2- The patch contains some invalid changes in<br>
&gt;&gt;&gt;&gt; pgpool.conf.sample-stream<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; file<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; i.e it changes the default values of black_function_list and<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; disable_load_balance_on_write<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; configuration parameters which I am sure were not intended<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; 3- The default value for new configuration parameter<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; dml_object_level_load_balance_token_list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; better be an empty<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; 4- Instead of attaching a separate test script you could include a<br>
&gt;&gt;&gt;&gt; proper<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; test case for the feature.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Thanks<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Best Regards<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Muhammad Usama<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; Highgo Software (Canada/China/Pakistan)<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; URL : <a href="http://www.highgo.ca" rel="noreferrer" target="_blank">http://www.highgo.ca</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; ADDR: 10318 WHALLEY BLVD, Surrey, BC<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; On Fri, Apr 24, 2020 at 3:43 PM <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a> &lt;<br>
&gt;&gt;&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a>&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; Hi Hackers,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; If sql like below:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; begin ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; update tb_1 SET id = 1;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; select * from tb_1 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; select * from tb_2 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; select * from tb_3 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; select * from tb_4 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; select * from tb_5 ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; commit ;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; when set disable_load_balance_on_write = &#39;transaction&#39;. write<br>
&gt;&gt;&gt;&gt; queries<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; appear in an explicit transaction, subsequent read queries are not<br>
&gt;&gt;&gt;&gt; load<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; balanced until the transaction ends. so all sql will be sent to<br>
&gt;&gt;&gt;&gt; primary<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; node.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; i think that “update tb_1 SET id = 1” and “select * from tb_1”<br>
&gt;&gt;&gt;&gt; should be<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; sent to primary node.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; actually, tb_2 tb_3 tb_4 tb_5 can be sent to standby node. if do<br>
&gt;&gt;&gt;&gt; this,<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; will reduce primary load.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; so i made a patch to implement my idea.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; when transaction start, i will initialize a list to save table name<br>
&gt;&gt;&gt;&gt; of<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; write queries.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; read queries will check the list, if find the table name in list,<br>
&gt;&gt;&gt;&gt; read<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; queries will be sent to primary.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; when transaction end, i destroy the list.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; i add two parameter:<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; dml_object_level_load_balance = on<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; dml_object_level_load_balance_token_list=<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; &#39;tb_t1:tb_t2,insert_tb_f_func():tb_f,tb_v:tb_v_view&#39;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; use dml_object_level_load_balance_token_list to set relationships<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; between objects, such as trigger, function, view.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; If set dml_object_level_load_balance = on,<br>
&gt;&gt;&gt;&gt; disable_load_balance_on_write<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; should be off.<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; Is it possible to add this feature?<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; ------------------------------<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; <a href="mailto:sunbiao@highgo.com" target="_blank">sunbiao@highgo.com</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; pgpool-hackers mailing list<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; <a href="mailto:pgpool-hackers@pgpool.net" target="_blank">pgpool-hackers@pgpool.net</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt; <a href="http://www.pgpool.net/mailman/listinfo/pgpool-hackers" rel="noreferrer" target="_blank">http://www.pgpool.net/mailman/listinfo/pgpool-hackers</a><br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; ...<br>
&gt;&gt;&gt; Muhammad Usama<br>
&gt;&gt;&gt; Highgo Software (Canada/China/Pakistan)<br>
&gt;&gt;&gt; URL : <a href="http://www.highgo.ca" rel="noreferrer" target="_blank">http://www.highgo.ca</a><br>
&gt;&gt;&gt; ADDR: 10318 WHALLEY BLVD, Surrey, BC<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
</blockquote></div></div>
</div>