labgate 0.5.39 → 0.5.40

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.
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.withImagePullFileLock = withImagePullFileLock;
4
+ const fs_1 = require("fs");
5
+ const os_1 = require("os");
6
+ const DEFAULT_PULL_LOCK_WAIT_TIMEOUT_MS = 60 * 60 * 1000;
7
+ const DEFAULT_PULL_LOCK_STALE_AFTER_MS = 2 * 60 * 60 * 1000;
8
+ const DEFAULT_PULL_LOCK_POLL_INTERVAL_MS = 750;
9
+ function parsePositiveInt(raw, fallback) {
10
+ const trimmed = String(raw || '').trim();
11
+ if (!trimmed)
12
+ return fallback;
13
+ const parsed = Number.parseInt(trimmed, 10);
14
+ if (!Number.isFinite(parsed) || parsed <= 0)
15
+ return fallback;
16
+ return parsed;
17
+ }
18
+ function readLockMeta(lockPath) {
19
+ try {
20
+ const raw = (0, fs_1.readFileSync)(lockPath, 'utf-8').trim();
21
+ if (!raw)
22
+ return null;
23
+ const parsed = JSON.parse(raw);
24
+ if (!parsed || typeof parsed !== 'object')
25
+ return null;
26
+ return parsed;
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ function formatLockOwner(meta) {
33
+ const host = typeof meta?.host === 'string' ? meta.host.trim() : '';
34
+ const pidRaw = Number(meta?.pid);
35
+ const pid = Number.isFinite(pidRaw) && pidRaw > 0 ? Math.floor(pidRaw) : 0;
36
+ if (host && pid > 0)
37
+ return `${host}:${pid}`;
38
+ if (host)
39
+ return host;
40
+ if (pid > 0)
41
+ return `pid:${pid}`;
42
+ return 'unknown';
43
+ }
44
+ function isLocalPidAlive(pid) {
45
+ try {
46
+ process.kill(pid, 0);
47
+ return true;
48
+ }
49
+ catch (err) {
50
+ if (err?.code === 'ESRCH')
51
+ return false;
52
+ if (err?.code === 'EPERM')
53
+ return true;
54
+ return true;
55
+ }
56
+ }
57
+ function tryRemoveStaleLock(lockPath, staleAfterMs, localHost) {
58
+ try {
59
+ const st = (0, fs_1.statSync)(lockPath);
60
+ const ageMs = Math.max(0, Date.now() - st.mtimeMs);
61
+ if (ageMs < staleAfterMs) {
62
+ return { removed: false, ageMs, owner: 'unknown' };
63
+ }
64
+ const meta = readLockMeta(lockPath);
65
+ const owner = formatLockOwner(meta);
66
+ const metaHost = typeof meta?.host === 'string' ? meta.host.trim() : '';
67
+ const pidRaw = Number(meta?.pid);
68
+ const pid = Number.isFinite(pidRaw) && pidRaw > 0 ? Math.floor(pidRaw) : 0;
69
+ // If lock owner is this host and the process is still alive, do not remove.
70
+ if (metaHost && metaHost === localHost && pid > 0 && isLocalPidAlive(pid)) {
71
+ return { removed: false, ageMs, owner };
72
+ }
73
+ (0, fs_1.unlinkSync)(lockPath);
74
+ return { removed: true, ageMs, owner };
75
+ }
76
+ catch (err) {
77
+ if (err?.code === 'ENOENT') {
78
+ return { removed: false, ageMs: 0, owner: 'unknown' };
79
+ }
80
+ return { removed: false, ageMs: 0, owner: 'unknown' };
81
+ }
82
+ }
83
+ function sleep(ms) {
84
+ return new Promise((resolve) => setTimeout(resolve, ms));
85
+ }
86
+ function releaseLock(fd, lockPath) {
87
+ try {
88
+ (0, fs_1.closeSync)(fd);
89
+ }
90
+ catch {
91
+ // Best effort.
92
+ }
93
+ try {
94
+ (0, fs_1.unlinkSync)(lockPath);
95
+ }
96
+ catch {
97
+ // Best effort.
98
+ }
99
+ }
100
+ async function withImagePullFileLock(lockPath, image, work, options = {}) {
101
+ const localHost = (0, os_1.hostname)();
102
+ const waitTimeoutMs = options.waitTimeoutMs
103
+ ?? parsePositiveInt(process.env.LABGATE_IMAGE_PULL_LOCK_TIMEOUT_MS, DEFAULT_PULL_LOCK_WAIT_TIMEOUT_MS);
104
+ const staleAfterMs = options.staleAfterMs
105
+ ?? parsePositiveInt(process.env.LABGATE_IMAGE_PULL_LOCK_STALE_MS, DEFAULT_PULL_LOCK_STALE_AFTER_MS);
106
+ const pollIntervalMs = options.pollIntervalMs
107
+ ?? parsePositiveInt(process.env.LABGATE_IMAGE_PULL_LOCK_POLL_MS, DEFAULT_PULL_LOCK_POLL_INTERVAL_MS);
108
+ const startedAt = Date.now();
109
+ let waitAnnounced = false;
110
+ while (true) {
111
+ let fd = null;
112
+ try {
113
+ fd = (0, fs_1.openSync)(lockPath, 'wx', 0o600);
114
+ }
115
+ catch (err) {
116
+ if (err?.code !== 'EEXIST')
117
+ throw err;
118
+ }
119
+ if (fd !== null) {
120
+ try {
121
+ const meta = {
122
+ version: 1,
123
+ pid: process.pid,
124
+ host: localHost,
125
+ image,
126
+ started_at: new Date().toISOString(),
127
+ };
128
+ (0, fs_1.writeFileSync)(fd, JSON.stringify(meta) + '\n', { encoding: 'utf-8' });
129
+ }
130
+ catch (err) {
131
+ releaseLock(fd, lockPath);
132
+ throw err;
133
+ }
134
+ try {
135
+ return await work();
136
+ }
137
+ finally {
138
+ releaseLock(fd, lockPath);
139
+ }
140
+ }
141
+ const stale = tryRemoveStaleLock(lockPath, staleAfterMs, localHost);
142
+ if (stale.removed) {
143
+ options.onStaleLockRemoved?.({
144
+ lockPath,
145
+ ageMs: stale.ageMs,
146
+ owner: stale.owner,
147
+ });
148
+ continue;
149
+ }
150
+ const waitedMs = Date.now() - startedAt;
151
+ if (waitedMs >= waitTimeoutMs) {
152
+ const owner = formatLockOwner(readLockMeta(lockPath));
153
+ throw new Error(`Timed out waiting for image pull lock after ${Math.ceil(waitedMs / 1000)}s ` +
154
+ `(lock: ${lockPath}, owner: ${owner}).`);
155
+ }
156
+ if (!waitAnnounced) {
157
+ waitAnnounced = true;
158
+ options.onWait?.({
159
+ lockPath,
160
+ waitedMs,
161
+ owner: formatLockOwner(readLockMeta(lockPath)),
162
+ });
163
+ }
164
+ await sleep(pollIntervalMs);
165
+ }
166
+ }
167
+ //# sourceMappingURL=image-pull-lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-pull-lock.js","sourceRoot":"","sources":["../../src/lib/image-pull-lock.ts"],"names":[],"mappings":"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"}
package/dist/lib/init.js CHANGED
@@ -229,7 +229,14 @@ async function initConfig(opts) {
229
229
  // Create directories
230
230
  (0, config_js_1.ensurePrivateDir)(config_js_1.LABGATE_DIR);
231
231
  (0, config_js_1.ensurePrivateDir)((0, config_js_1.getSandboxHome)());
232
- (0, config_js_1.ensurePrivateDir)((0, config_js_1.getImagesDir)());
232
+ const imagesDir = (0, config_js_1.getImagesDir)();
233
+ if ((0, config_js_1.isImagesDirOverridden)()) {
234
+ // Shared image caches may be group-managed and should not be force-chmod'ed to 0700.
235
+ (0, fs_1.mkdirSync)(imagesDir, { recursive: true });
236
+ }
237
+ else {
238
+ (0, config_js_1.ensurePrivateDir)(imagesDir);
239
+ }
233
240
  (0, config_js_1.ensurePrivateDir)((0, config_js_1.getEmptyDir)());
234
241
  (0, config_js_1.ensurePrivateDir)((0, path_1.join)(config_js_1.LABGATE_DIR, 'logs'));
235
242
  if ((0, fs_1.existsSync)(configPath) && !opts.force) {
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/lib/init.ts"],"names":[],"mappings":"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"}
package/dist/lib/ui.js CHANGED
@@ -46,6 +46,7 @@ const config_js_1 = require("./config.js");
46
46
  const init_js_1 = require("./init.js");
47
47
  const container_js_1 = require("./container.js");
48
48
  const runtime_js_1 = require("./runtime.js");
49
+ const image_pull_lock_js_1 = require("./image-pull-lock.js");
49
50
  const audit_js_1 = require("./audit.js");
50
51
  const slurm_db_js_1 = require("./slurm-db.js");
51
52
  const slurm_poller_js_1 = require("./slurm-poller.js");
@@ -645,16 +646,35 @@ async function ensureWebTerminalImageReady(runtime, image, onProgress) {
645
646
  }
646
647
  const imagesDir = (0, config_js_1.getImagesDir)();
647
648
  const sifPath = (0, path_1.join)(imagesDir, (0, container_js_1.imageToSifName)(image));
648
- if ((0, fs_1.existsSync)(sifPath))
649
+ const pullLockPath = `${sifPath}.pull.lock`;
650
+ if ((0, fs_1.existsSync)(sifPath) && !(0, fs_1.existsSync)(pullLockPath))
649
651
  return;
652
+ (0, fs_1.mkdirSync)(imagesDir, { recursive: true });
650
653
  await withWebTerminalImagePullLock(`apptainer:${image}`, async () => {
651
- if ((0, fs_1.existsSync)(sifPath))
654
+ if ((0, fs_1.existsSync)(sifPath) && !(0, fs_1.existsSync)(pullLockPath))
652
655
  return;
653
- (0, fs_1.mkdirSync)(imagesDir, { recursive: true });
654
- onProgress?.('image_pull', `Pulling container image ${image}...`);
655
- await execFileAsync('apptainer', ['pull', sifPath, `docker://${image}`], {
656
- timeout: WEB_TERMINAL_IMAGE_PULL_TIMEOUT_MS,
657
- maxBuffer: WEB_TERMINAL_IMAGE_PULL_MAX_BUFFER,
656
+ await (0, image_pull_lock_js_1.withImagePullFileLock)(pullLockPath, image, async () => {
657
+ if ((0, fs_1.existsSync)(sifPath))
658
+ return;
659
+ onProgress?.('image_pull', `Pulling container image ${image}...`);
660
+ await execFileAsync('apptainer', ['pull', sifPath, `docker://${image}`], {
661
+ timeout: WEB_TERMINAL_IMAGE_PULL_TIMEOUT_MS,
662
+ maxBuffer: WEB_TERMINAL_IMAGE_PULL_MAX_BUFFER,
663
+ });
664
+ }, {
665
+ onWait: () => {
666
+ const message = `Waiting for another session to finish pulling ${image}...`;
667
+ onProgress?.('image_pull', message);
668
+ if (!onProgress)
669
+ log.step(message);
670
+ },
671
+ onStaleLockRemoved: ({ ageMs }) => {
672
+ const ageSec = Math.max(1, Math.round(ageMs / 1000));
673
+ const message = `Recovered stale image pull lock (${ageSec}s old). Retrying...`;
674
+ onProgress?.('image_pull', message);
675
+ if (!onProgress)
676
+ log.warn(message);
677
+ },
658
678
  });
659
679
  });
660
680
  }