MCPcopy Create free account
hub / github.com/Dispatcharr/Dispatcharr / _clean_redis_keys

Method _clean_redis_keys

apps/proxy/live_proxy/server.py:2166–2210  ·  view source on GitHub ↗

Clean up all Redis keys for a channel more efficiently

(self, channel_id)

Source from the content-addressed store, hash-verified

2164 logger.error(f"Error checking orphaned metadata: {e}", exc_info=True)
2165
2166 def _clean_redis_keys(self, channel_id):
2167 """Clean up all Redis keys for a channel more efficiently"""
2168 total_deleted = 0
2169
2170 try:
2171 # Release the M3U profile slot while channel_stream / metadata still exist.
2172 # Scanning live:channel keys first deletes metadata and breaks release_stream()
2173 # fallback, leaving profile_connections counters stuck (e.g. profile_connections:70 = 1).
2174 try:
2175 channel = Channel.objects.get(uuid=channel_id)
2176 if not channel.release_stream():
2177 logger.debug(f"Channel {channel_id}: release_stream found no keys to clean")
2178 except (Channel.DoesNotExist, Exception):
2179 try:
2180 stream = Stream.objects.get(stream_hash=channel_id)
2181 if not stream.release_stream():
2182 logger.debug(f"Stream {channel_id}: release_stream found no keys to clean")
2183 except (Stream.DoesNotExist, Exception):
2184 logger.debug(f"No Channel or Stream found for {channel_id}")
2185
2186 if self.redis_client:
2187 try:
2188 patterns = [
2189 f"live:channel:{channel_id}:*",
2190 RedisKeys.events_channel(channel_id),
2191 ]
2192
2193 for pattern in patterns:
2194 cursor = 0
2195 while True:
2196 cursor, keys = self.redis_client.scan(cursor, match=pattern, count=100)
2197 if keys:
2198 self.redis_client.delete(*keys)
2199 total_deleted += len(keys)
2200
2201 if cursor == 0:
2202 break
2203
2204 logger.info(f"Cleaned up {total_deleted} Redis keys for channel {channel_id}")
2205 except Exception as e:
2206 logger.error(f"Error cleaning Redis keys for channel {channel_id}: {e}")
2207 finally:
2208 close_old_connections()
2209
2210 return total_deleted
2211
2212 def refresh_channel_registry(self):
2213 """Refresh TTL for active channels using standard keys"""

Calls 5

events_channelMethod · 0.80
scanMethod · 0.80
getMethod · 0.45
release_streamMethod · 0.45
deleteMethod · 0.45