From cd2286a6679640c5a8846e8d5c77e40a7cf0e1d8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 Jan 2025 10:00:21 -1000 Subject: [PATCH 1/5] feat: improve performance of processing incoming records --- src/zeroconf/_handlers/record_manager.pxd | 4 ++-- src/zeroconf/_handlers/record_manager.py | 8 ++++++-- src/zeroconf/_record_update.pxd | 2 ++ src/zeroconf/_record_update.py | 8 +++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/zeroconf/_handlers/record_manager.pxd b/src/zeroconf/_handlers/record_manager.pxd index 5be2c283b..d4e068c2e 100644 --- a/src/zeroconf/_handlers/record_manager.pxd +++ b/src/zeroconf/_handlers/record_manager.pxd @@ -6,12 +6,11 @@ from .._dns cimport DNSQuestion, DNSRecord from .._protocol.incoming cimport DNSIncoming from .._updates cimport RecordUpdateListener from .._utils.time cimport current_time_millis - +from .._record_update cimport RecordUpdate cdef cython.float _DNS_PTR_MIN_TTL cdef cython.uint _TYPE_PTR cdef object _ADDRESS_RECORD_TYPES -cdef object RecordUpdate cdef bint TYPE_CHECKING cdef object _TYPE_PTR @@ -31,6 +30,7 @@ cdef class RecordManager: record=DNSRecord, answers=cython.list, maybe_entry=DNSRecord, + rec_update=RecordUpdate ) cpdef void async_updates_from_response(self, DNSIncoming msg) diff --git a/src/zeroconf/_handlers/record_manager.py b/src/zeroconf/_handlers/record_manager.py index 0bb049966..73f5c96b4 100644 --- a/src/zeroconf/_handlers/record_manager.py +++ b/src/zeroconf/_handlers/record_manager.py @@ -120,11 +120,15 @@ def async_updates_from_response(self, msg: DNSIncoming) -> None: address_adds.append(record) else: other_adds.append(record) - updates.append(RecordUpdate(record, maybe_entry)) + rec_update = RecordUpdate.__new__(RecordUpdate) + rec_update._fast_init(record, maybe_entry) + updates.append(rec_update) # This is likely a goodbye since the record is # expired and exists in the cache elif maybe_entry is not None: - updates.append(RecordUpdate(record, maybe_entry)) + rec_update = RecordUpdate.__new__(RecordUpdate) + rec_update._fast_init(maybe_entry, record) + updates.append(rec_update) removes.add(record) if unique_types: diff --git a/src/zeroconf/_record_update.pxd b/src/zeroconf/_record_update.pxd index d1b18cbe0..8334ced9c 100644 --- a/src/zeroconf/_record_update.pxd +++ b/src/zeroconf/_record_update.pxd @@ -8,3 +8,5 @@ cdef class RecordUpdate: cdef public DNSRecord new cdef public DNSRecord old + + cdef _fast_init(self, object new, object old) diff --git a/src/zeroconf/_record_update.py b/src/zeroconf/_record_update.py index 880b7a1b2..057afdc00 100644 --- a/src/zeroconf/_record_update.py +++ b/src/zeroconf/_record_update.py @@ -24,12 +24,18 @@ from ._dns import DNSRecord +_DNSRecord = DNSRecord + class RecordUpdate: __slots__ = ("new", "old") - def __init__(self, new: DNSRecord, old: Optional[DNSRecord] = None): + def __init__(self, new: DNSRecord, old: Optional[DNSRecord] = None) -> None: """RecordUpdate represents a change in a DNS record.""" + self._fast_init(new, old) + + def _fast_init(self, new: _DNSRecord, old: Optional[_DNSRecord] = None) -> None: + """Fast init for RecordUpdate.""" self.new = new self.old = old From e55a0ae6a0dd72fa5425a2c9420bdc1679fdc3f8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 Jan 2025 10:02:33 -1000 Subject: [PATCH 2/5] feat: improve performance of processing incoming records --- src/zeroconf/_record_update.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zeroconf/_record_update.py b/src/zeroconf/_record_update.py index 057afdc00..912ab6f1d 100644 --- a/src/zeroconf/_record_update.py +++ b/src/zeroconf/_record_update.py @@ -34,7 +34,7 @@ def __init__(self, new: DNSRecord, old: Optional[DNSRecord] = None) -> None: """RecordUpdate represents a change in a DNS record.""" self._fast_init(new, old) - def _fast_init(self, new: _DNSRecord, old: Optional[_DNSRecord] = None) -> None: + def _fast_init(self, new: _DNSRecord, old: Optional[_DNSRecord]) -> None: """Fast init for RecordUpdate.""" self.new = new self.old = old From f46394d119aaa41690f1692dfb7492e71bfab624 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 Jan 2025 10:03:08 -1000 Subject: [PATCH 3/5] feat: improve performance of processing incoming records --- src/zeroconf/_record_update.pxd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zeroconf/_record_update.pxd b/src/zeroconf/_record_update.pxd index 8334ced9c..1562299b2 100644 --- a/src/zeroconf/_record_update.pxd +++ b/src/zeroconf/_record_update.pxd @@ -9,4 +9,4 @@ cdef class RecordUpdate: cdef public DNSRecord new cdef public DNSRecord old - cdef _fast_init(self, object new, object old) + cdef void _fast_init(self, object new, object old) From b29602c7ba5c74ee56c06c703b52394bb447931b Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Wed, 8 Jan 2025 10:14:05 -1000 Subject: [PATCH 4/5] fix: order --- src/zeroconf/_handlers/record_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zeroconf/_handlers/record_manager.py b/src/zeroconf/_handlers/record_manager.py index 73f5c96b4..2d76390d6 100644 --- a/src/zeroconf/_handlers/record_manager.py +++ b/src/zeroconf/_handlers/record_manager.py @@ -127,7 +127,7 @@ def async_updates_from_response(self, msg: DNSIncoming) -> None: # expired and exists in the cache elif maybe_entry is not None: rec_update = RecordUpdate.__new__(RecordUpdate) - rec_update._fast_init(maybe_entry, record) + rec_update._fast_init(record , maybe_entry) updates.append(rec_update) removes.add(record) From c3a1ca0074bcbd20e70ccd37d2e43fa435cfda34 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 20:14:19 +0000 Subject: [PATCH 5/5] chore(pre-commit.ci): auto fixes --- src/zeroconf/_handlers/record_manager.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zeroconf/_handlers/record_manager.py b/src/zeroconf/_handlers/record_manager.py index 2d76390d6..5f25ceb11 100644 --- a/src/zeroconf/_handlers/record_manager.py +++ b/src/zeroconf/_handlers/record_manager.py @@ -127,7 +127,7 @@ def async_updates_from_response(self, msg: DNSIncoming) -> None: # expired and exists in the cache elif maybe_entry is not None: rec_update = RecordUpdate.__new__(RecordUpdate) - rec_update._fast_init(record , maybe_entry) + rec_update._fast_init(record, maybe_entry) updates.append(rec_update) removes.add(record)