1414from limits .strategies import FixedWindowRateLimiter
1515
1616from logstash_async .constants import constants
17- from logstash_async .database import DatabaseCache , DatabaseLockedError
17+ from logstash_async .database import DatabaseCache , DatabaseLockedError , DatabaseDiskIOError
1818from logstash_async .memory_cache import MemoryCache
1919from logstash_async .utils import safe_log_via_print
2020
@@ -128,7 +128,7 @@ def _fetch_events(self):
128128 self ._flush_queued_events (force = force_flush )
129129 self ._delay_processing ()
130130 self ._expire_events ()
131- except (DatabaseLockedError , ProcessingError ):
131+ except (DatabaseLockedError , ProcessingError , DatabaseDiskIOError ):
132132 if self ._shutdown_requested ():
133133 return
134134
@@ -150,6 +150,13 @@ def _process_event(self):
150150 self ._queue .qsize (),
151151 exc = exc )
152152 raise
153+ except DatabaseDiskIOError as exc :
154+ self ._safe_log (
155+ 'debug' ,
156+ 'Disk I/O error, will try again later (queue length %d)' ,
157+ self ._queue .qsize (),
158+ exc = exc )
159+ raise
153160 except Exception as exc :
154161 self ._log_processing_error (exc )
155162 raise ProcessingError from exc
@@ -160,7 +167,7 @@ def _process_event(self):
160167 def _expire_events (self ):
161168 try :
162169 self ._database .expire_events ()
163- except DatabaseLockedError :
170+ except ( DatabaseLockedError , DatabaseDiskIOError ) :
164171 # Nothing to handle, if it fails, we will either successfully publish
165172 # these messages next time or we will delete them on the next pass.
166173 pass
@@ -242,6 +249,13 @@ def _fetch_queued_events_for_flush(self):
242249 'Database is locked, will try again later (queue length %d)' ,
243250 self ._queue .qsize (),
244251 exc = exc )
252+ except DatabaseDiskIOError as exc :
253+ self ._safe_log (
254+ 'debug' ,
255+ 'Disk I/O error, will try again later (queue length %d)' ,
256+ self ._queue .qsize (),
257+ exc = exc )
258+ raise
245259 except Exception as exc :
246260 # just log the exception and hope we can recover from the error
247261 self ._safe_log ('exception' , 'Error retrieving queued events: %s' , exc , exc = exc )
@@ -252,7 +266,7 @@ def _fetch_queued_events_for_flush(self):
252266 def _delete_queued_events_from_database (self ):
253267 try :
254268 self ._database .delete_queued_events ()
255- except DatabaseLockedError :
269+ except ( DatabaseLockedError , DatabaseDiskIOError ) :
256270 pass # nothing to handle, if it fails, we delete those events in a later run
257271
258272 # ----------------------------------------------------------------------
0 commit comments