Closed
Bug 106377
Opened 23 years ago
Closed 23 years ago
processmail rescanall should use lastdiffed
Categories
(Bugzilla :: Email Notifications, defect, P1)
Tracking
()
RESOLVED
FIXED
Bugzilla 2.16
People
(Reporter: bbaetz, Assigned: bbaetz)
Details
Attachments
(1 file, 4 obsolete files)
(deleted),
patch
|
justdave
:
review+
ddkilzer
:
review+
|
Details | Diff | Splinter Review |
Instead of calling 2 functions per row, and only checking for stuff changed in
the last two days, rescanall should use the lastdiffed column.
However, it turns out that edit*.cgi doesn't keep the auto-updating delta_ts
field the same. As a result, this will (for one run) show false positives. It
won't actually send mail, but it probably will take some time.
Ideally, this should be run nightly, to catch email changes which don't get
picked up, eg by people pressing stop on their browser too early. I sonsidered
adding this to a sanity check, but since: a) this fixes itself on the next
comment, b) getting these emails nightly could help catch bugzilla bugs, and c)
this will happen in real situations, I didn't think I should.
myk, how long does: "SELECT bug_id from bugs where lastdiffed < delta_ts" take
on b.m.o? I'd guess much less that the current stuff, but it may take too long
to run nightly.
patch coming.
Assignee | ||
Comment 1•23 years ago
|
||
Comment 2•23 years ago
|
||
The query takes nine seconds to run on b.m.o. and retrieves 10,199 records.
Assignee | ||
Comment 3•23 years ago
|
||
hmm. Myk, after this gets checked in, and b.m.o is upgraded, 9 seconds a night
seems to be minimal, and my patch only outputs stuff to stderr if a problem was
found. I got another mail yesterday, containing my changes + a state change on a
dependancy from 10 days ago. It doesn't happen freqently, but I think we should
try to track it down.
After the first run, anyway. Almost 10% of bugs have invalid times on them?
Ouch, and more ouch since this only covers bugs since newemailtech was checked
in (Jan 2000 into cvs). I suppose most of these are from removing keywords. It
still seems really high, though. justdave, any ideas?
Status: NEW → ASSIGNED
Comment 4•23 years ago
|
||
We need to make sure rescanall doesn't touch anything within the last hour to
avoid the situation where you make a change, then the rescanall processes the
change, then you call processmail for the change.
Summary: processmail recanall should use lastdiffed → processmail rescanall should use lastdiffed
Comment 5•23 years ago
|
||
Moving to 2.16. This is a pretty serious problem and we should recommend
running rescanall nightly in the release notes.
Priority: -- → P1
Target Milestone: --- → Bugzilla 2.16
Assignee | ||
Comment 6•23 years ago
|
||
Well, this doesn't actually fix the bug, it just makes it not matter. I blame
dependancies' status changes, and will go do some poking, I think.
And some people somehow have last_diffed = 00-00-00 00:00:00. I have no idea how
that is possible. I should probably modify it to also print if any mail was
actually sent, if we're running rescanall.
Assignee | ||
Comment 7•23 years ago
|
||
Actually, the last hour thing won't result in duplicate mails, because of the
locks we have. However, it could, in theory, give a few false positives, so I'll
change it. 15 minutes should be way more than enough, though.
Comment 8•23 years ago
|
||
I'm not sure what false positives here. I was concerned that if rescanall
handled it, the UI would not get supplied the userlist and error messages that
processmail gives it.
Assignee | ||
Comment 9•23 years ago
|
||
OK, rescanall will now only check for the last half hour. Patch coming.
Assignee | ||
Comment 10•23 years ago
|
||
Comment 11•23 years ago
|
||
I assume you mean won't check for the last half hour?
Assignee | ||
Comment 12•23 years ago
|
||
err, yeah. That. :)
Comment 13•23 years ago
|
||
While doing some pre-review work, I found that the following files
contain SQL that updates the BUGS table, but does not contain the
"delta_ts = delta_ts" (or other "detla_ts = foo") clause:
CGI.pl [1 instance]
move.pl [2 instances, together]
process_bug.cgi [4 instances, one in global $::query variable]
Also, the file "UPGRADING-pre-2.8" contains some SQL that pre-2.8
users must run which also contains many "UPDATE BUGS ..." SQL
statements. I'm not sure if it's necessary to update this document
as well, but I thought I'd mention it just in case.
Does the SQL in the above cases need to be updated? I guess I'm
not clear on when "delta_ts" should or should not be set to itself
or something else.
Comment 14•23 years ago
|
||
Adding myself to CC list for r= purposes.
Assignee | ||
Comment 15•23 years ago
|
||
I thought I checked them all. I'll cehck when I get back home later this
weekend.
I have no idea about pre2.8. Do we still support upgrading from that version? Do
the instructions still work?
Assignee | ||
Comment 16•23 years ago
|
||
ddk: Nope, those places are where we want the change to be recorded (because
we're adding a comment/keyword/etc and so need the time moved so its picked up
in the diff)
Updated•23 years ago
|
Attachment #54809 -
Attachment is obsolete: true
Comment 17•23 years ago
|
||
Comment on attachment 55497 [details] [diff] [review]
patch, v2
Looks good! I ran this patch on my local installation and it picked
up a large number of false positives in sanitycheck.cgi. Running
"processmail rescanall" fixed them.
Attachment #55497 -
Flags: review+
Comment 18•23 years ago
|
||
Regarding the changing of "UPGRADING-pre-2.8", I don't think this is
necessary since (1) I'm not sure if a delta_ts field existed in the
BUGS table at that time and (2) if the user manages to successfully
upgrade from pre-2.8 to 2.15 (or newer), a quick run of sanitycheck.cgi
will show the "unsent email" (some of which may be false positives),
and will tell the user how to clear them ("processmail rescanall").
Comment 19•23 years ago
|
||
r=ddk for attachment 55497 [details] [diff] [review] (patch, v2).
I didn't explictly state that in the comments I made when I reviewed
the patch.
Comment 20•23 years ago
|
||
The code looks good, but I have a few questions and comments:
1. How will processmail rescanall not send mail the first time it encounters all
those false positives? It looks to me like the code does send mail in that
situation.
2. It's unclear to me that the problem with the edit*.cgi routines is that they
fail to maintain the value of delta_ts. If I move one or more bugs from one
component to another, those bugs' constituencies will receive mail. Shouldn't
this also be the case when I change the name of a component?
3. What does adding zero days to the timestamp get us in "date_add(delta_ts,
interval 0 day)"?
Assignee | ||
Comment 21•23 years ago
|
||
1) It won't send mail - in the case of a false positve we will try to, but the
query on the activity log will be ampty, and so mail will not be sent.
2) No mail is sent when a component is renamed - it doesn't appear on the
activity log. This is probably how these false positives are showing up, we think.
3) It formats teh date from a unix timestamp into a readable format - that value
is only used for teh debugging output printed to STDERR
Comment 22•23 years ago
|
||
>2) No mail is sent when a component is renamed - it doesn't appear on the
>activity log. This is probably how these false positives are showing up, we
>think.
Right, I understand. My question is whether these renamings *should* be
recorded in the activity log and an email *should* be sent. After all, the name
of the component is changing just as surely as if I had moved the bugs from one
component to another. Don't people need to know the name about the name change?
Note: that was not a leading question. I haven't made up my mind yet either
way, but we should think about this. Perhaps the optimal solution is to give
administrators the option of whether or not to spam everyone when they make
these changes, but if we don't do that, then what's the next best solution?
>3) It formats teh date from a unix timestamp into a readable format - that
>value is only used for teh debugging output printed to STDERR
In that case it would make more sense to use FROM_UNIXTIME for clarity and
consistency.
http://mysql.com/doc/D/a/Date_and_time_functions.html
Assignee | ||
Comment 23•23 years ago
|
||
2) Well, thats a different issue. really.
3) There was some reason why that didn't work, I think. I'll play with it later,
and try to recall what it was. It works on landfill, but maybe it wasn't
available on some earlier mysql version. I'll check.
Comment 24•23 years ago
|
||
Please note that one bug 43600 is FIXED, changing a component will no longer
require touching each bug in that component and thus not update the timestamp.
Comment 25•23 years ago
|
||
Myk: bug #97733.
Assignee | ||
Comment 26•23 years ago
|
||
The reson I was doing the addition was because mysql outputs timestamp vars as
YYYYMMDDHHMMSS. I've added the appropriate punctuation in, now
I also cleaed up the errors a bit. An admin can run this nightly redirecting
stdout to /dev/null, and only needing to look at stderr to see if there were
problems.
OTOH, I haven't seen this problem on bmo for ages.
Attachment #55497 -
Attachment is obsolete: true
Assignee | ||
Comment 27•23 years ago
|
||
Hmm. processmail doesn't seem to grab any locks. Is that a (separate) issue?
Updated•23 years ago
|
Comment 28•23 years ago
|
||
Comment on attachment 65969 [details] [diff] [review]
v3
Ok, we can work out those "should we send change mail for these
kinds of changes" issues later in bug 97733 or its relatives, and
the time stuff looks good. One more problem...
>+ if ($#list > 0) {
>+ print STDERR "$#list bugs found with possibly unsent mail\n";
>+ print STDERR "Updating bugs, sending mail if required\n";
>+ } else {
>+ print "All appropriate mail appears to have been sent\n"
>+ }
$#list returns the index of the last element in the array, not the
number of elements in it, so if @list contains one element $#list
will equal zero (but there will still be one bug will possibly unsent
mail). Use scalar(@list) instead to get the number of elements.
Attachment #65969 -
Flags: review-
Assignee | ||
Comment 29•23 years ago
|
||
Attachment #65969 -
Attachment is obsolete: true
Comment 30•23 years ago
|
||
Comment on attachment 67568 [details] [diff] [review]
v4
>Index: processmail
>+ if (scalar(@list) > 0) {
>+ print STDERR "$#list bugs found with possibly unsent mail\n";
>+ print STDERR "Updating bugs, sending mail if required\n";
>+ } else {
>+ print "All appropriate mail appears to have been sent\n"
>+ }
Same comment as Myk's previous one. You need to use scalar(@list) here
instead of $#list (in the text you're printing to STDERR as well). Otherwise
you'll get an error message reporting one less bug than was actually found.
FWIW (and this is used in several other places in Bugzilla as well) the
scalar()
part is implied if the left side of the comparison is a scalar. For example
you
can do:
if (0 < @list) {
and that will work. Can't do that in a string though... have to use scalar()
and concatenate.
print STDERR scalar(@list) . " bugs found with possibly unsent mail\n";
Attachment #67568 -
Flags: review-
Updated•23 years ago
|
Assignee | ||
Comment 31•23 years ago
|
||
Attachment #67568 -
Attachment is obsolete: true
Assignee | ||
Updated•23 years ago
|
Comment 32•23 years ago
|
||
Comment on attachment 72245 [details] [diff] [review]
v5
r= justdave
looks good to me now. it passes tests, and rescanall finds bugs with
mismatched timestamps and sends mail.
Attachment #72245 -
Flags: review+
Comment 33•23 years ago
|
||
Comment on attachment 72245 [details] [diff] [review]
v5
+if (@badbugs > 0) {
+ Alert("Bugs that have changes but no mail sent for at least half an hour:
" .
+ join (", ", @badbugs));
+ print("Run <code>processmail rescanall</code> to fix this<p>\n");
+}
Nit: |(scalar(@badbugs) > 0| may be used optionally here for
clarification, too, but the context makes the call to scalar()
implied.
r=ddk
Attachment #72245 -
Flags: review+
Assignee | ||
Comment 34•23 years ago
|
||
Oops. I checked this in at 2002/03/03 22:06:20 - forgot to mark it fixed.
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Comment 35•22 years ago
|
||
I just upgraded from 2.10 to 2.16.3. I ran the sanity check and under Checking
for unsent mail there are many thousands of bugs listed, nearly all in our
database. If I run Run processmail rescanall to fix this...
[bugs@box bugzilla]$perl processmail rescan
will this send out emails for all of these bugs? I was thinking of changing
the extension on the emails in the parameters so that I don't bombard
everyone. Is this the correct way to run processmail and what do you recommend
I do?
Comment 36•22 years ago
|
||
The "emails with unsent mail" is actually any bug where there is more than a
half hour difference between the "last mail sent" timestamp and the "last
modified" timestamp. There were bugs at various points in Bugzilla's history
(many were just corrected in 2.16) where changes would get made to a bug and it
wouldn't update one of the timestamps. In most cases, the timestamp difference
is probably a phantom. In the real world when that first became available, I
remember having it claim there were about 1500 bugs with unsent mail on one of
my installs, and it only actually sent mail on about 20 of them. (There were
only 20 where there were any activity records on that bug between the two
timestamps). YMMV of course.
Comment 37•22 years ago
|
||
actually, I had that backwards -- the bugs were situations where the
last-modified date on the bug WOULD get updated when there weren't actually
modifications made to the bug...
Updated•12 years ago
|
QA Contact: matty_is_a_geek → default-qa
You need to log in
before you can comment on or make changes to this bug.
Description
•