MCPcopy
hub / github.com/benoitc/gunicorn / handle_manage_request

Method handle_manage_request

gunicorn/dirty/arbiter.py:697–789  ·  view source on GitHub ↗

Handle a worker management request. Supports adding or removing dirty workers via protocol messages. Args: message: Manage request message client_writer: StreamWriter to send response to client

(self, message, client_writer)

Source from the content-addressed store, hash-verified

695 await DirtyProtocol.write_message_async(client_writer, response)
696
697 async def handle_manage_request(self, message, client_writer):
698 """
699 Handle a worker management request.
700
701 Supports adding or removing dirty workers via protocol messages.
702
703 Args:
704 message: Manage request message
705 client_writer: StreamWriter to send response to client
706 """
707 request_id = message.get("id", "unknown")
708 op = message.get("op")
709 count = max(1, int(message.get("count", 1)))
710
711 try:
712 if op == MANAGE_OP_ADD:
713 # Add workers - only loads apps that need more workers
714 spawned = 0
715 for _ in range(count):
716 result = self.spawn_worker()
717 if result is not None:
718 self.num_workers += 1
719 spawned += 1
720 await asyncio.sleep(0.1)
721
722 # Provide feedback about why no workers were spawned
723 if spawned == 0:
724 result = {
725 "success": True,
726 "operation": "add",
727 "requested": count,
728 "spawned": 0,
729 "reason": "All apps have reached their worker limits",
730 "total_workers": len(self.workers),
731 "target_workers": self.num_workers,
732 }
733 else:
734 result = {
735 "success": True,
736 "operation": "add",
737 "requested": count,
738 "spawned": spawned,
739 "total_workers": len(self.workers),
740 "target_workers": self.num_workers,
741 }
742
743 elif op == MANAGE_OP_REMOVE:
744 # Remove workers (similar to TTOU signal but via message)
745 min_workers = self._get_minimum_workers()
746 removed = 0
747
748 for _ in range(count):
749 if self.num_workers <= min_workers:
750 break
751 if len(self.workers) <= 1:
752 break
753
754 self.num_workers -= 1

Callers 1

handle_clientMethod · 0.95

Calls 11

spawn_workerMethod · 0.95
_get_minimum_workersMethod · 0.95
kill_workerMethod · 0.95
DirtyErrorClass · 0.85
make_error_responseFunction · 0.70
make_responseFunction · 0.70
getMethod · 0.45
keysMethod · 0.45
write_message_asyncMethod · 0.45
infoMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected