3451: Server Error when viewing specific diff

aj**@brookm******* (Google Code) (Is this you? Claim this profile.)
david
david
July 10, 2014
What version are you running?
2.0.2

What's the URL of the page containing the problem?
/r/85/

What steps will reproduce the problem?
1. Not sure what happened here, but here is an approximate set of events.
2. Diff was uploaded, but didn't get applied cleanly and RB complained
3. Diff was discarded and a new diff was uploaded which also didn't apply
4. This diff was also discarded and then it turns out that the previous discarded diff was actually applied, so maybe it wasn't discarded.  Since it was not applied correctly, went to admin and deleted the diff from the DB.  Bad idea, I guess!
5. Right now, if you just visit the URL, it crashes the server

What is the expected output? What do you see instead?
Expect to see main review page, but see a 500 server error

Is there any way to recover from this?  Is there a script that checks for DB consistency and notifies or corrects them?

What operating system are you using? What browser?
All browsers

Please provide any additional information below.
The error trace is as follows:

Traceback (most recent call last):

  File "/usr/lib/python2.6/site-packages/Django-1.6.5-py2.6.egg/django/core/handlers/base.py", line 112, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)

  File "/usr/lib/python2.6/site-packages/ReviewBoard-2.0.2-py2.6.egg/reviewboard/accounts/decorators.py", line 23, in _check
    return view_func(*args, **kwargs)

  File "/usr/lib/python2.6/site-packages/ReviewBoard-2.0.2-py2.6.egg/reviewboard/site/decorators.py", line 35, in _check
    return view_func(request, local_site=local_site, *args, **kwargs)

  File "/usr/lib/python2.6/site-packages/ReviewBoard-2.0.2-py2.6.egg/reviewboard/reviews/views.py", line 662, in review_detail
    changedesc.fields_changed[field_id])

  File "/usr/lib/python2.6/site-packages/ReviewBoard-2.0.2-py2.6.egg/reviewboard/reviews/fields.py", line 159, in get_change_entry_sections_html
    'rendered_html': mark_safe(self.render_change_entry_html(info)),

  File "/usr/lib/python2.6/site-packages/ReviewBoard-2.0.2-py2.6.egg/reviewboard/reviews/builtin_fields.py", line 386, in render_change_entry_html
    diffset = self.diffsets_by_id[added_diff_info[2]]
#1 aj**@brookm******* (Google Code) (Is this you? Claim this profile.)
Just a quick comment, the two diffs applied were to an existing review.
#2 thom.******@gmai***** (Google Code) (Is this you? Claim this profile.)
Confirming I've seen this exception as well.  

The bit missing from the Traceback here is that the exception is a KeyError: There is no DiffSet object in the DB with ID == added_diff_info[2].

david
#3 david
  • +PendingReview
  • +Component-ChangeDescriptions
  • +david
david
#4 david
Fixed in release-2.0.x (915d270). Thanks!
  • -PendingReview
    +Fixed