Closed Bug 239263 Opened 20 years ago Closed 20 years ago

User->groups may have a hazard when shadow DBs are in use

Categories

(Bugzilla :: Bugzilla-General, defect, P3)

2.17.7
defect

Tracking

()

RESOLVED FIXED
Bugzilla 2.18

People

(Reporter: bugreport, Assigned: bugreport)

Details

Attachments

(1 file, 1 obsolete file)

Scenario A:
It appears that a query or collection of series data could fail to get current
group information in the following scenario....

1) Group information in the user_group_map is stale (perhaps the user has never
logged in, like a pseudo_user used for series data collection)
2) Replication is delayed
3) As user logs in, group information in master is refreshed, but not update in
the slave
4) The query runs, pulling the user's group list from the slave and misses bugs.

Scenario B:
1) collectstats switches to shadow db
2) collectstats calls Search.pm with a stale user's userid
3) Search.pm calls User->groups, which rederives user's groups and writes to
_dbh wchich currently points to the shadow db.
4) Failure???

I suspect the right thing to do is to have User.pm ALWAYS use the main db.
Even though nobody has reported an actual failure to this, I am convinced that
we should make this change.  

Any objections?
Status: UNCONFIRMED → NEW
Ever confirmed: true
Priority: -- → P3
Target Milestone: --- → Bugzilla 2.18
makes sense to me.
I don't understand A) - what is is pseudo_user used for series data collection?
I didn't have such a concept when I wrote the code.

I don't see missing bugs in the series count due to a stale shadow as a problem
- that's just what happens when you have a shadow.

B) sounds more worrying - although I'd say it's an architectural problem that
asking what a user's groups are causes database writes... but I doubt that can
be changed.

Gerv


Attached patch The patch (obsolete) — Splinter Review
I really wish that I could just access the main db's dbh instead of calling the
switch functions.
Attachment #146689 - Flags: review?
Comment on attachment 146689 [details] [diff] [review]
The patch

>     if ($result) {
>+        my $noshadow;
>+        unless ($noshadow = Bugzilla->dbwritesallowed()) {
>+            Bugzilla->switch_to_main();
>+        }
>         $self->derive_groups($tables_locked_for_derive_groups);
>+        unless ($noshadow) {
>+            Bugzilla->switch_to_shadow();
>+        }

1. I think those should be switch_to_main_db and ..._shadow_db? (note the _db
part)

2. "noshadow" is confusing; negation in a variable name tends to do that.
"is_main_db" is much better, for example.

3. Does this fix scenario A? Groups are derived correctly on the main db, but
what is replication is delayed, and rest of in_group queries get done from the
slave server?
Attachment #146689 - Flags: review? → review-
Attached patch v2Splinter Review
This addresses the 2 code changes in Joini's review.  It addresses only
scenario B consistent with the point Gerv made.
Attachment #146689 - Attachment is obsolete: true
Attachment #148455 - Flags: review?
Comment on attachment 148455 [details] [diff] [review]
v2

I can't really test this (I don't have a shadowing configuration available),
but as far as I can tell, it should be ok. 

r=jouni
Attachment #148455 - Flags: review? → review+
-> patch author
Assignee: justdave → bugreport
Flags: approval?
Flags: approval? → approval+
Checking in Bugzilla/User.pm;
/cvsroot/mozilla/webtools/bugzilla/Bugzilla/User.pm,v  <--  User.pm
new revision: 1.19; previous revision: 1.18
done
Status: NEW → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
QA Contact: matty_is_a_geek → default-qa
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: