@ bybrave/ proper- lock file2
维护的叉 正确锁定文件 ——一个在本地或网络文件系统上工作的跨进程和相机锁文件工具.
为何这个叉子
原画 proper-lockfile 2021年起一直未出狱. 这个叉子是一个倒置的替换,它修正了真正的双锁赛车和最需要的船:
| 变动 | 上游问题 |
|---|---|
| 固定 Stale-lock 回收赛:两个过程既可以"收回"同一种 stale 锁并最后同时持有 | 121号, 造成许多 92号 报告 |
onReclaimed 调回: 要知道您锁是何时通过回收一个已失效的锁来获取的( 例如运行一次精确的崩溃恢复) | 105号 |
ELOCKED 错误消息现在提示到 retries 选项——最常见的混淆来源 | 92号 |
Ctrl-C 和 (简体中文) SIGTERM 继续工作: 退出处理器安装在第一个获得的锁上, 而不是打开 require | 111号, (中文(简体) ), 110号 |
没有 Cannot read properties of undefined (reading 'updateTimeout') 在重试时间更新时, 当锁定发布时崩溃 | 113号 |
onCompromised: undefined 编号 : null 保留默认处理器而不是崩溃 | 117号 |
| mtime精度被检测到每个设备,所以在一个过程中锁定不同精度工作的文件系统 | 104号 |
| 包含类型脚本类型定义 | —— 说 |
| 更新的依赖性,CI on Node 18/20/22,原测试套件被保留(76个测试)+每个固定的回归测试 | —— 说 |
比赛,简而言之
上游恢复了坚固的锁 rmdir + 键 mkdir如果进程A检测到一个已失效的锁,但在程序A检测到它之前会拖住 rmdir,过程B可以回收锁并创建新的锁——A的后期 rmdir 然后悄悄地删除,两个过程都相信它们拥有锁. 这叉子声称在解剖学上是坚固的锁 重命名 它们通往一个独特的路径(只有一个进程可以赢得一个重命名),并且验证所声称的目录仍然是它看到的被扭曲的目录. 复制脚本和回归测试正在进行中 test/fork.test.js。 。 。 .
安装
npm install @bybrave/proper-lockfile2
使用量
const lockfile = require('@bybrave/proper-lockfile2');
const release = await lockfile.lock('some/file');
// do your critical work...
await release();
等待锁定而不是失败:
const release = await lockfile.lock('some/file', {
retries: { retries: 5, maxTimeout: 1000 },
});
当一个 stale 锁( 由已死进程留下) 被回收时运行崩溃恢复 :
const release = await lockfile.lock('some/file', {
onReclaimed: () => runRecovery(),
});
同步 API : lockSync, (中文(简体) ), unlockSync, (中文(简体) ), checkSync (不支持同步模式的重复).
API 密码
锁定( 文件, [选项]) —— 承诺 < 释放 >
锁定锁定 file,以 release() 函数。 拒绝使用 ELOCKED 如果锁被锁住(而不是被锁住).
| 选项 | 默认 | 说明 |
|---|---|---|
stale | 10000 | 之后,一个未更新的锁被视为 stale (min 2000(中文(简体) ) |
update | stale/2 | 锁文件 mtime 刷新间隔 1000最大点 stale/2(中文(简体) ) |
retries | 0 | 复试次数(或 节点重试 选项对象),同时获取被扣锁 |
realpath | true | 解析并联; 设置 false 以锁定链接本身(也允许锁定已存在的路径) |
onCompromised | (err) => { throw err; } | 当锁无法保证时调用 |
onReclaimed | —— 说 | 在锁被取回时被调用 |
lockfilePath | ${file}.lock | 自定义锁定文件位置 |
fs | graceful-fs | 自定义 fs 执行 |
锁定一个尚未存在的文件
默认 realpath: true 文件必须存在, 因为 realpath 解决整个路径的符号链接。 当将一个未创建的文件锁定在像“ ” 这样的共线目录下时, 也会显示此信息 /tmp 在macOS上(指 /private/tmp),与 ENOENT (单位:千美元)一百块, (中文(简体) ), 99号) (中文(简体) ).
要么先创建文件, 要么通过 realpath: false. 权衡 realpath: false:锁被所写的路径所键入,因此有两个过程通过不同的同名链接到达同一个文件(/tmp/foo 财务报告和审定财务报表 /private/tmp/foo)将不相见相锁. 在所有过程中使用一条犬道,例如:. fs.realpathSync(dir) + '/file' 对于已存在的目录.
解锁(文件,[选项])/检查(文件,[选项])-承诺
与原文相同的语义: unlock 释放在这个过程中获得的锁, check 解决当前是否锁定文件。 选项 : stale (仅检查), realpath, (中文(简体) ), lockfilePath, (中文(简体) ), fs。 。 。 .
完整的概念文件(基于时间的锁定工作、其保障和警告)载于 原始读取器 ——设计不变.
从正锁文件移走
它是一个临时替代:
- const lockfile = require('proper-lockfile');
+ const lockfile = require('@bybrave/proper-lockfile2');
没有删除或更改 API ; onReclaimed 这是唯一的新选项。 与原作不同,要求模块在获得锁之前不再订阅处理信号.
支助
如果此软件包节省了您的时间, 您可以支持维护 :
比特币( BTC): bc1q37557q5jpeaxqydzwvf3jgj7zhnfpn2td3q40q
信贷和许可证
麻省理工学院. 依据 正确锁定文件 由André Cruz/MOXY编著.