Skip to content

Commit

Permalink
Merge pull request #193 from openedx/diana/custom-exceptions
Browse files Browse the repository at this point in the history
feat: Use custom exceptions for recording errors.
  • Loading branch information
dianakhuang authored Aug 29, 2023
2 parents e8a99d9 + 333e8cd commit d867e8e
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 5 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ Change Log
Unreleased
**********

[5.4.0] - 2023-08-28
********************
Changed
=======
* Changed ordering of certain context assignments in producer code.
* Adds custom exceptions for producing and consuming errors.

[5.3.1] - 2023-08-10
********************
Expand Down
2 changes: 1 addition & 1 deletion edx_event_bus_kafka/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@
from edx_event_bus_kafka.internal.consumer import KafkaEventConsumer
from edx_event_bus_kafka.internal.producer import KafkaEventProducer, create_producer

__version__ = '5.3.1'
__version__ = '5.4.0'
10 changes: 8 additions & 2 deletions edx_event_bus_kafka/internal/consumer.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ def __init__(self, message: str, causes: list):
self.causes = causes # just used for testing


class EventConsumptionException(Exception):
"""
Indicates that we had an issue in event production. Useful for filtering on later.
"""


def _reconnect_to_db_if_needed():
"""
Reconnects the db connection if needed.
Expand Down Expand Up @@ -513,8 +519,8 @@ def record_event_consuming_error(self, run_context, error, maybe_message):
try:
# This is gross, but our record_exception wrapper doesn't take args at the moment,
# and will only read the exception from stack context.
raise Exception(error)
except BaseException:
raise EventConsumptionException(error)
except EventConsumptionException:
self._add_message_monitoring(run_context=run_context, message=maybe_kafka_message, error=error)
record_exception()
logger.exception(
Expand Down
8 changes: 6 additions & 2 deletions edx_event_bus_kafka/internal/producer.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@
confluent_kafka = None


class EventProductionException(Exception):
""" An exception we can check for when errors occur in event production code. """


def record_producing_error(error, context):
"""
Record an error in producing an event to both the monitoring system and the regular logs
Expand All @@ -49,8 +53,8 @@ def record_producing_error(error, context):
try:
# record_exception() is a wrapper around a New Relic method that can only be called within an except block,
# so first re-raise the error
raise Exception(error)
except BaseException:
raise EventProductionException(error)
except EventProductionException:
record_exception()
logger.exception(f"Error delivering message to Kafka event bus. {error=!s} {context!r}")

Expand Down

0 comments on commit d867e8e

Please sign in to comment.