Documentation
¶
Overview ¶
Package jdk 提供节点本地 JDK 探测、下载安装、删除与注册表管理。
设计目标:
- List 扫描 Worker 托管目录 (<serversDir>/jdks) 与可选系统探测路径, 通过解析 bin/java -XshowSettings:properties 拿到 major/version;
- Install 从 Adoptium Temurin API 下载官方归档并解压;
- Remove 删除托管目录。
所有操作只针对 Worker 本地文件系统;CP 通过 gRPC 触发并把结果写回 CP 侧 model.NodeJDK 表。
Index ¶
- func DownloadAndExtract(ctx context.Context, client *http.Client, url, destDir string, report Progress, ...) error
- type CatalogPackage
- type Info
- type Manager
- func (m *Manager) Install(vendor string, major int, arch, installDir, mirrorBase string) (Info, error)
- func (m *Manager) InstallWithProgress(ctx context.Context, vendor string, major int, ...) (Info, error)
- func (m *Manager) List() ([]Info, error)
- func (m *Manager) Probe(path string) (Info, error)
- func (m *Manager) Remove(path string) error
- func (m *Manager) RootDir() string
- func (m *Manager) SetHTTPClient(c *http.Client)
- func (m *Manager) SetHTTPClientProvider(p func() *http.Client)
- type Progress
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func DownloadAndExtract ¶
func DownloadAndExtract(ctx context.Context, client *http.Client, url, destDir string, report Progress, stall, interval time.Duration) error
DownloadAndExtract 下载归档到临时文件并按后缀解压到 destDir(导出薄封装,FR-299)。 供非 JDK 运行时安装器(internal/worker/runtime)复用与 JDK 完全一致的下载语义: 停滞看门狗判卡死(FR-290)、网络类失败追加可操作引导(FR-279)、zip/tar.gz 防路径逃逸。 report 可为 nil;stall/interval <= 0 时用包默认看门狗阈值(测试可注入小值)。
Types ¶
type CatalogPackage ¶
type CatalogPackage struct {
Distribution string `json:"distribution"`
MajorVersion int `json:"majorVersion"`
JavaVersion string `json:"javaVersion"`
ArchiveType string `json:"archiveType"`
Latest bool `json:"latest"`
}
CatalogPackage 是喂前端版本选择器的一条可选 JDK(FR-178)。
func FoojayCatalog ¶
func FoojayCatalog(client *http.Client, base, distribution string, major int, arch string) ([]CatalogPackage, error)
FoojayCatalog 返回某发行版在某大版本下可选的具体 JDK 版本,喂前端版本选择器(FR-178)。 major<=0 时返回该发行版的可用大版本概览(每大版本最新一条)。client 经出站代理。
type Info ¶
type Info struct {
Vendor string `json:"vendor"`
MajorVersion int `json:"majorVersion"`
Version string `json:"version"`
Arch string `json:"arch"`
Path string `json:"path"`
Managed bool `json:"managed"`
}
Info Worker 本地探测到的 JDK 信息。
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager 维护 Worker 本地 JDK 注册表(基于目录扫描,无持久化文件)。 多协程安全:Install/Remove 串行化执行以避免并发解压冲突。
func NewManager ¶
NewManager 创建 JDK 管理器。 rootDir 是托管目录(Install 写入的目录)。systemDirs 是探测时也会扫描 的系统路径,allow nil。
func (*Manager) Install ¶
func (m *Manager) Install(vendor string, major int, arch, installDir, mirrorBase string) (Info, error)
Install 下载并安装指定 JDK(同步,无进度回调)。等价于 InstallWithProgress(... "", nil)。
func (*Manager) InstallWithProgress ¶
func (m *Manager) InstallWithProgress(ctx context.Context, vendor string, major int, version, arch, installDir, mirrorBase string, progress Progress) (Info, error)
InstallWithProgress 下载并安装指定 JDK 到 installDir(默认 <rootDir>/<vendor>-<major>), 期间经 progress 回调上报下载百分比与阶段日志(FR-183 任务中心,见 ADR-040;progress 可为 nil)。 vendor/major/arch 必填;version 可选(非空时经 foojay 按具体版本解析,FR-178); mirrorBase 非空时作下载基址(CP 从平台设置下发,使镜像源真生效),为空回退本地 env/默认源。 下载完成后自动 detect。
func (*Manager) Probe ¶
Probe 探测某路径的 JDK 信息(FR-228):path 可为 JDK home 或 java 可执行文件,归一后 detectAt。 找不到 bin/java 或取不到版本时返回 error,供登记前自动填厂商/版本/架构(不再手填)。
func (*Manager) SetHTTPClient ¶
SetHTTPClient 注入出站 client(经进程级代理,FR-174/ADR-037):JDK 下载经此 client。 由 main 装配;不调用则下载路径回退裸默认 client(向后兼容)。 下载不设「总超时」上限,卡死由 stall 看门狗判定(FIX-4);注入 client 若设了 Timeout 会被克隆去掉。
func (*Manager) SetHTTPClientProvider ¶
SetHTTPClientProvider 注入运行时出站持有者(FR-185/ADR-043):每次下载取当前 client, 使 CP 经心跳下发的代理改动即时生效。优先于 SetHTTPClient 注入的固定 client。