项目文件夹

文件
2026-07-13 12:24:33 +08:00

85 行
2.5 KiB
Python

#!/usr/bin/env python3
# SPDX-License-Identifier: Apache-2.0
# This script implements a health check probe for the LMCache server.
# It performs the following functions:
# 1. Sends a health check request to the LMCache server
# 2. Verifies the server's response indicates successful operation
# 3. Serves as a Kubernetes liveness probe to monitor server health
# 4. Helps ensure the server is running and responsive
# Standard
import socket
import sys
# Third Party
import torch
# First Party
from lmcache.v1.protocol import (
CacheEngineKey,
ClientCommand,
ClientMetaMessage,
MemoryFormat,
ServerMetaMessage,
ServerReturnCode,
)
def main():
if len(sys.argv) != 3:
print("Usage: health_probe.py <host> <port>", file=sys.stderr)
sys.exit(1)
host = sys.argv[1]
port = int(sys.argv[2])
try:
# Create connection with timeout and ensure proper cleanup with context manager
with socket.create_connection((host, port), timeout=5) as s:
# Create and send health check message
msg = ClientMetaMessage(
ClientCommand.HEALTH,
key=CacheEngineKey(
model_name="",
world_size=0,
worker_id=0,
chunk_hash=0,
dtype=torch.float16,
),
length=0,
fmt=MemoryFormat(1),
dtype=torch.float16,
shape=torch.Size((0, 0, 0, 0)),
)
s.sendall(msg.serialize())
# Receive and parse response
resp = s.recv(ServerMetaMessage.packlength())
if not resp:
print("No response received from server", file=sys.stderr)
sys.exit(1)
# Parse the response message
meta = ServerMetaMessage.deserialize(resp)
# Check if server responded with success
if meta.code == ServerReturnCode.SUCCESS:
sys.exit(0)
else:
print(f"Server returned error code: {meta.code}", file=sys.stderr)
sys.exit(1)
except socket.timeout:
print("Connection timed out", file=sys.stderr)
sys.exit(1)
except ConnectionRefusedError:
print("Connection refused - server may not be running", file=sys.stderr)
sys.exit(1)
except Exception as e:
print(f"Error during health check: {str(e)}", file=sys.stderr)
sys.exit(1)
if __name__ == "__main__":
main()