Repository navigation
v5.2.0
Minor Changes
-
265998f: 解密 / 加密流水线吞吐优化(针对多文件并发解密总吞吐远低于单文件的问题,第一阶段:仅库内改动)。
RecoverableWriteStream写完成与流水线解耦:chunk 交给底层fs.WriteStream即 ack,
不再让Unsealer等待每次 pwrite 的线程池往返;账本提交 / checkpoint 仍在真实写回调里按序进行。
在途明文以maxInflightBytes为界(默认双文件 4 MiB、inplace 256 KiB),用于吸收 OS 对增长中
文件的写入节流停顿。写入 / 后台落盘错误统一通过destroy(err)抛出一次。- 双文件(密文 ≠ 输出)场景 checkpoint 不再随身携带 pending item 的密文(
readStart = rawCommitted、
data为空,resume 时直接从完好的密文文件重读),.progress体积不随在途 item 数增长;
inplace 场景行为不变(pending 密文仍随 checkpoint 持久化,写前存档 WAL 保留)。 PipelineContextOptions.minSaveIntervalMs(默认 0):与saveFrequency叠加的 checkpoint 时间下限,
供 Windows 等 open/write/close/rename 代价较高的环境拉长落盘间隔。流结束与 WAL 不受限制。Sealer/Unsealer/SealedFileStream/RecoverableReadStream/RecoverableWriteStream
默认highWaterMark统一为 64 KiB(对齐 item 大小,limits.DefaultStreamHighWaterMark),
不再依赖 Node 版本相关的 16 KiB 默认值;可显式覆盖。- 续传已完成任务不再报
ERR_VERSION_MISMATCH:写端收尾时先把completed: true持久化进
context 再 truncate;带该标记再建管道时读端直接结束、写端补做 truncate 并 'finish'
(inplace 完成后文件已是明文、尾部 header 不存在,老路径会把明文当密封文件打开)。
loadContext()仍丢弃运行期字段decryptCompleted(中间存档里可能出现在在途写入提交前)。
_final现在会等所有在途写入提交后再收尾。 SealedFileStreamheader 校验失败(ERR_VERSION_MISMATCH/ERR_INVALID_MAGIC)的
detail增加filePath、fileSize、tailHex(尾部 64 字节原文),日志可直接判断尾部
是明文、HTML 还是半截文件;错误消息里的actual是丢精度的 Number,不要用它反推。calculateSealedHashAsync扫盘改为双缓冲预读:哈希当前 4 MiB 窗口时并行读下一窗口,
跨窗口的 item 在缓冲头部空隙拼接。页缓存热时约 +7%,冷文件(SSD)单文件约 +70%。- 滚动哈希(密封 / 解封 / 校验共用)改为流式
update(prev); update(item),不再把
prev ‖ item拷到一块缓冲里;注入hashProvider的调用方仍走原拷贝路径。摘要不变。 - 热路径去拷贝:AES-GCM 加解密不再经 hex 字符串往返;
UnsealerCore/_decryptMessageWithPrefix
使用subarray视图;SealedFileStream读缓冲allocUnsafe;Sealer累积改为分片列表、
达阈值只拼一次,并去掉memory-streams中转。密封输出格式与密文字节完全不变。
-
cd0c2ea: 新增
getSecp256k1Implementation(),并在首次加密 / 解密时打印 secp256k1 的实现选择日志(logger:meta-encryptor/secp256k1),与 keccak256 的日志对应。
secp256k1 的原生 addon 加载失败时会静默退回纯 JS 的 elliptic,加解密吞吐降到原来的 1/3~1/4;此时返回'elliptic',并打一条带加载报错的 warn 日志,便于从客户端日志里确认。
Patch Changes
- 7ddd375: 修复
isSealedFile/sealedFileVersion/dataHashOfSealedFile读取文件头后不关闭文件句柄的问题。
此前每次调用都会泄漏一个只读句柄:被删除的密封文件在进程退出前一直占用磁盘空间,Windows 上文件名也可能残留。