@@ -33,10 +33,12 @@ async def listen_for_disconnect(request: Request) -> None:
33
33
while True :
34
34
message = await request .receive ()
35
35
if message ["type" ] == "http.disconnect" :
36
- if request .app .state .enable_server_load_tracking :
37
- # on timeout/cancellation the BackgroundTask in load_aware_call
38
- # cannot decrement the server load metrics.
39
- # Must be decremented by with_cancellation instead.
36
+ # If load tracking is enabled *and* the counter exists, decrement
37
+ # it. Combines the previous nested checks into a single condition
38
+ # to satisfy the linter rule.
39
+ if (getattr (request .app .state , "enable_server_load_tracking" ,
40
+ False )
41
+ and hasattr (request .app .state , "server_load_metrics" )):
40
42
request .app .state .server_load_metrics -= 1
41
43
break
42
44
@@ -101,9 +103,14 @@ async def wrapper(*args, **kwargs):
101
103
raise ValueError (
102
104
"raw_request required when server load tracking is enabled" )
103
105
104
- if not raw_request .app .state .enable_server_load_tracking :
106
+ if not getattr (raw_request .app .state , "enable_server_load_tracking" ,
107
+ False ):
105
108
return await func (* args , ** kwargs )
106
109
110
+ # ensure the counter exists
111
+ if not hasattr (raw_request .app .state , "server_load_metrics" ):
112
+ raw_request .app .state .server_load_metrics = 0
113
+
107
114
raw_request .app .state .server_load_metrics += 1
108
115
try :
109
116
response = await func (* args , ** kwargs )
0 commit comments