Avoid reraise, to improve stacktraces
							parent
							
								
									abdc141c2b
								
							
						
					
					
						commit
						8174c6725b
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Improve stacktraces in certain exceptions in the logs
 | 
			
		||||
| 
						 | 
				
			
			@ -18,7 +18,6 @@
 | 
			
		|||
 | 
			
		||||
import itertools
 | 
			
		||||
import logging
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import six
 | 
			
		||||
from six import iteritems, itervalues
 | 
			
		||||
| 
						 | 
				
			
			@ -1602,6 +1601,9 @@ class FederationHandler(BaseHandler):
 | 
			
		|||
            auth_events=auth_events,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # reraise does not allow inlineCallbacks to preserve the stacktrace, so we
 | 
			
		||||
        # hack around with a try/finally instead.
 | 
			
		||||
        success = False
 | 
			
		||||
        try:
 | 
			
		||||
            if not event.internal_metadata.is_outlier() and not backfilled:
 | 
			
		||||
                yield self.action_generator.handle_push_actions_for_event(
 | 
			
		||||
| 
						 | 
				
			
			@ -1612,16 +1614,14 @@ class FederationHandler(BaseHandler):
 | 
			
		|||
                [(event, context)],
 | 
			
		||||
                backfilled=backfilled,
 | 
			
		||||
            )
 | 
			
		||||
        except:  # noqa: E722, as we reraise the exception this is fine.
 | 
			
		||||
            tp, value, tb = sys.exc_info()
 | 
			
		||||
 | 
			
		||||
            success = True
 | 
			
		||||
        finally:
 | 
			
		||||
            if not success:
 | 
			
		||||
                logcontext.run_in_background(
 | 
			
		||||
                    self.store.remove_push_actions_from_staging,
 | 
			
		||||
                    event.event_id,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            six.reraise(tp, value, tb)
 | 
			
		||||
 | 
			
		||||
        defer.returnValue(context)
 | 
			
		||||
 | 
			
		||||
    @defer.inlineCallbacks
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,7 @@
 | 
			
		|||
# See the License for the specific language governing permissions and
 | 
			
		||||
# limitations under the License.
 | 
			
		||||
import logging
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
import six
 | 
			
		||||
from six import iteritems, itervalues, string_types
 | 
			
		||||
 | 
			
		||||
from canonicaljson import encode_canonical_json, json
 | 
			
		||||
| 
						 | 
				
			
			@ -624,6 +622,9 @@ class EventCreationHandler(object):
 | 
			
		|||
            event, context
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        # reraise does not allow inlineCallbacks to preserve the stacktrace, so we
 | 
			
		||||
        # hack around with a try/finally instead.
 | 
			
		||||
        success = False
 | 
			
		||||
        try:
 | 
			
		||||
            # If we're a worker we need to hit out to the master.
 | 
			
		||||
            if self.config.worker_app:
 | 
			
		||||
| 
						 | 
				
			
			@ -636,6 +637,7 @@ class EventCreationHandler(object):
 | 
			
		|||
                    ratelimit=ratelimit,
 | 
			
		||||
                    extra_users=extra_users,
 | 
			
		||||
                )
 | 
			
		||||
                success = True
 | 
			
		||||
                return
 | 
			
		||||
 | 
			
		||||
            yield self.persist_and_notify_client_event(
 | 
			
		||||
| 
						 | 
				
			
			@ -645,18 +647,17 @@ class EventCreationHandler(object):
 | 
			
		|||
                ratelimit=ratelimit,
 | 
			
		||||
                extra_users=extra_users,
 | 
			
		||||
            )
 | 
			
		||||
        except:  # noqa: E722, as we reraise the exception this is fine.
 | 
			
		||||
 | 
			
		||||
            success = True
 | 
			
		||||
        finally:
 | 
			
		||||
            if not success:
 | 
			
		||||
                # Ensure that we actually remove the entries in the push actions
 | 
			
		||||
                # staging area, if we calculated them.
 | 
			
		||||
            tp, value, tb = sys.exc_info()
 | 
			
		||||
 | 
			
		||||
                run_in_background(
 | 
			
		||||
                    self.store.remove_push_actions_from_staging,
 | 
			
		||||
                    event.event_id,
 | 
			
		||||
                )
 | 
			
		||||
 | 
			
		||||
            six.reraise(tp, value, tb)
 | 
			
		||||
 | 
			
		||||
    @defer.inlineCallbacks
 | 
			
		||||
    def persist_and_notify_client_event(
 | 
			
		||||
        self,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue