spindb 0.51.2 → 0.51.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/version.js +1 -1
- package/dist/core/cow-copy.js +30 -2
- package/dist/core/cow-copy.js.map +1 -1
- package/package.json +1 -1
package/dist/config/version.js
CHANGED
package/dist/core/cow-copy.js
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* example, `spindb branch --json` reports `"method": "reflink"` vs `"copy"` so
|
|
13
13
|
* consumers know whether the branch was instant or a full copy.
|
|
14
14
|
*/
|
|
15
|
-
import { cp, rm, writeFile } from 'fs/promises';
|
|
15
|
+
import { cp, rm, writeFile, lstat } from 'fs/promises';
|
|
16
16
|
import { join } from 'path';
|
|
17
17
|
import { spawnAsync } from './spawn-utils.js';
|
|
18
18
|
import { logDebug } from './error-handler.js';
|
|
@@ -44,6 +44,17 @@ async function cloneWithStrategy(src, dst, platform) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
if (platform === 'linux') {
|
|
47
|
+
// ZFS block cloning (and some other reflink filesystems) refuse to clone a
|
|
48
|
+
// source whose blocks aren't on disk yet: `cp --reflink=always` then fails
|
|
49
|
+
// with EAGAIN and we'd silently fall back to a full copy. Flush the source's
|
|
50
|
+
// filesystem first so the reflink can proceed. Best-effort — if `sync -f`
|
|
51
|
+
// isn't available the clone still tries, and the copy fallback still works.
|
|
52
|
+
try {
|
|
53
|
+
await spawnAsync('sync', ['-f', src]);
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
// sync unavailable/failed — proceed; worst case is a fallback full copy.
|
|
57
|
+
}
|
|
47
58
|
// `--reflink=always` errors out on filesystems without reflink support
|
|
48
59
|
// (e.g. ext4), so a failure here cleanly means "no CoW on this volume".
|
|
49
60
|
// We deliberately avoid `--reflink=auto` because it silently falls back to
|
|
@@ -74,7 +85,24 @@ async function fallbackToDeepCopy(src, dst, error) {
|
|
|
74
85
|
return 'copy';
|
|
75
86
|
}
|
|
76
87
|
async function deepCopy(src, dst) {
|
|
77
|
-
await cp(src, dst, {
|
|
88
|
+
await cp(src, dst, {
|
|
89
|
+
recursive: true,
|
|
90
|
+
// Node's fs.cp throws ERR_FS_CP_SOCKET on socket/FIFO entries — e.g. a
|
|
91
|
+
// running PgBouncer's `.s.PGSQL` unix socket that lives inside a Postgres
|
|
92
|
+
// data dir — which fails the whole branch on a full (non-reflink) copy.
|
|
93
|
+
// These are ephemeral runtime artifacts the branch's own processes recreate
|
|
94
|
+
// on start, so skip any non-regular, non-directory, non-symlink entry.
|
|
95
|
+
filter: async (source) => {
|
|
96
|
+
try {
|
|
97
|
+
const st = await lstat(source);
|
|
98
|
+
return st.isFile() || st.isDirectory() || st.isSymbolicLink();
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
// Can't stat it (e.g. it vanished mid-copy) — don't try to copy it.
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
});
|
|
78
106
|
}
|
|
79
107
|
/**
|
|
80
108
|
* Probe whether the filesystem backing `probeDir` supports copy-on-write
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cow-copy.js","sourceRoot":"","sources":["../../core/cow-copy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"cow-copy.js","sourceRoot":"","sources":["../../core/cow-copy.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "spindb",
|
|
3
|
-
"version": "0.51.
|
|
3
|
+
"version": "0.51.4",
|
|
4
4
|
"author": "Bob Bass <bob@bbass.co>",
|
|
5
5
|
"license": "PolyForm-Noncommercial-1.0.0",
|
|
6
6
|
"description": "Zero-config Docker-free local database containers. Create, backup, and clone a variety of popular databases.",
|