Round 5 fixes: workerpool resize shrink, validator lazy session close, plugin config error handling, 422 message detail, tests
This commit is contained in:
@@ -23,12 +23,14 @@ async def http_exception_handler(request: Request, exc: StarletteHTTPException):
|
||||
|
||||
async def pydantic_validation_handler(request: Request, exc: ValidationError):
|
||||
logger.error(f"Validation error: {exc}")
|
||||
errors = exc.errors()
|
||||
message = errors[0].get("msg", "参数验证失败") if errors else "参数验证失败"
|
||||
return JSONResponse(
|
||||
status_code=422,
|
||||
content={
|
||||
"code": 422,
|
||||
"message": "参数验证失败",
|
||||
"data": exc.errors(),
|
||||
"message": message,
|
||||
"data": errors,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
@@ -54,9 +54,7 @@ async def update_plugin_config(
|
||||
request: ConfigRequest,
|
||||
service: PluginService = Depends(get_plugin_service),
|
||||
):
|
||||
success = await service.update_plugin_config(plugin_id, request.config)
|
||||
if not success:
|
||||
raise PluginNotFoundException(plugin_id)
|
||||
await service.update_plugin_config(plugin_id, request.config)
|
||||
return success_response("保存插件配置成功", {"plugin_id": plugin_id, "config": request.config})
|
||||
|
||||
|
||||
|
||||
@@ -52,9 +52,14 @@ async def save_settings(
|
||||
validator._init_max_concurrency = request.default_concurrency
|
||||
if request.validation_targets is not None:
|
||||
validator.update_test_urls(request.validation_targets)
|
||||
# 先关闭现有 session,再重置 semaphore,避免竞态窗口
|
||||
await validator.close()
|
||||
# 延迟关闭旧 session:让正在验证的代理继续使用旧 session,
|
||||
# 新请求会通过 _ensure_session() 自动创建使用新配置的 session
|
||||
old_session = validator._http_session
|
||||
validator._http_session = None
|
||||
validator._http_connector = None
|
||||
validator._semaphore = None
|
||||
if old_session and not old_session.closed:
|
||||
asyncio.create_task(old_session.close())
|
||||
logger.info(f"Validator config updated: timeout={request.validation_timeout}, concurrency={request.default_concurrency}, targets={request.validation_targets}")
|
||||
|
||||
return success_response("保存设置成功", request.model_dump())
|
||||
|
||||
Reference in New Issue
Block a user