根存量
Bun + Postgres知识系统的共享能力:源适配器, 摄取、分解、嵌入、检索和版本判决。 几个 系统移植到一个测试的根上.
没有构建步骤的普通类型脚本 。 Bun直接运行源头.
安装
从 npm 键入精确版本 :
bun add --exact @buritica/rootstock
办公室文档提取器需要其可选的同位素(jszip, (中文(简体) ), mammoth, (中文(简体) ),
unpdf没有别的东西能拉他们进来.
每个能力都是子路径导出:
import { runGoldenCli, type GoldenSuite } from "@buritica/rootstock/golden";
能力
| 子路径 | 状态 | 它会做什么 |
|---|---|---|
golden | 页:1 | 证明重构或取出内容的金色快照没有改变:Canonic JSON、抓取/检查、录音 fetch、种子向量和丢弃的 |
golden/bun-test | 页:1 | 将黄金套房登记为 bun test 个案 |
更多的分期抵达。 第一阶段提取必须同字节相同: 消费者只有在黄金不变的情况下才采用模块。 变化 可以改变后来的答案,一次一个量度的变化.
黄金在消费回购
// goldens/suites.ts
import type { GoldenSuite } from "@buritica/rootstock/golden";
import { chunkText } from "../src/chunk.ts";
import fixture from "./fixtures/chunk/basic.json";
export const suites: GoldenSuite[] = [
{
capability: "chunk.split",
profile: "myrepo-v1",
cases: [{ id: "basic", input: fixture, run: () => chunkText(fixture.text) }],
},
];
// goldens/capture.ts — `bun goldens/capture.ts capture|check`
import { runGoldenCli } from "@buritica/rootstock/golden";
import { suites } from "./suites.ts";
process.exit(await runGoldenCli(suites, { dir: "goldens/data", repo: "myrepo" }));
// goldens/goldens.test.ts
import { registerGoldenTests } from "@buritica/rootstock/golden/bun-test";
import { suites } from "./suites.ts";
registerGoldenTests(suites, { dir: "goldens/data" });
capture 拒绝运行时 src/ 与合并基数不同
origin/main,所以黄金总是记录 未经修改的行为.
运行运行锁、工作队列和光标
这个 lock 财务报告和审定财务报表 queue 子路径 (0. 6.0) 在 rootstock
计划 : run_locks, (中文(简体) ), work_queue 财务报告和审定财务报表 cursors。下面的注释是:
操作员需要先打开.
赠款
迁移将表格作为运行它们的作用。 当 应用程序连接为不同的角色, 授予它 :
USAGE计划rootstock· ;SELECT, (中文(简体) ),INSERT, (中文(简体) ),UPDATE打开rootstock.run_locks· ;SELECT, (中文(简体) ),INSERT, (中文(简体) ),UPDATE, (中文(简体) ),DELETE打开rootstock.work_queue· ;SELECT, (中文(简体) ),INSERT, (中文(简体) ),UPDATE打开rootstock.cursors。 。 。 .
没有他们,锁就拒绝 UNFENCED (栅栏不能写出行)和
队列和光标调用因驱动程序权限错误而失败.
倒车
在0.6.0迁移数据库叶后,将消费者卷回0.5.x
释放时没有文件的应用迁移 : migrate status 读取
数据库(因此是一个漂移显示器页)和 apply --manual 拒绝
直到消费者再次在0.6.0。 一个部署 apply --deploy 还是去
通过。 以出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出.
运行锁定
-
使用直接终点. 锁定客户端必须是专用连接 改为直接(非集合) Postgres 端点。 通过交易池, 咨询锁及其围栏可以降落在后端 其他跑道 共享,所以一个锁可以共享或被困,而锁无法分辨.
-
被包围的等待. 大门发出的每个声明(所有权探测器和 (b) 索赔人在索赔中要求赔偿的赔偿额(第34条)
probeStallSeconds。探测器确实 不及时回答( 一个静静地丢掉的套接字, 一个已停顿的服务器) 花费一个 联 合 国maxRecoveries数字 :- 锁定关闭已停顿的会话( 以
endTimeoutSeconds加号 一秒钟,打开一个新鲜的,发出lock.session_replaced,以及 说到这里 守住者倒地等收复. - 如果要求读到锁 和栅栏行仍然命名这个
运行中, 持有者最有可能是运行中自己已停顿的后端: a
黑洞连接的后端寿命, 只要服务器的 TCP
保持活动允许。 锁的结尾
pg_terminate_backend,仅限 时pg_locks显示后端( 上次运行的 pid 有锁) )在栅栏行仍保留此行名称时,持有此名,以及 发射lock.stalled_backend_terminated编辑 锁入角色需要特权结束它自己的后端,这个角色有 默认;没有它,锁就会发出lock.terminate_failed仅限 等着 若为pg_locks显示另一个后端持有, 恢复 立即拒绝,而后端则被留下. - 索赔每一次重审
wait.pollIntervalMs(至少100毫秒,以及 即使没有opts.wait最多为probeStallSeconds再来.
失败的恢复或被拖住的状态会让大门抛出
UNVERIFIABLE,以及 每一个后来的大门都重新推开它;当跑者自己的后端超过民意测验时,lock.recovery_refused载出它作为stalledPid。一个门呼叫可以 现在屏蔽最多6个probeStallSeconds加号endTimeoutSeconds(调查、结案、索赔及其重审、终止、民意调查窗口和 最后一次索赔; 0.6.0在一次索赔之后被拒绝。 等待者获得其界限 尝试锁和栅栏,以等待所剩的(绝不少于)probeStallSeconds和它的信号.release()以endTimeoutSeconds在关闭前释放进程内转动,所以 关闭挂接器,从不持有下一个服务员(数据库锁是, ))),该会话结束. - 锁定关闭已停顿的会话( 以
-
open每个电话都必须给新客户端. 它为收购而运行过一次 并再次为每一次被停滞的复苏, 结束会话 替换。 一个open一个共享客户提出追偿要求 一个被关闭的客户端, 大门拒绝UNVERIFIABLE。 。 。 . -
事件带有原始驱动错误 . 这个
error锁定事件的字段是 驾驶员抛出的错误, 不变 。 有些司机把服务器的host:port在信息中,所以擦干净它 之前,某处航运事件 不应该看到它.
工作队列
- 事件意味着声明成功,而不是承诺. 已调用 在呼叫器的交易中,队列呼叫以保存点运行并发送 它在语句返回时的事件。 如果电话商后来的交易 活动开始后,仍为从未登陆的改变而出动.
"contended"意思是重试.enqueue返回时"contended"当另一个 编剧们已经过了这行enqueueLockTimeoutMs什么都没有写,所以 呼叫者重复(或故意放弃事件).- 已停放一个死钥匙上的排队装置. 当密钥是死字时
将组合成一行并报告
queue.enqueued与result: "on_dead"除非有人打来电话 否则什么也不说retryDead这样 注意那个事件. - 通知失踪的人
queue.drained。 。 。 . 每个claim调用发送queue.drained即使它什么也没有说 那个事件是工人的 活性信号:在几个排水间隔中缺失意味着工人 停下来. - 在运行锁定下写入光标 .
setCursor没有比较和设置 : 两个作家比赛,最后一个获胜。 锁定源代码 你推进的光标.
规则
- 输入依赖( SQL 客户端,
fetch计时器,记录器。 模块从未读取process.env永远不要打开他们自己的连接. - 测试装置是合成的。 消费者数据从不进入这回波.
- 能力词汇
src/golden/capabilities.ts由 每个消费者。 添加id是一种添加剂(在0.x上释放补丁); 重命名或删除一个是断裂.
许可证
麻省理工学院