@elaraai/e3-core 0.0.2-beta.12 → 0.0.2-beta.14
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/src/dataflow.d.ts +118 -9
- package/dist/src/dataflow.d.ts.map +1 -1
- package/dist/src/dataflow.js +283 -54
- package/dist/src/dataflow.js.map +1 -1
- package/dist/src/errors.d.ts +11 -6
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +10 -3
- package/dist/src/errors.js.map +1 -1
- package/dist/src/execution/index.d.ts +14 -0
- package/dist/src/execution/index.d.ts.map +1 -0
- package/dist/src/execution/index.js +6 -0
- package/dist/src/execution/index.js.map +1 -0
- package/dist/src/execution/interfaces.d.ts +244 -0
- package/dist/src/execution/interfaces.d.ts.map +1 -0
- package/dist/src/execution/interfaces.js +6 -0
- package/dist/src/execution/interfaces.js.map +1 -0
- package/dist/src/executions.d.ts +48 -38
- package/dist/src/executions.d.ts.map +1 -1
- package/dist/src/executions.js +117 -162
- package/dist/src/executions.js.map +1 -1
- package/dist/src/gc.d.ts +9 -2
- package/dist/src/gc.d.ts.map +1 -1
- package/dist/src/gc.js +19 -9
- package/dist/src/gc.js.map +1 -1
- package/dist/src/index.d.ts +8 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +22 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/objects.d.ts +6 -6
- package/dist/src/objects.js +6 -6
- package/dist/src/packages.d.ts +22 -14
- package/dist/src/packages.d.ts.map +1 -1
- package/dist/src/packages.js +45 -79
- package/dist/src/packages.js.map +1 -1
- package/dist/src/repository.d.ts +8 -4
- package/dist/src/repository.d.ts.map +1 -1
- package/dist/src/repository.js +25 -29
- package/dist/src/repository.js.map +1 -1
- package/dist/src/storage/index.d.ts +17 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +8 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +299 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +6 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/local/LocalBackend.d.ts +51 -0
- package/dist/src/storage/local/LocalBackend.d.ts.map +1 -0
- package/dist/src/storage/local/LocalBackend.js +73 -0
- package/dist/src/storage/local/LocalBackend.js.map +1 -0
- package/dist/src/storage/local/LocalLockService.d.ts +22 -0
- package/dist/src/storage/local/LocalLockService.d.ts.map +1 -0
- package/dist/src/storage/local/LocalLockService.js +38 -0
- package/dist/src/storage/local/LocalLockService.js.map +1 -0
- package/dist/src/storage/local/LocalLogStore.d.ts +23 -0
- package/dist/src/storage/local/LocalLogStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalLogStore.js +66 -0
- package/dist/src/storage/local/LocalLogStore.js.map +1 -0
- package/dist/src/storage/local/LocalObjectStore.d.ts +19 -0
- package/dist/src/storage/local/LocalObjectStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalObjectStore.js +68 -0
- package/dist/src/storage/local/LocalObjectStore.js.map +1 -0
- package/dist/src/storage/local/LocalRefStore.d.ts +35 -0
- package/dist/src/storage/local/LocalRefStore.d.ts.map +1 -0
- package/dist/src/storage/local/LocalRefStore.js +233 -0
- package/dist/src/storage/local/LocalRefStore.js.map +1 -0
- package/dist/src/storage/local/index.d.ts +16 -0
- package/dist/src/storage/local/index.d.ts.map +1 -0
- package/dist/src/storage/local/index.js +16 -0
- package/dist/src/storage/local/index.js.map +1 -0
- package/dist/src/tasks.d.ts +16 -10
- package/dist/src/tasks.d.ts.map +1 -1
- package/dist/src/tasks.js +35 -41
- package/dist/src/tasks.js.map +1 -1
- package/dist/src/test-helpers.d.ts +4 -4
- package/dist/src/test-helpers.d.ts.map +1 -1
- package/dist/src/test-helpers.js +6 -20
- package/dist/src/test-helpers.js.map +1 -1
- package/dist/src/trees.d.ts +41 -29
- package/dist/src/trees.d.ts.map +1 -1
- package/dist/src/trees.js +112 -109
- package/dist/src/trees.js.map +1 -1
- package/dist/src/workspaceLock.d.ts +29 -7
- package/dist/src/workspaceLock.d.ts.map +1 -1
- package/dist/src/workspaceLock.js +130 -40
- package/dist/src/workspaceLock.js.map +1 -1
- package/dist/src/workspaceStatus.d.ts +6 -4
- package/dist/src/workspaceStatus.d.ts.map +1 -1
- package/dist/src/workspaceStatus.js +42 -58
- package/dist/src/workspaceStatus.js.map +1 -1
- package/dist/src/workspaces.d.ts +35 -26
- package/dist/src/workspaces.d.ts.map +1 -1
- package/dist/src/workspaces.js +93 -116
- package/dist/src/workspaces.js.map +1 -1
- package/package.json +3 -3
package/dist/src/executions.js
CHANGED
|
@@ -14,12 +14,10 @@
|
|
|
14
14
|
import * as fs from 'fs/promises';
|
|
15
15
|
import * as path from 'path';
|
|
16
16
|
import { spawn } from 'child_process';
|
|
17
|
-
import { createWriteStream } from 'fs';
|
|
18
17
|
import { tmpdir } from 'os';
|
|
19
|
-
import { decodeBeast2For,
|
|
20
|
-
import {
|
|
21
|
-
import { computeHash
|
|
22
|
-
import { ExecutionCorruptError, isNotFoundError } from './errors.js';
|
|
18
|
+
import { decodeBeast2For, variant, EastIR, IRType } from '@elaraai/east';
|
|
19
|
+
import { TaskObjectType, } from '@elaraai/e3-types';
|
|
20
|
+
import { computeHash } from './objects.js';
|
|
23
21
|
// ============================================================================
|
|
24
22
|
// Execution Identity
|
|
25
23
|
// ============================================================================
|
|
@@ -36,166 +34,111 @@ export function inputsHash(inputHashes) {
|
|
|
36
34
|
const data = inputHashes.join('\0');
|
|
37
35
|
return computeHash(new TextEncoder().encode(data));
|
|
38
36
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Get the filesystem path for an execution directory.
|
|
41
|
-
*
|
|
42
|
-
* @param repoPath - Path to .e3 repository
|
|
43
|
-
* @param taskHash - Hash of the task object
|
|
44
|
-
* @param inHash - Combined hash of input hashes
|
|
45
|
-
* @returns Path to execution directory: executions/<taskHash>/<inputsHash>/
|
|
46
|
-
*/
|
|
47
|
-
export function executionPath(repoPath, taskHash, inHash) {
|
|
48
|
-
return path.join(repoPath, 'executions', taskHash, inHash);
|
|
49
|
-
}
|
|
50
37
|
// ============================================================================
|
|
51
38
|
// Execution Status
|
|
52
39
|
// ============================================================================
|
|
53
40
|
/**
|
|
54
41
|
* Get execution status.
|
|
55
42
|
*
|
|
56
|
-
* @param
|
|
43
|
+
* @param storage - Storage backend
|
|
44
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
57
45
|
* @param taskHash - Hash of the task object
|
|
58
46
|
* @param inHash - Combined hash of input hashes
|
|
59
47
|
* @returns ExecutionStatus or null if execution doesn't exist
|
|
60
48
|
* @throws {ExecutionCorruptError} If status file exists but cannot be decoded
|
|
61
49
|
*/
|
|
62
|
-
export async function executionGet(
|
|
63
|
-
|
|
64
|
-
const statusPath = path.join(execDir, 'status.beast2');
|
|
65
|
-
let data;
|
|
66
|
-
try {
|
|
67
|
-
data = await fs.readFile(statusPath);
|
|
68
|
-
}
|
|
69
|
-
catch (err) {
|
|
70
|
-
if (isNotFoundError(err)) {
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
throw err;
|
|
74
|
-
}
|
|
75
|
-
try {
|
|
76
|
-
const decoder = decodeBeast2For(ExecutionStatusType);
|
|
77
|
-
return decoder(data);
|
|
78
|
-
}
|
|
79
|
-
catch (err) {
|
|
80
|
-
throw new ExecutionCorruptError(taskHash, inHash, err instanceof Error ? err : new Error(String(err)));
|
|
81
|
-
}
|
|
50
|
+
export async function executionGet(storage, repo, taskHash, inHash) {
|
|
51
|
+
return storage.refs.executionGet(repo, taskHash, inHash);
|
|
82
52
|
}
|
|
83
53
|
/**
|
|
84
54
|
* Get output hash for a completed execution.
|
|
85
55
|
*
|
|
86
|
-
* @param
|
|
56
|
+
* @param storage - Storage backend
|
|
57
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
87
58
|
* @param taskHash - Hash of the task object
|
|
88
59
|
* @param inHash - Combined hash of input hashes
|
|
89
60
|
* @returns Output hash or null if not complete or failed
|
|
90
61
|
*/
|
|
91
|
-
export async function executionGetOutput(
|
|
92
|
-
|
|
93
|
-
const outputPath = path.join(execDir, 'output');
|
|
94
|
-
try {
|
|
95
|
-
const content = await fs.readFile(outputPath, 'utf-8');
|
|
96
|
-
return content.trim();
|
|
97
|
-
}
|
|
98
|
-
catch (err) {
|
|
99
|
-
if (isNotFoundError(err)) {
|
|
100
|
-
return null;
|
|
101
|
-
}
|
|
102
|
-
throw err;
|
|
103
|
-
}
|
|
62
|
+
export async function executionGetOutput(storage, repo, taskHash, inHash) {
|
|
63
|
+
return storage.refs.executionGetOutput(repo, taskHash, inHash);
|
|
104
64
|
}
|
|
105
65
|
/**
|
|
106
66
|
* List all input hashes that have executions for a given task.
|
|
107
67
|
*
|
|
108
|
-
* @param
|
|
68
|
+
* @param storage - Storage backend
|
|
69
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
109
70
|
* @param taskHash - Hash of the task object
|
|
110
71
|
* @returns Array of input hashes
|
|
111
72
|
*/
|
|
112
|
-
export async function executionListForTask(
|
|
113
|
-
|
|
114
|
-
try {
|
|
115
|
-
const entries = await fs.readdir(taskDir);
|
|
116
|
-
// Filter to only valid hash directories (64 hex chars)
|
|
117
|
-
return entries.filter((e) => /^[a-f0-9]{64}$/.test(e));
|
|
118
|
-
}
|
|
119
|
-
catch {
|
|
120
|
-
return [];
|
|
121
|
-
}
|
|
73
|
+
export async function executionListForTask(storage, repo, taskHash) {
|
|
74
|
+
return storage.refs.executionListForTask(repo, taskHash);
|
|
122
75
|
}
|
|
123
76
|
/**
|
|
124
77
|
* List all executions in the repository.
|
|
125
78
|
*
|
|
126
|
-
* @param
|
|
79
|
+
* @param storage - Storage backend
|
|
80
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
127
81
|
* @returns Array of { taskHash, inputsHash } objects
|
|
128
82
|
*/
|
|
129
|
-
export async function executionList(
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
83
|
+
export async function executionList(storage, repo) {
|
|
84
|
+
return storage.refs.executionList(repo);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Find the execution reference for a task in a workspace.
|
|
88
|
+
*
|
|
89
|
+
* This looks up the task's current input hashes from the workspace state
|
|
90
|
+
* and finds the matching execution. If no execution exists for the current
|
|
91
|
+
* inputs, falls back to the most recent execution.
|
|
92
|
+
*
|
|
93
|
+
* @param storage - Storage backend
|
|
94
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
95
|
+
* @param ws - Workspace name
|
|
96
|
+
* @param taskName - Task name
|
|
97
|
+
* @returns Execution reference or null if no executions exist
|
|
98
|
+
*/
|
|
99
|
+
export async function executionFindCurrent(storage, repo, ws, taskName) {
|
|
100
|
+
// Import here to avoid circular dependency
|
|
101
|
+
const { workspaceGetTaskHash, workspaceGetTask } = await import('./tasks.js');
|
|
102
|
+
const { workspaceGetDatasetHash } = await import('./trees.js');
|
|
103
|
+
const taskHash = await workspaceGetTaskHash(storage, repo, ws, taskName);
|
|
104
|
+
const task = await workspaceGetTask(storage, repo, ws, taskName);
|
|
105
|
+
// Get the current input hashes from the workspace
|
|
106
|
+
const currentInputHashes = [];
|
|
107
|
+
let allInputsAssigned = true;
|
|
108
|
+
for (const inputPath of task.inputs) {
|
|
109
|
+
const { refType, hash } = await workspaceGetDatasetHash(storage, repo, ws, inputPath);
|
|
110
|
+
if (refType !== 'value' || hash === null) {
|
|
111
|
+
allInputsAssigned = false;
|
|
112
|
+
break;
|
|
147
113
|
}
|
|
114
|
+
currentInputHashes.push(hash);
|
|
148
115
|
}
|
|
149
|
-
|
|
150
|
-
|
|
116
|
+
const executions = await executionListForTask(storage, repo, taskHash);
|
|
117
|
+
if (allInputsAssigned) {
|
|
118
|
+
const inHash = inputsHash(currentInputHashes);
|
|
119
|
+
if (executions.includes(inHash)) {
|
|
120
|
+
return { taskHash, inputsHash: inHash, isCurrent: true };
|
|
121
|
+
}
|
|
151
122
|
}
|
|
152
|
-
|
|
123
|
+
// Fall back to most recent execution
|
|
124
|
+
if (executions.length > 0) {
|
|
125
|
+
return { taskHash, inputsHash: executions[0], isCurrent: false };
|
|
126
|
+
}
|
|
127
|
+
return null;
|
|
153
128
|
}
|
|
154
129
|
/**
|
|
155
130
|
* Read execution logs with pagination support.
|
|
156
131
|
*
|
|
157
|
-
* @param
|
|
132
|
+
* @param storage - Storage backend
|
|
133
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
158
134
|
* @param taskHash - Hash of the task object
|
|
159
135
|
* @param inHash - Combined hash of input hashes
|
|
160
136
|
* @param stream - Which log stream to read ('stdout' or 'stderr')
|
|
161
137
|
* @param options - Pagination options
|
|
162
138
|
* @returns Log chunk with data and metadata
|
|
163
139
|
*/
|
|
164
|
-
export async function executionReadLog(
|
|
165
|
-
|
|
166
|
-
const logPath = path.join(execDir, `${stream}.txt`);
|
|
167
|
-
const offset = options.offset ?? 0;
|
|
168
|
-
const limit = options.limit ?? 65536; // 64KB default
|
|
169
|
-
try {
|
|
170
|
-
const stat = await fs.stat(logPath);
|
|
171
|
-
const totalSize = stat.size;
|
|
172
|
-
// Open file and read chunk
|
|
173
|
-
const fd = await fs.open(logPath, 'r');
|
|
174
|
-
try {
|
|
175
|
-
const buffer = Buffer.alloc(Math.min(limit, totalSize - offset));
|
|
176
|
-
const { bytesRead } = await fd.read(buffer, 0, buffer.length, offset);
|
|
177
|
-
return {
|
|
178
|
-
data: buffer.slice(0, bytesRead).toString('utf-8'),
|
|
179
|
-
offset,
|
|
180
|
-
size: bytesRead,
|
|
181
|
-
totalSize,
|
|
182
|
-
complete: offset + bytesRead >= totalSize,
|
|
183
|
-
};
|
|
184
|
-
}
|
|
185
|
-
finally {
|
|
186
|
-
await fd.close();
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
catch {
|
|
190
|
-
// Log file doesn't exist yet
|
|
191
|
-
return {
|
|
192
|
-
data: '',
|
|
193
|
-
offset: 0,
|
|
194
|
-
size: 0,
|
|
195
|
-
totalSize: 0,
|
|
196
|
-
complete: true,
|
|
197
|
-
};
|
|
198
|
-
}
|
|
140
|
+
export async function executionReadLog(storage, repo, taskHash, inHash, stream, options = {}) {
|
|
141
|
+
return storage.logs.read(repo, taskHash, inHash, stream, options);
|
|
199
142
|
}
|
|
200
143
|
// ============================================================================
|
|
201
144
|
// Command IR Evaluation
|
|
@@ -205,14 +148,15 @@ export async function executionReadLog(repoPath, taskHash, inHash, stream, optio
|
|
|
205
148
|
*
|
|
206
149
|
* The IR is an East function: (inputs: Array<String>, output: String) -> Array<String>
|
|
207
150
|
*
|
|
208
|
-
* @param
|
|
151
|
+
* @param storage - Storage backend
|
|
152
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
209
153
|
* @param commandIrHash - Hash of the IR object
|
|
210
154
|
* @param inputPaths - Paths to staged input files
|
|
211
155
|
* @param outputPath - Path where output should be written
|
|
212
156
|
* @returns Array of strings to exec
|
|
213
157
|
*/
|
|
214
|
-
export async function evaluateCommandIr(
|
|
215
|
-
const irData = await
|
|
158
|
+
export async function evaluateCommandIr(storage, repo, commandIrHash, inputPaths, outputPath) {
|
|
159
|
+
const irData = await storage.objects.read(repo, commandIrHash);
|
|
216
160
|
try {
|
|
217
161
|
// Decode the IR from beast2 format
|
|
218
162
|
const decoder = decodeBeast2For(IRType);
|
|
@@ -301,21 +245,21 @@ export async function isProcessAlive(pid, pidStartTime, bootId) {
|
|
|
301
245
|
* 5. Runs the command
|
|
302
246
|
* 6. Stores the output and updates status
|
|
303
247
|
*
|
|
304
|
-
* @param
|
|
248
|
+
* @param storage - Storage backend
|
|
249
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
305
250
|
* @param taskHash - Hash of the task object
|
|
306
251
|
* @param inputHashes - Array of input dataset hashes
|
|
307
252
|
* @param options - Execution options
|
|
308
253
|
* @returns Execution result
|
|
309
254
|
*/
|
|
310
|
-
export async function taskExecute(
|
|
255
|
+
export async function taskExecute(storage, repo, taskHash, inputHashes, options = {}) {
|
|
311
256
|
const inHash = inputsHash(inputHashes);
|
|
312
|
-
const execDir = executionPath(repoPath, taskHash, inHash);
|
|
313
257
|
const startTime = Date.now();
|
|
314
258
|
// Step 1: Check cache (unless force)
|
|
315
259
|
if (!options.force) {
|
|
316
|
-
const existingOutput = await executionGetOutput(
|
|
260
|
+
const existingOutput = await storage.refs.executionGetOutput(repo, taskHash, inHash);
|
|
317
261
|
if (existingOutput !== null) {
|
|
318
|
-
const status = await executionGet(
|
|
262
|
+
const status = await storage.refs.executionGet(repo, taskHash, inHash);
|
|
319
263
|
if (status && status.type === 'success') {
|
|
320
264
|
return {
|
|
321
265
|
inputsHash: inHash,
|
|
@@ -332,7 +276,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
332
276
|
// Step 2: Read task object
|
|
333
277
|
let task;
|
|
334
278
|
try {
|
|
335
|
-
const taskData = await
|
|
279
|
+
const taskData = await storage.objects.read(repo, taskHash);
|
|
336
280
|
const decoder = decodeBeast2For(TaskObjectType);
|
|
337
281
|
task = decoder(Buffer.from(taskData));
|
|
338
282
|
}
|
|
@@ -357,7 +301,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
357
301
|
const inputPaths = [];
|
|
358
302
|
for (let i = 0; i < inputHashes.length; i++) {
|
|
359
303
|
const inputPath = path.join(scratchDir, `input-${i}.beast2`);
|
|
360
|
-
const inputData = await
|
|
304
|
+
const inputData = await storage.objects.read(repo, inputHashes[i]);
|
|
361
305
|
await fs.writeFile(inputPath, inputData);
|
|
362
306
|
inputPaths.push(inputPath);
|
|
363
307
|
}
|
|
@@ -365,7 +309,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
365
309
|
const outputPath = path.join(scratchDir, 'output.beast2');
|
|
366
310
|
let args;
|
|
367
311
|
try {
|
|
368
|
-
args = await evaluateCommandIr(
|
|
312
|
+
args = await evaluateCommandIr(storage, repo, task.commandIr, inputPaths, outputPath);
|
|
369
313
|
}
|
|
370
314
|
catch (err) {
|
|
371
315
|
return {
|
|
@@ -389,29 +333,25 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
389
333
|
error: 'Command IR produced empty command',
|
|
390
334
|
};
|
|
391
335
|
}
|
|
392
|
-
// Step 6:
|
|
393
|
-
await fs.mkdir(execDir, { recursive: true });
|
|
394
|
-
// Step 7: Get boot ID for crash detection
|
|
336
|
+
// Step 6: Get boot ID for crash detection
|
|
395
337
|
const bootId = await getBootId();
|
|
396
|
-
// Step
|
|
397
|
-
const result = await runCommand(
|
|
398
|
-
// Step
|
|
338
|
+
// Step 7: Execute command
|
|
339
|
+
const result = await runCommand(storage, repo, taskHash, inHash, args, inputHashes, bootId, options);
|
|
340
|
+
// Step 8: Handle result
|
|
399
341
|
if (result.exitCode === 0) {
|
|
400
342
|
// Success - read and store output
|
|
401
343
|
try {
|
|
402
344
|
const outputData = await fs.readFile(outputPath);
|
|
403
|
-
const outputHash = await
|
|
404
|
-
// Write output ref
|
|
405
|
-
await
|
|
406
|
-
// Write success status
|
|
345
|
+
const outputHash = await storage.objects.write(repo, outputData);
|
|
346
|
+
// Write output ref and success status
|
|
347
|
+
await storage.refs.executionWriteOutput(repo, taskHash, inHash, outputHash);
|
|
407
348
|
const status = variant('success', {
|
|
408
349
|
inputHashes,
|
|
409
350
|
outputHash,
|
|
410
351
|
startedAt: new Date(startTime),
|
|
411
352
|
completedAt: new Date(),
|
|
412
353
|
});
|
|
413
|
-
|
|
414
|
-
await fs.writeFile(path.join(execDir, 'status.beast2'), encoder(status));
|
|
354
|
+
await storage.refs.executionWrite(repo, taskHash, inHash, status);
|
|
415
355
|
return {
|
|
416
356
|
inputsHash: inHash,
|
|
417
357
|
cached: false,
|
|
@@ -430,8 +370,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
430
370
|
completedAt: new Date(),
|
|
431
371
|
message: `Failed to read output: ${err}`,
|
|
432
372
|
});
|
|
433
|
-
|
|
434
|
-
await fs.writeFile(path.join(execDir, 'status.beast2'), encoder(status));
|
|
373
|
+
await storage.refs.executionWrite(repo, taskHash, inHash, status);
|
|
435
374
|
return {
|
|
436
375
|
inputsHash: inHash,
|
|
437
376
|
cached: false,
|
|
@@ -451,8 +390,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
451
390
|
completedAt: new Date(),
|
|
452
391
|
exitCode: BigInt(result?.exitCode ?? -1),
|
|
453
392
|
});
|
|
454
|
-
|
|
455
|
-
await fs.writeFile(path.join(execDir, 'status.beast2'), encoder(status));
|
|
393
|
+
await storage.refs.executionWrite(repo, taskHash, inHash, status);
|
|
456
394
|
return {
|
|
457
395
|
inputsHash: inHash,
|
|
458
396
|
cached: false,
|
|
@@ -477,7 +415,7 @@ export async function taskExecute(repoPath, taskHash, inputHashes, options = {})
|
|
|
477
415
|
/**
|
|
478
416
|
* Run a command and capture output
|
|
479
417
|
*/
|
|
480
|
-
async function runCommand(
|
|
418
|
+
async function runCommand(storage, repo, taskHash, inHash, args, inputHashes, bootId, options) {
|
|
481
419
|
const [cmd, ...cmdArgs] = args;
|
|
482
420
|
// Process Lifecycle Management
|
|
483
421
|
// ============================
|
|
@@ -514,21 +452,39 @@ async function runCommand(args, execDir, inputHashes, bootId, options) {
|
|
|
514
452
|
resolve({ exitCode: code, error: code !== 0 ? `Exit code: ${code}` : null });
|
|
515
453
|
});
|
|
516
454
|
});
|
|
517
|
-
//
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
// Tee stdout
|
|
455
|
+
// Use promise chains to ensure sequential log writes without overlapping
|
|
456
|
+
let stdoutWriteChain = Promise.resolve();
|
|
457
|
+
let stderrWriteChain = Promise.resolve();
|
|
458
|
+
// Tee stdout - use storage.logs.append for log persistence
|
|
521
459
|
child.stdout?.on('data', (data) => {
|
|
522
|
-
|
|
460
|
+
const str = data.toString('utf-8');
|
|
461
|
+
// Chain writes sequentially to avoid overlapping
|
|
462
|
+
stdoutWriteChain = stdoutWriteChain.then(async () => {
|
|
463
|
+
try {
|
|
464
|
+
await storage.logs.append(repo, taskHash, inHash, 'stdout', str);
|
|
465
|
+
}
|
|
466
|
+
catch (err) {
|
|
467
|
+
console.warn(`Failed to append stdout log: ${err instanceof Error ? err.message : String(err)}`);
|
|
468
|
+
}
|
|
469
|
+
});
|
|
523
470
|
if (options.onStdout) {
|
|
524
|
-
options.onStdout(
|
|
471
|
+
options.onStdout(str);
|
|
525
472
|
}
|
|
526
473
|
});
|
|
527
|
-
// Tee stderr
|
|
474
|
+
// Tee stderr - use storage.logs.append for log persistence
|
|
528
475
|
child.stderr?.on('data', (data) => {
|
|
529
|
-
|
|
476
|
+
const str = data.toString('utf-8');
|
|
477
|
+
// Chain writes sequentially to avoid overlapping
|
|
478
|
+
stderrWriteChain = stderrWriteChain.then(async () => {
|
|
479
|
+
try {
|
|
480
|
+
await storage.logs.append(repo, taskHash, inHash, 'stderr', str);
|
|
481
|
+
}
|
|
482
|
+
catch (err) {
|
|
483
|
+
console.warn(`Failed to append stderr log: ${err instanceof Error ? err.message : String(err)}`);
|
|
484
|
+
}
|
|
485
|
+
});
|
|
530
486
|
if (options.onStderr) {
|
|
531
|
-
options.onStderr(
|
|
487
|
+
options.onStderr(str);
|
|
532
488
|
}
|
|
533
489
|
});
|
|
534
490
|
// Helper to kill the entire process group (child and all its descendants).
|
|
@@ -559,7 +515,7 @@ async function runCommand(args, execDir, inputHashes, bootId, options) {
|
|
|
559
515
|
options.signal.addEventListener('abort', killProcessGroup, { once: true });
|
|
560
516
|
}
|
|
561
517
|
}
|
|
562
|
-
// Write running status with actual child PID
|
|
518
|
+
// Write running status with actual child PID
|
|
563
519
|
const pidStartTime = await getPidStartTime(child.pid);
|
|
564
520
|
const status = variant('running', {
|
|
565
521
|
inputHashes,
|
|
@@ -568,18 +524,17 @@ async function runCommand(args, execDir, inputHashes, bootId, options) {
|
|
|
568
524
|
pidStartTime: BigInt(pidStartTime ?? -1),
|
|
569
525
|
bootId,
|
|
570
526
|
});
|
|
571
|
-
|
|
572
|
-
await fs.writeFile(path.join(execDir, 'status.beast2'), encoder(status));
|
|
527
|
+
await storage.refs.executionWrite(repo, taskHash, inHash, status);
|
|
573
528
|
// Wait for process to complete
|
|
574
529
|
const result = await resultPromise;
|
|
530
|
+
// Wait for any pending log writes to complete
|
|
531
|
+
await Promise.all([stdoutWriteChain, stderrWriteChain]);
|
|
575
532
|
// Cleanup
|
|
576
533
|
if (timeoutId)
|
|
577
534
|
clearTimeout(timeoutId);
|
|
578
535
|
if (options.signal) {
|
|
579
536
|
options.signal.removeEventListener('abort', killProcessGroup);
|
|
580
537
|
}
|
|
581
|
-
stdoutStream.end();
|
|
582
|
-
stderrStream.end();
|
|
583
538
|
return result;
|
|
584
539
|
}
|
|
585
540
|
//# sourceMappingURL=executions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executions.js","sourceRoot":"","sources":["../../src/executions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"executions.js","sourceRoot":"","sources":["../../src/executions.ts"],"names":[],"mappings":"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"}
|
package/dist/src/gc.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright (c) 2025 Elara AI Pty Ltd
|
|
3
3
|
* Licensed under BSL 1.1. See LICENSE for details.
|
|
4
4
|
*/
|
|
5
|
+
import type { StorageBackend } from './storage/interfaces.js';
|
|
5
6
|
/**
|
|
6
7
|
* Options for garbage collection
|
|
7
8
|
*/
|
|
@@ -46,9 +47,15 @@ export interface GcResult {
|
|
|
46
47
|
/**
|
|
47
48
|
* Run garbage collection on an e3 repository.
|
|
48
49
|
*
|
|
49
|
-
*
|
|
50
|
+
* Note: GC currently requires LocalStorage as it needs direct filesystem access
|
|
51
|
+
* to enumerate and delete unreachable objects. Cloud backends will need their
|
|
52
|
+
* own GC implementation (e.g., using S3 lifecycle policies).
|
|
53
|
+
*
|
|
54
|
+
* @param storage - Storage backend (must be LocalStorage)
|
|
55
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
50
56
|
* @param options - GC options
|
|
51
57
|
* @returns GC result with statistics
|
|
58
|
+
* @throws Error if storage is not a LocalStorage
|
|
52
59
|
*/
|
|
53
|
-
export declare function repoGc(
|
|
60
|
+
export declare function repoGc(storage: StorageBackend, repo: string, options?: GcOptions): Promise<GcResult>;
|
|
54
61
|
//# sourceMappingURL=gc.d.ts.map
|
package/dist/src/gc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/gc.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"gc.d.ts","sourceRoot":"","sources":["../../src/gc.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,MAAM,CAC1B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,SAAc,GACtB,OAAO,CAAC,QAAQ,CAAC,CAuBnB"}
|
package/dist/src/gc.js
CHANGED
|
@@ -13,27 +13,37 @@ import * as fs from 'fs/promises';
|
|
|
13
13
|
import * as path from 'path';
|
|
14
14
|
import { decodeBeast2For } from '@elaraai/east';
|
|
15
15
|
import { WorkspaceStateType } from '@elaraai/e3-types';
|
|
16
|
-
import {
|
|
16
|
+
import { LocalStorage } from './storage/local/index.js';
|
|
17
17
|
/**
|
|
18
18
|
* Run garbage collection on an e3 repository.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
20
|
+
* Note: GC currently requires LocalStorage as it needs direct filesystem access
|
|
21
|
+
* to enumerate and delete unreachable objects. Cloud backends will need their
|
|
22
|
+
* own GC implementation (e.g., using S3 lifecycle policies).
|
|
23
|
+
*
|
|
24
|
+
* @param storage - Storage backend (must be LocalStorage)
|
|
25
|
+
* @param repo - Repository identifier (for local storage, the path to e3 repository directory)
|
|
21
26
|
* @param options - GC options
|
|
22
27
|
* @returns GC result with statistics
|
|
28
|
+
* @throws Error if storage is not a LocalStorage
|
|
23
29
|
*/
|
|
24
|
-
export async function repoGc(
|
|
30
|
+
export async function repoGc(storage, repo, options = {}) {
|
|
31
|
+
// GC requires direct filesystem access - verify we have LocalStorage
|
|
32
|
+
if (!(storage instanceof LocalStorage)) {
|
|
33
|
+
throw new Error('GC is only supported with LocalStorage storage');
|
|
34
|
+
}
|
|
25
35
|
const minAge = options.minAge ?? 60000; // Default 1 minute
|
|
26
36
|
const dryRun = options.dryRun ?? false;
|
|
27
37
|
const now = Date.now();
|
|
28
38
|
// Step 1: Collect all root hashes
|
|
29
|
-
const roots = await collectRoots(
|
|
39
|
+
const roots = await collectRoots(repo);
|
|
30
40
|
// Step 2: Mark all reachable objects starting from roots
|
|
31
41
|
const reachable = new Set();
|
|
32
42
|
for (const root of roots) {
|
|
33
|
-
await markReachable(
|
|
43
|
+
await markReachable(storage, repo, root, reachable);
|
|
34
44
|
}
|
|
35
45
|
// Step 3: Sweep - enumerate all objects and delete unreachable ones
|
|
36
|
-
const result = await sweep(
|
|
46
|
+
const result = await sweep(repo, reachable, minAge, now, dryRun);
|
|
37
47
|
return result;
|
|
38
48
|
}
|
|
39
49
|
/**
|
|
@@ -122,14 +132,14 @@ async function collectRefsFromDir(dir, roots, maxDepth, currentDepth = 0) {
|
|
|
122
132
|
*
|
|
123
133
|
* Traverses the object graph by scanning for hash patterns in the data.
|
|
124
134
|
*/
|
|
125
|
-
async function markReachable(
|
|
135
|
+
async function markReachable(storage, repo, hash, reachable) {
|
|
126
136
|
// Already visited?
|
|
127
137
|
if (reachable.has(hash)) {
|
|
128
138
|
return;
|
|
129
139
|
}
|
|
130
140
|
// Try to load the object
|
|
131
141
|
try {
|
|
132
|
-
const data = await
|
|
142
|
+
const data = await storage.objects.read(repo, hash);
|
|
133
143
|
reachable.add(hash);
|
|
134
144
|
// Scan for hash patterns in the data
|
|
135
145
|
const dataStr = Buffer.from(data).toString('latin1');
|
|
@@ -139,7 +149,7 @@ async function markReachable(repoPath, hash, reachable) {
|
|
|
139
149
|
const potentialHash = match[0];
|
|
140
150
|
if (!reachable.has(potentialHash)) {
|
|
141
151
|
// Recursively mark if it exists
|
|
142
|
-
await markReachable(
|
|
152
|
+
await markReachable(storage, repo, potentialHash, reachable);
|
|
143
153
|
}
|
|
144
154
|
}
|
|
145
155
|
}
|