|
@@ -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,17 +647,16 @@ class EventCreationHandler(object):
|
|
|
ratelimit=ratelimit,
|
|
|
extra_users=extra_users,
|
|
|
)
|
|
|
- except: # noqa: E722, as we reraise the exception this is fine.
|
|
|
- # 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)
|
|
|
+ success = True
|
|
|
+ finally:
|
|
|
+ if not success:
|
|
|
+ # Ensure that we actually remove the entries in the push actions
|
|
|
+ # staging area, if we calculated them.
|
|
|
+ run_in_background(
|
|
|
+ self.store.remove_push_actions_from_staging,
|
|
|
+ event.event_id,
|
|
|
+ )
|
|
|
|
|
|
@defer.inlineCallbacks
|
|
|
def persist_and_notify_client_event(
|