Thread: Bug fix for cache lookup failure for statistic_ext type

Bug fix for cache lookup failure for statistic_ext type

From
Mark Dilger
Date:
Hackers,

You can easily get a cache lookup failure by changing the regression tests as included in this small patch.  The
failurelooks thus: 

+COMMENT ON STATISTICS ab1_a_b_stats IS 'new comment';
+CREATE ROLE temp_role;
+SET SESSION AUTHORIZATION temp_role;
+COMMENT ON STATISTICS ab1_a_b_stats IS 'changed comment';
+ERROR:  cache lookup failed for type 27447
+DROP STATISTICS ab1_a_b_stats;
+ERROR:  cache lookup failed for type 27447
+ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new;
+ERROR:  must be owner of statistics object ab1_a_b_stats
+RESET SESSION AUTHORIZATION;
+DROP ROLE temp_role;

I believe this case simply has not had any test coverage, as I don't see any way the current code would ever work.  It
treatsthe Oid of the statistics object as a type, which it is not. 




—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company




Attachment

Re: Bug fix for cache lookup failure for statistic_ext type

From
Tomas Vondra
Date:
On 8/5/21 12:03 AM, Mark Dilger wrote:
> Hackers,
> 
> You can easily get a cache lookup failure by changing the regression tests as included in this small patch.  The
failurelooks thus:
 
> 
> +COMMENT ON STATISTICS ab1_a_b_stats IS 'new comment';
> +CREATE ROLE temp_role;
> +SET SESSION AUTHORIZATION temp_role;
> +COMMENT ON STATISTICS ab1_a_b_stats IS 'changed comment';
> +ERROR:  cache lookup failed for type 27447
> +DROP STATISTICS ab1_a_b_stats;
> +ERROR:  cache lookup failed for type 27447
> +ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new;
> +ERROR:  must be owner of statistics object ab1_a_b_stats
> +RESET SESSION AUTHORIZATION;
> +DROP ROLE temp_role;
> 
> I believe this case simply has not had any test coverage, as I don't
> see any way the current code would ever work.  It treats the Oid of the
> statistics object as a type, which it is not.
> 

Yeah, you're right - this is broken since 7b504eb282c. Thanks for the 
fix, I'll get it committed.


regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: Bug fix for cache lookup failure for statistic_ext type

From
Tomas Vondra
Date:

On 8/5/21 12:32 AM, Tomas Vondra wrote:
> On 8/5/21 12:03 AM, Mark Dilger wrote:
>> Hackers,
>>
>> You can easily get a cache lookup failure by changing the regression 
>> tests as included in this small patch.  The failure looks thus:
>>
>> +COMMENT ON STATISTICS ab1_a_b_stats IS 'new comment';
>> +CREATE ROLE temp_role;
>> +SET SESSION AUTHORIZATION temp_role;
>> +COMMENT ON STATISTICS ab1_a_b_stats IS 'changed comment';
>> +ERROR:  cache lookup failed for type 27447
>> +DROP STATISTICS ab1_a_b_stats;
>> +ERROR:  cache lookup failed for type 27447
>> +ALTER STATISTICS ab1_a_b_stats RENAME TO ab1_a_b_stats_new;
>> +ERROR:  must be owner of statistics object ab1_a_b_stats
>> +RESET SESSION AUTHORIZATION;
>> +DROP ROLE temp_role;
>>
>> I believe this case simply has not had any test coverage, as I don't
>> see any way the current code would ever work.  It treats the Oid of the
>> statistics object as a type, which it is not.
>>
> 
> Yeah, you're right - this is broken since 7b504eb282c. Thanks for the 
> fix, I'll get it committed.
> 

I've pushed a fix for this. And then a fix for the fix :-( because I 
forgot about the rule that role names in regression tests should start 
with regress_ prefix, so animals enforcing this failed.


regards

-- 
Tomas Vondra
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company



Re: Bug fix for cache lookup failure for statistic_ext type

From
Mark Dilger
Date:

> On Aug 31, 2021, at 10:50 AM, Tomas Vondra <tomas.vondra@enterprisedb.com> wrote:
>
> I've pushed a fix for this. And then a fix for the fix :-( because I forgot about the rule that role names in
regressiontests should start with regress_ prefix, so animals enforcing this failed. 

Thanks!

—
Mark Dilger
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company