Skip to content

Commit d34664f

Browse files
committed
Avoid closing upstream if its managed by plugins
1 parent ad2e107 commit d34664f

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

proxy/http/server/reverse.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def __init__(self, *args: Any, **kwargs: Any):
4646
)
4747
self.plugins.append(plugin)
4848
self._upstream_proxy_pass: Optional[str] = None
49+
self._needs_upstream: bool = False
4950

5051
def do_upgrade(self, request: HttpParser) -> bool:
5152
"""Signal web protocol handler to not upgrade websocket requests by default."""
@@ -72,8 +73,6 @@ def handle_request(self, request: HttpParser) -> None:
7273
raise HttpProtocolException('before_routing closed connection')
7374
request = r
7475

75-
needs_upstream = False
76-
7776
# routes
7877
for plugin in self.plugins:
7978
for route in plugin.routes():
@@ -84,7 +83,7 @@ def handle_request(self, request: HttpParser) -> None:
8483
self.choice = Url.from_bytes(
8584
random.choice(route[1]),
8685
)
87-
needs_upstream = True
86+
self._needs_upstream = True
8887
break
8988
# Dynamic routes
9089
elif isinstance(route, str):
@@ -93,7 +92,7 @@ def handle_request(self, request: HttpParser) -> None:
9392
choice = plugin.handle_route(request, pattern)
9493
if isinstance(choice, Url):
9594
self.choice = choice
96-
needs_upstream = True
95+
self._needs_upstream = True
9796
self._upstream_proxy_pass = str(self.choice)
9897
elif isinstance(choice, memoryview):
9998
self.client.queue(choice)
@@ -107,7 +106,7 @@ def handle_request(self, request: HttpParser) -> None:
107106
else:
108107
raise ValueError('Invalid route')
109108

110-
if needs_upstream:
109+
if self._needs_upstream:
111110
assert self.choice and self.choice.hostname
112111
port = (
113112
self.choice.port or DEFAULT_HTTP_PORT
@@ -150,10 +149,10 @@ def handle_request(self, request: HttpParser) -> None:
150149
)
151150

152151
def on_client_connection_close(self) -> None:
153-
if self.upstream and not self.upstream.closed:
152+
if self._needs_upstream and self.upstream and not self.upstream.closed:
154153
logger.debug('Closing upstream server connection')
155154
self.upstream.close()
156-
self.upstream = None
155+
self.upstream = None
157156

158157
def on_client_data(
159158
self,

0 commit comments

Comments
 (0)