Adds configuration variable to the inotify debounce timing

This commit is contained in:
Trenton Holmes
2022-05-15 11:48:12 -07:00
parent 0ddb073e9b
commit 836373bc3b
4 changed files with 40 additions and 4 deletions

View File

@@ -216,7 +216,7 @@ class Command(BaseCommand):
try:
inotify_debounce: Final[float] = 0.5
inotify_debounce: Final[float] = settings.CONSUMER_INOTIFY_DELAY
notified_files = {}
while not self.stop_flag:
@@ -234,10 +234,23 @@ class Command(BaseCommand):
for filepath in notified_files:
# Time of the last inotify event for this file
last_event_time = notified_files[filepath]
if (monotonic() - last_event_time) > inotify_debounce:
# Current time - last time over the configured timeout
waited_long_enough = (
monotonic() - last_event_time
) > inotify_debounce
# Also make sure the file exists still, some scanners might write a
# temporary file first
file_still_exists = os.path.exists(filepath) and os.path.isfile(
filepath,
)
if waited_long_enough and file_still_exists:
_consume(filepath)
else:
elif file_still_exists:
still_waiting[filepath] = last_event_time
# These files are still waiting to hit the timeout
notified_files = still_waiting

View File

@@ -98,6 +98,9 @@ class ConsumerMixin:
print("file completed.")
@override_settings(
CONSUMER_INOTIFY_DELAY=0.01,
)
class TestConsumer(DirectoriesMixin, ConsumerMixin, TransactionTestCase):
def test_consume_file(self):
self.t_start()
@@ -286,7 +289,7 @@ class TestConsumerPolling(TestConsumer):
pass
@override_settings(CONSUMER_RECURSIVE=True)
@override_settings(CONSUMER_INOTIFY_DELAY=0.01, CONSUMER_RECURSIVE=True)
class TestConsumerRecursive(TestConsumer):
# just do all the tests with recursive
pass