From 4ed45a322cd06e943422e05ef56a73a00f2c3c80 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 21 May 2024 15:11:27 -1000 Subject: [PATCH] Reduce overhead to call get_mqtt_data (#117887) We call this 100000s of times if there are many subscriptions https://github.com/home-assistant/core/pull/109030#issuecomment-2123612530 --- homeassistant/components/mqtt/__init__.py | 1 + homeassistant/components/mqtt/util.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/homeassistant/components/mqtt/__init__.py b/homeassistant/components/mqtt/__init__.py index 6c70b39c9646..2123625bffb6 100644 --- a/homeassistant/components/mqtt/__init__.py +++ b/homeassistant/components/mqtt/__init__.py @@ -241,6 +241,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: websocket_api.async_register_command(hass, websocket_subscribe) websocket_api.async_register_command(hass, websocket_mqtt_info) hass.data[DATA_MQTT] = mqtt_data = MqttData(config=mqtt_yaml, client=client) + get_mqtt_data.cache_clear() client.start(mqtt_data) # Restore saved subscriptions diff --git a/homeassistant/components/mqtt/util.py b/homeassistant/components/mqtt/util.py index 6f8392c5cf1f..6f9fb8316bbe 100644 --- a/homeassistant/components/mqtt/util.py +++ b/homeassistant/components/mqtt/util.py @@ -3,6 +3,7 @@ from __future__ import annotations import asyncio +from functools import lru_cache import os from pathlib import Path import tempfile @@ -216,6 +217,7 @@ def valid_birth_will(config: ConfigType) -> ConfigType: return config +@lru_cache(maxsize=1) def get_mqtt_data(hass: HomeAssistant) -> MqttData: """Return typed MqttData from hass.data[DATA_MQTT].""" mqtt_data: MqttData = hass.data[DATA_MQTT]