拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Dagger TypeScript SDK 的 EngineSessionError(D105)详解:引擎会话端口解析失败排查指南

Dagger TypeScript SDK 的 EngineSessionErrorD105详解引擎会话端口解析失败排查指南【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger导读本文围绕 Dagger TypeScript SDK 中EngineSessionError错误类展开讲解该错误在引擎会话EngineSession初始化流程中抛出的时机、它与DaggerSDKError基类及其兄弟错误如 D103、D104的区别以及如何通过错误码D105编程式识别并排查连接建立失败问题。读完本文你将掌握 Dagger TypeScript SDK 错误体系的结构、EngineSessionError的源码实现与触发链路以及一套可直接落地的排查与捕获方法。EngineSessionError 是什么EngineSessionError是 Dagger TypeScript SDK 提供的一个内置错误类用于向开发者暴露“引擎会话未能建立连接”这一失败场景。根据 官方参考文档 的定义This error is thrown if the EngineSession does not manage to parse the required port successfully because a EOF is read before any valid port. This usually happens if no connection can be established.即当 EngineSession 在解析建立连接所需的端口时在读到任何有效端口之前就遇到了 EOF文件结束符SDK 便会抛出该错误。通俗地说它意味着引擎子进程在与 SDK 建立连接的“握手”阶段提前退出或无法通信导致 SDK 始终没有拿到合法的端口号与会话令牌。从代码结构看该错误属于 Dagger SDK 错误体系中的“引擎会话EngineSession连接类”错误之一专门对应“读到 EOF 而非合法端口”这一分支而同族的 EngineSessionConnectionTimeoutErrorD104则对应“等待超时”分支EngineSessionConnectParamsParseErrorD103对应“解析到了内容但不是合法连接参数”分支。类的源码实现EngineSessionError的实际实现在sdk/typescript/src/common/errors/EngineSessionErrorOptions.ts中import { DaggerSDKError, DaggerSDKErrorOptions } from ./DaggerSDKError.js import { ERROR_CODES, ERROR_NAMES } from ./errors-codes.js type EngineSessionErrorOptions DaggerSDKErrorOptions /** * This error is thrown if the EngineSession does not manage to parse the required port * successfully because a EOF is read before any valid port. * This usually happens if no connection can be established. */ export class EngineSessionError extends DaggerSDKError { name ERROR_NAMES.EngineSessionError code ERROR_CODES.EngineSessionError /** * hidden */ constructor(message: string, options?: EngineSessionErrorOptions) { super(message, options) } }其类成员如下name固定为EngineSessionError取自ERROR_NAMES.EngineSessionError标识错误名称code固定为D105取自ERROR_CODES.EngineSessionError是 Dagger 专属错误码可用于编程式识别cause?可选的原始错误对象Error从DaggerSDKError继承message错误消息字符串从基类Error继承stack?调用堆栈可选从基类Error继承printStackTrace()打印堆栈信息的方法从DaggerSDKError继承。注意该错误类自身并未增加额外属性它是对DaggerSDKError的“薄封装”核心价值在于提供稳定的name与code标识。错误体系与继承关系EngineSessionError直接继承自抽象基类 DaggerSDKError其基类定义于sdk/typescript/src/common/errors/DaggerSDKError.tsexport abstract class DaggerSDKError extends Error { abstract readonly name: ErrorNames abstract readonly code: ErrorCodes cause?: Error protected constructor(message: string, options?: DaggerSDKErrorOptions) { super(message) this.cause options?.cause } get [Symbol.toStringTag]() { return this.name } printStackTrace() { log(this.stack) } }要点所有 Dagger SDK 错误统一继承DaggerSDKError其子类必须实现name与code两个抽象属性构造函数第二个可选参数options用于透传cause原始错误Symbol.toStringTag让Object.prototype.toString.call(err)返回[object EngineSessionError]这类可读结果printStackTrace()通过内部log工具输出堆栈便于调试。错误码体系集中在sdk/typescript/src/common/errors/errors-codes.ts中全部错误码如下错误码错误类D100GraphQLRequestErrorD101UnknownDaggerErrorD102TooManyNestedObjectsErrorD103EngineSessionConnectParamsParseErrorD104EngineSessionConnectionTimeoutErrorD105EngineSessionError本文主题D106InitEngineSessionBinaryErrorD107DockerImageRefValidationErrorD108NotAwaitedRequestErrorD109ExecErrorD110IntrospectionErrorERROR_NAMES由Object.keys(ERROR_CODES)自动推导生成保证名称与代码一一对应、类型安全见 errors-codes.ts。触发链路何时抛出 D105EngineSessionError实际抛出的位置在sdk/typescript/src/provisioning/bin.ts的readConnectParams方法中。SDK 启动引擎时会启动 dagger CLI 子进程并逐行读取其标准输出期望第一行是 JSON 编码的连接参数含port与session_tokenprivate async readConnectParams( stdoutReader: readline.Interface, ): PromiseConnectParams | undefined { for await (const line of stdoutReader) { const connectParams JSON.parse(line) as ConnectParams if (connectParams.port connectParams.session_token) { return connectParams } throw new EngineSessionConnectParamsParseError( invalid connect params: ${line}, { parsedLine: line }, ) } // 读到流结尾EOF仍未获得有效端口 try { await this.subProcess } catch { this.subProcess?.catch((e) { throw new EngineSessionError(e.stderr) }) } }完整流程参见 bin.ts引擎子进程启动后SDK 通过readline逐行读取其 stdout期望读到形如{port: ..., session_token: ...}的 JSON 行如果读到了行但内容不合法抛出 D103EngineSessionConnectParamsParseError如果整个流读取结束EOF都没读到任何合法端口则说明子进程失败退出或根本没有输出连接参数此时等待子进程退出并捕获其错误用其stderr作为消息抛出EngineSessionErrorD105若读取过程超过 300 秒timeOutDuration 300000ms仍未拿到参数则抛出 D104EngineSessionConnectionTimeoutError见 bin.ts。因此 D105 的直接语义是连接参数永远不可能到达流已结束通常意味着“连接无法建立”例如引擎二进制崩溃、环境变量异常、容器/守护进程不可用或端口被占用等。如何捕获并排查 EngineSessionError1. 编程式识别由于EngineSessionError的code固定为D105可以像官方文档建议的那样用错误码而非字符串匹配来做程序化分支处理import { EngineSessionError, EngineSessionConnectionTimeoutError, EngineSessionConnectParamsParseError, } from dagger.io/dagger try { // 连接并执行 Dagger 操作例如 // const client new Connect(...); ... } catch (e) { if (e instanceof EngineSessionError) { console.error(引擎会话无法建立连接D105, e.message, e.cause) } else if (e instanceof EngineSessionConnectionTimeoutError) { console.error(引擎连接超时D104, e.timeOutDuration, ms) } else if (e instanceof EngineSessionConnectParamsParseError) { console.error(连接参数解析失败D103, e.parsedLine) } else { console.error(其他 Dagger 错误, e) } }所有错误类均从 index.ts 统一导出也支持直接导入ERROR_CODES常量做相等比较import { ERROR_CODES } from dagger.io/dagger if (e.code ERROR_CODES.EngineSessionError) { // D105 分支 }2. 查看详细信息e.message通常包含引擎子进程的stderr内容是排查的第一手线索e.cause可选指向导致失败的原始错误e.printStackTrace()在控制台打印堆栈辅助定位调用点。3. 常见排查方向由于 D105 表明引擎子进程在与 SDK 握手前就终止可依次检查引擎二进制是否可正常启动检查本机是否已安装并缓存了匹配的 dagger CLI 二进制缓存目录由createCacheDir管理见 bin.ts必要时重新初始化或更新版本运行环境与依赖确认当前环境变量、网络代理、容器/OCI 运行时如需配置正确避免引擎启动即报错退出读取引擎 stderrEngineSessionError的消息直接携带了子进程stderr先读它区分超时场景若错误是 D104 而非 D105则是 300 秒握手超时属于另一分支引擎可能挂起而非退出。同族错误速查错误错误码触发条件EngineSessionErrorD105读到 EOF 前未获得任何有效端口通常连接无法建立EngineSessionConnectParamsParseErrorD103读到了行但不是合法的连接参数缺port或session_tokenEngineSessionConnectionTimeoutErrorD104300 秒内未读到连接参数握手超时InitEngineSessionBinaryErrorD106引擎二进制初始化失败三者共同覆盖了“引擎会话连接握手”的全部失败模式开发者在处理连接类异常时建议先按code分流再针对性排查。总结EngineSessionErrorD105是 Dagger TypeScript SDK 引擎会话连接失败时抛出的标准化错误其触发点是 SDK 在读取引擎子进程 stdout 时提前遇到 EOF、未能获得有效端口。本文结合 官方参考文档 与源码EngineSessionErrorOptions.ts、DaggerSDKError.ts、bin.ts梳理了其类结构、继承体系、错误码约定与完整触发链路并给出了基于code的编程式捕获与排查方法。遇到 D105 时优先检查引擎二进制与环境、阅读message中透出的stderr即可快速定位连接失败根因。【免费下载链接】daggerAutomation engine to build, test and ship any codebase. Runs locally, in CI, or directly in the cloud项目地址: https://gitcode.com/GitHub_Trending/da/dagger创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门