refactor(config): 移除已废弃的配置字段

移除以下已标记废弃的字段:
- AuthConfig.MinPasswordLength (auth)
- FileCacheConfig.LRUEviction (file_cache)
- TransportConfig.MaxIdleConns (transport)

同时清理相关的验证逻辑、默认值设置、测试代码和文档。

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-08 09:50:32 +08:00
parent b30c84a38b
commit ee4f7a5ca9
8 changed files with 7 additions and 77 deletions

View File

@ -470,7 +470,6 @@ next_upstream:
| `max_entries` | int64 | `10000` | 最大缓存条目数 | | `max_entries` | int64 | `10000` | 最大缓存条目数 |
| `max_size` | int64 | `268435456` (256MB) | 内存上限 | | `max_size` | int64 | `268435456` (256MB) | 内存上限 |
| `inactive` | duration | `20s` | 未访问淘汰时间 | | `inactive` | duration | `20s` | 未访问淘汰时间 |
| `lru_eviction` | bool | - | **已废弃,请使用 max_size** |
### TransportConfig ### TransportConfig

View File

@ -1041,7 +1041,6 @@ cache:
max_entries: 10000 max_entries: 10000
max_size: 256MB # 内存上限 max_size: 256MB # 内存上限
inactive: 20s inactive: 20s
lru_eviction: true # 启用 LRU 淘汰
proxy: proxy:
enabled: true enabled: true

View File

@ -743,10 +743,6 @@ type AuthConfig struct {
// Realm 认证域 // Realm 认证域
// 显示在浏览器认证对话框中的描述信息 // 显示在浏览器认证对话框中的描述信息
Realm string `yaml:"realm"` Realm string `yaml:"realm"`
// MinPasswordLength 密码最小长度
// Deprecated: 该字段已废弃,将在未来版本中移除。密码长度验证应在密码哈希生成阶段进行
MinPasswordLength int `yaml:"min_password_length"`
} }
// User 认证用户配置。 // User 认证用户配置。
@ -1087,7 +1083,6 @@ type GoroutinePoolConfig struct {
// - MaxEntries 限制最大缓存文件数量 // - MaxEntries 限制最大缓存文件数量
// - MaxSize 限制缓存总内存使用量(字节) // - MaxSize 限制缓存总内存使用量(字节)
// - Inactive 超过此时间未访问的文件将被淘汰 // - Inactive 超过此时间未访问的文件将被淘汰
// - LRUEviction 已废弃,请使用 MaxSize
// //
// 使用示例: // 使用示例:
// //
@ -1107,10 +1102,6 @@ type FileCacheConfig struct {
// Inactive 未访问淘汰时间 // Inactive 未访问淘汰时间
// 超过此时间未被访问的缓存将被清除 // 超过此时间未被访问的缓存将被清除
Inactive time.Duration `yaml:"inactive"` Inactive time.Duration `yaml:"inactive"`
// LRUEviction 启用 LRU 淘汰
// Deprecated: 该字段已废弃,将在未来版本中移除,请使用 MaxSize 代替
LRUEviction bool `yaml:"lru_eviction"`
} }
// TransportConfig HTTP Transport 配置。 // TransportConfig HTTP Transport 配置。
@ -1118,7 +1109,6 @@ type FileCacheConfig struct {
// 配置代理后端连接的连接池参数。 // 配置代理后端连接的连接池参数。
// //
// 注意事项: // 注意事项:
// - MaxIdleConns 控制所有主机的总空闲连接数
// - MaxIdleConnsPerHost 控制每个后端主机的空闲连接 // - MaxIdleConnsPerHost 控制每个后端主机的空闲连接
// - IdleConnTimeout 控制空闲连接的保持时间 // - IdleConnTimeout 控制空闲连接的保持时间
// - MaxConnsPerHost 限制每个后端主机的总连接数 // - MaxConnsPerHost 限制每个后端主机的总连接数
@ -1126,15 +1116,10 @@ type FileCacheConfig struct {
// 使用示例: // 使用示例:
// //
// transport: // transport:
// max_idle_conns: 100
// max_idle_conns_per_host: 10 // max_idle_conns_per_host: 10
// idle_conn_timeout: 90s // idle_conn_timeout: 90s
// max_conns_per_host: 100 // max_conns_per_host: 100
type TransportConfig struct { type TransportConfig struct {
// MaxIdleConns 最大空闲连接数
// Deprecated: 该字段已废弃fasthttp.HostClient 不支持此参数,请使用 MaxConnsPerHost 代替
MaxIdleConns int `yaml:"max_idle_conns"`
// MaxIdleConnsPerHost 每主机最大空闲连接 // MaxIdleConnsPerHost 每主机最大空闲连接
// 单个后端主机的最大空闲连接数 // 单个后端主机的最大空闲连接数
MaxIdleConnsPerHost int `yaml:"max_idle_conns_per_host"` MaxIdleConnsPerHost int `yaml:"max_idle_conns_per_host"`

View File

@ -75,10 +75,9 @@ func DefaultConfig() *Config {
SlidingWindow: 60, SlidingWindow: 60,
}, },
Auth: AuthConfig{ Auth: AuthConfig{
RequireTLS: true, RequireTLS: true,
Algorithm: "bcrypt", Algorithm: "bcrypt",
Realm: "Restricted Area", Realm: "Restricted Area",
MinPasswordLength: 0, // 已废弃,不再使用
}, },
Headers: SecurityHeaders{ Headers: SecurityHeaders{
XFrameOptions: "DENY", XFrameOptions: "DENY",
@ -126,7 +125,6 @@ func DefaultConfig() *Config {
Inactive: 20 * time.Second, Inactive: 20 * time.Second,
}, },
Transport: TransportConfig{ Transport: TransportConfig{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 32, MaxIdleConnsPerHost: 32,
IdleConnTimeout: 90 * time.Second, IdleConnTimeout: 90 * time.Second,
MaxConnsPerHost: 0, // 0 表示不限制 MaxConnsPerHost: 0, // 0 表示不限制
@ -290,7 +288,6 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) {
fmt.Fprintf(&buf, " algorithm: \"%s\" # 密码哈希算法(有效值: bcrypt, argon2id\n", cfg.Server.Security.Auth.Algorithm) fmt.Fprintf(&buf, " algorithm: \"%s\" # 密码哈希算法(有效值: bcrypt, argon2id\n", cfg.Server.Security.Auth.Algorithm)
buf.WriteString(" users: [] # 用户列表\n") buf.WriteString(" users: [] # 用户列表\n")
fmt.Fprintf(&buf, " realm: \"%s\" # 认证域\n", cfg.Server.Security.Auth.Realm) fmt.Fprintf(&buf, " realm: \"%s\" # 认证域\n", cfg.Server.Security.Auth.Realm)
fmt.Fprintf(&buf, " min_password_length: %d # 密码最小长度\n", cfg.Server.Security.Auth.MinPasswordLength)
buf.WriteString("\n") buf.WriteString("\n")
buf.WriteString(" # 安全头部\n") buf.WriteString(" # 安全头部\n")
buf.WriteString(" headers:\n") buf.WriteString(" headers:\n")
@ -428,7 +425,6 @@ func GenerateConfigYAML(cfg *Config) ([]byte, error) {
fmt.Fprintf(&buf, " max_size: %d # 内存上限(字节,%dMB\n", cfg.Performance.FileCache.MaxSize, cfg.Performance.FileCache.MaxSize/1024/1024) fmt.Fprintf(&buf, " max_size: %d # 内存上限(字节,%dMB\n", cfg.Performance.FileCache.MaxSize, cfg.Performance.FileCache.MaxSize/1024/1024)
fmt.Fprintf(&buf, " inactive: %ds # 未访问淘汰时间\n", int(cfg.Performance.FileCache.Inactive.Seconds())) fmt.Fprintf(&buf, " inactive: %ds # 未访问淘汰时间\n", int(cfg.Performance.FileCache.Inactive.Seconds()))
buf.WriteString(" transport: # HTTP Transport 连接池\n") buf.WriteString(" transport: # HTTP Transport 连接池\n")
fmt.Fprintf(&buf, " max_idle_conns: %d # 最大空闲连接\n", cfg.Performance.Transport.MaxIdleConns)
fmt.Fprintf(&buf, " max_idle_conns_per_host: %d # 每主机空闲连接\n", cfg.Performance.Transport.MaxIdleConnsPerHost) fmt.Fprintf(&buf, " max_idle_conns_per_host: %d # 每主机空闲连接\n", cfg.Performance.Transport.MaxIdleConnsPerHost)
fmt.Fprintf(&buf, " idle_conn_timeout: %ds # 空闲超时\n", int(cfg.Performance.Transport.IdleConnTimeout.Seconds())) fmt.Fprintf(&buf, " idle_conn_timeout: %ds # 空闲超时\n", int(cfg.Performance.Transport.IdleConnTimeout.Seconds()))
fmt.Fprintf(&buf, " max_conns_per_host: %d # 每主机最大连接0 表示不限制)\n", cfg.Performance.Transport.MaxConnsPerHost) fmt.Fprintf(&buf, " max_conns_per_host: %d # 每主机最大连接0 表示不限制)\n", cfg.Performance.Transport.MaxConnsPerHost)

View File

@ -119,12 +119,8 @@ func TestDefaultConfigPerformance(t *testing.T) {
if cfg.Performance.FileCache.Inactive != 20*time.Second { if cfg.Performance.FileCache.Inactive != 20*time.Second {
t.Errorf("FileCache.Inactive 期望 20s, 实际 %v", cfg.Performance.FileCache.Inactive) t.Errorf("FileCache.Inactive 期望 20s, 实际 %v", cfg.Performance.FileCache.Inactive)
} }
// 注意: LRUEviction 已废弃,不再验证
// 验证 Transport 默认值 // 验证 Transport 默认值
if cfg.Performance.Transport.MaxIdleConns != 100 {
t.Errorf("Transport.MaxIdleConns 期望 100, 实际 %d", cfg.Performance.Transport.MaxIdleConns)
}
if cfg.Performance.Transport.MaxIdleConnsPerHost != 32 { if cfg.Performance.Transport.MaxIdleConnsPerHost != 32 {
t.Errorf("Transport.MaxIdleConnsPerHost 期望 32, 实际 %d", cfg.Performance.Transport.MaxIdleConnsPerHost) t.Errorf("Transport.MaxIdleConnsPerHost 期望 32, 实际 %d", cfg.Performance.Transport.MaxIdleConnsPerHost)
} }

View File

@ -21,7 +21,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"net" "net"
"os"
"strings" "strings"
"rua.plus/lolly/internal/loadbalance" "rua.plus/lolly/internal/loadbalance"
@ -380,11 +379,6 @@ func validateAccess(a *AccessConfig) error {
// - algorithm 仅支持 bcrypt 或 argon2id // - algorithm 仅支持 bcrypt 或 argon2id
// - 启用认证时至少需要一个用户 // - 启用认证时至少需要一个用户
func validateAuth(a *AuthConfig) error { func validateAuth(a *AuthConfig) error {
// 检查废弃的 MinPasswordLength 字段
if a.MinPasswordLength > 0 {
fmt.Fprintln(os.Stderr, "[警告] security.auth.min_password_length 已废弃,将在未来版本中移除。密码长度验证应在密码哈希生成阶段进行")
}
// 未配置认证时跳过 // 未配置认证时跳过
if a.Type == "" { if a.Type == "" {
return nil return nil
@ -729,20 +723,7 @@ func validateStream(s *StreamConfig) error {
// 返回值: // 返回值:
// - error: 验证失败时返回错误信息,成功返回 nil // - error: 验证失败时返回错误信息,成功返回 nil
func validatePerformance(p *PerformanceConfig) error { func validatePerformance(p *PerformanceConfig) error {
// 检查废弃的 LRUEviction 字段
if p.FileCache.LRUEviction {
fmt.Fprintln(os.Stderr, "[警告] performance.file_cache.lru_eviction 已废弃,请使用 max_size 代替")
}
// 检查废弃的 MaxIdleConns 字段
if p.Transport.MaxIdleConns > 0 {
fmt.Fprintln(os.Stderr, "[警告] performance.transport.max_idle_conns 已废弃fasthttp 不支持此参数,请使用 max_conns_per_host 代替")
}
// 检查 Transport 配置(可能导致性能问题) // 检查 Transport 配置(可能导致性能问题)
if p.Transport.MaxIdleConns < 0 {
return errors.New("transport.max_idle_conns 不能为负数")
}
if p.Transport.MaxIdleConnsPerHost < 0 { if p.Transport.MaxIdleConnsPerHost < 0 {
return errors.New("transport.max_idle_conns_per_host 不能为负数") return errors.New("transport.max_idle_conns_per_host 不能为负数")
} }

View File

@ -1000,7 +1000,6 @@ func TestValidatePerformance(t *testing.T) {
name: "有效的 transport 配置(零值)", name: "有效的 transport 配置(零值)",
config: PerformanceConfig{ config: PerformanceConfig{
Transport: TransportConfig{ Transport: TransportConfig{
MaxIdleConns: 0,
MaxIdleConnsPerHost: 0, MaxIdleConnsPerHost: 0,
MaxConnsPerHost: 0, MaxConnsPerHost: 0,
}, },
@ -1011,32 +1010,12 @@ func TestValidatePerformance(t *testing.T) {
name: "有效的 transport 配置(正值)", name: "有效的 transport 配置(正值)",
config: PerformanceConfig{ config: PerformanceConfig{
Transport: TransportConfig{ Transport: TransportConfig{
MaxIdleConns: 100,
MaxIdleConnsPerHost: 10, MaxIdleConnsPerHost: 10,
MaxConnsPerHost: 50, MaxConnsPerHost: 50,
}, },
}, },
wantErr: false, wantErr: false,
}, },
{
name: "LRUEviction=true废弃警告",
config: PerformanceConfig{
FileCache: FileCacheConfig{
LRUEviction: true,
},
},
wantErr: false,
},
{
name: "MaxIdleConns 负数",
config: PerformanceConfig{
Transport: TransportConfig{
MaxIdleConns: -1,
},
},
wantErr: true,
errMsg: "transport.max_idle_conns 不能为负数",
},
{ {
name: "MaxIdleConnsPerHost 负数", name: "MaxIdleConnsPerHost 负数",
config: PerformanceConfig{ config: PerformanceConfig{
@ -1061,13 +1040,12 @@ func TestValidatePerformance(t *testing.T) {
name: "多个 transport 字段为负", name: "多个 transport 字段为负",
config: PerformanceConfig{ config: PerformanceConfig{
Transport: TransportConfig{ Transport: TransportConfig{
MaxIdleConns: -1,
MaxIdleConnsPerHost: -2, MaxIdleConnsPerHost: -2,
MaxConnsPerHost: -3, MaxConnsPerHost: -3,
}, },
}, },
wantErr: true, wantErr: true,
errMsg: "transport.max_idle_conns 不能为负数", errMsg: "transport.max_idle_conns_per_host 不能为负数",
}, },
} }

View File

@ -67,9 +67,6 @@ type BasicAuth struct {
// requireTLS 是否强制 HTTPS默认 true // requireTLS 是否强制 HTTPS默认 true
requireTLS bool requireTLS bool
// minPasswordLength 密码最小长度(用于验证)
minPasswordLength int
// argon2Params Argon2id 配置参数 // argon2Params Argon2id 配置参数
argon2Params argon2Params argon2Params argon2Params
@ -124,10 +121,9 @@ func NewBasicAuth(cfg *config.AuthConfig) (*BasicAuth, error) {
} }
auth := &BasicAuth{ auth := &BasicAuth{
users: make(map[string]string), users: make(map[string]string),
requireTLS: cfg.RequireTLS, // Default is true from config defaults requireTLS: cfg.RequireTLS, // Default is true from config defaults
minPasswordLength: cfg.MinPasswordLength, argon2Params: defaultArgon2Params,
argon2Params: defaultArgon2Params,
} }
// 设置认证域 // 设置认证域