On Wed, Nov 14, 2018 at 8:45 PM Amit Kapila <amit.kapil...@gmail.com> wrote:

> On Wed, Nov 14, 2018 at 7:04 AM Haribabu Kommi <kommi.harib...@gmail.com>
> wrote:
> >
> > On Wed, Nov 14, 2018 at 12:26 AM Amit Kapila <amit.kapil...@gmail.com>
> wrote:
> >>
> >> On Tue, Nov 13, 2018 at 11:32 AM Haribabu Kommi
> >> <kommi.harib...@gmail.com> wrote:
> >> >
> >> > On Mon, Nov 12, 2018 at 6:34 PM Amit Kapila <amit.kapil...@gmail.com>
> wrote:
> >> >> > I can revert it back to void,
> >> >> >
> >> >>
> >> >> +1, as we don't see any good reason to break backward compatibility.
> >> >
> >> >
> >> > Thanks for the review.
> >> > Attached the updated patch with return type as void.
> >> >
> >>
> >> With this patch, we are intending to remove the entries matching
> >> userid, dbid, queryid from hash table (pgss_hash), but the contents of
> >> the file (
> >> pgss_query_texts.stat) will remain unchanged unless all of the entries
> >> are removed from hash table.  This appears fine to me, especially
> >> because there is no easy way to remove the contents from the file.
> >> Does anybody see any problem with this behavior?
> >
> >
> > Adding more info to the above point, even if the file contents are not
> > removed, later if the file size and number of pg_stat_statements entries
> > satisfy the garbage collection, the file will be truncated. So I feel not
> > removing of the contents when the query stats are reset using specific
> > parameters is fine.
> >
>
> I have further reviewed this patch and below are my comments:
>

Thanks for the review.


> 1.
> + if ((!userid || (userid && entry->key.userid == userid)) &&
> + (!dbid || (dbid && entry->key.dbid == dbid)) &&
> + (!queryid || (queryid && entry->key.queryid == queryid)))
>
> I think this check can be simplified as:
> + if ((!userid || entry->key.userid == userid) &&
> + (!dbid || entry->key.dbid == dbid) &&
> + (!queryid || entry->key.queryid == queryid))
>

Yes, the second check is not necessary.


> 2.
> + else
> + {
> + hash_seq_init(&hash_seq, pgss_hash);
> + while ((entry = hash_seq_search(&hash_seq)) != NULL)
> + {
> + if ((!userid || (userid && entry->key.userid == userid)) &&
> + (!dbid || (dbid && entry->key.dbid == dbid)) &&
> + (!queryid || (queryid && entry->key.queryid == queryid)))
> + {
> + hash_search(pgss_hash, &entry->key, HASH_REMOVE, NULL);
> + num_remove++;
> + }
> + }
> + }
>
> I think this 'if check' is redundant when none of the parameters are
> specified.  We can easily avoid it, see attached.
>

Yes, that removes the unnecessary if check if none of the parameters
are available.

I have fixed above two observations in the attached patch and edited
> few comments and doc changes.  Kindly review the same.
>

Thanks for the correction, all are fine.


> Apart from the above, I think we should add a test where all the
> parameters are valid as the corresponding code is not covered by any
> existing tests.
>

Added another test with all the 3 parameters are valid.
Updated patch attached.

Regards,
Haribabu Kommi
Fujitsu Australia

Attachment: 0001-pg_stat_statements_reset-to-reset-specific-query-use_v11.patch
Description: Binary data

Reply via email to