Skip to content

Commit

Permalink
Catch and rethrow errors in loops with more informative tracebacks.
Browse files Browse the repository at this point in the history
  • Loading branch information
LTLA committed Feb 19, 2024
1 parent b436a73 commit ac6886c
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 43 deletions.
24 changes: 20 additions & 4 deletions src/handlers/freshHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,23 @@ export async function freshHandler(db_paths, list_projects, list_assets, list_ve

const all_projects = await list_projects();
for (const project of all_projects) {
await internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable);
try {
await internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable);
} catch (err) {
throw new Error("failed to add project '" + project + "'", { cause: err });
}
}
}

// Only exported for the purpose of re-use in manualHandler.js.
export async function internal_freshProject(db_handles, project, list_assets, list_versions, find_latest, read_summary, read_metadata, db_tokenizable) {
const all_assets = await list_assets(project);
for (const asset of all_assets) {
await internal_freshAsset(db_handles, project, asset, list_versions, find_latest, read_summary, read_metadata, db_tokenizable);
try {
await internal_freshAsset(db_handles, project, asset, list_versions, find_latest, read_summary, read_metadata, db_tokenizable);
} catch (err) {
throw new Error("failed to add asset '" + asset + "'", { cause: err });
}
}
}

Expand All @@ -35,7 +43,11 @@ export async function internal_freshAsset(db_handles, project, asset, list_versi
}
const all_versions = await list_versions(project, asset);
for (const version of all_versions) {
await internal_freshVersion(db_handles, project, asset, version, latest, read_summary, read_metadata, db_tokenizable);
try {
await internal_freshVersion(db_handles, project, asset, version, latest, read_summary, read_metadata, db_tokenizable);
} catch (err) {
throw new Error("failed to add version '" + version + "'", { cause: err });
}
}
}

Expand All @@ -46,6 +58,10 @@ export async function internal_freshVersion(db_handles, project, asset, version,
}
const output = await read_metadata(project, asset, version, Object.keys(db_handles));
for (const [e, db] of Object.entries(db_handles)) {
addVersion(db, project, asset, version, (latest == version), output[e], db_tokenizable[e]);
try {
addVersion(db, project, asset, version, (latest == version), output[e], db_tokenizable[e]);
} catch (err) {
throw new Error("failed to add to database '" + e + "'", { cause: err });
}
}
}
78 changes: 41 additions & 37 deletions src/handlers/updateHandler.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,51 +42,55 @@ export async function updateHandler(db_paths, last_modified, read_logs, read_met

for (const l of logs) {
const parameters = l.log;
const type = safe_extract(parameters, "type");
try {
const type = safe_extract(parameters, "type");

if (type == "add-version") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
const version = safe_extract(parameters, "version");
let output = await read_metadata(project, asset, version, to_extract);
for (const [e, db] of Object.entries(db_handles)) {
addVersion(db, project, asset, version, is_latest(parameters), output[e], db_tokenizable[e]);
}
if (type == "add-version") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
const version = safe_extract(parameters, "version");
let output = await read_metadata(project, asset, version, to_extract);
for (const [e, db] of Object.entries(db_handles)) {
addVersion(db, project, asset, version, is_latest(parameters), output[e], db_tokenizable[e]);
}

} else if (type == "delete-version") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
const version = safe_extract(parameters, "version");
for (const db of Object.values(db_handles)) {
deleteVersion(db, project, asset, version);
}
} else if (type == "delete-version") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
const version = safe_extract(parameters, "version");
for (const db of Object.values(db_handles)) {
deleteVersion(db, project, asset, version);
}

// If we just deleted the latest version, we need to reset the
// previous version with the latest information.
if (is_latest(parameters)) {
const latest = await find_latest(project, asset);
if (latest != null) {
for (const db of Object.values(db_handles)) {
setLatest(db, project, asset, latest);
// If we just deleted the latest version, we need to reset the
// previous version with the latest information.
if (is_latest(parameters)) {
const latest = await find_latest(project, asset);
if (latest != null) {
for (const db of Object.values(db_handles)) {
setLatest(db, project, asset, latest);
}
}
}
}

} else if (type == "delete-asset") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
for (const db of Object.values(db_handles)) {
deleteAsset(db, project, asset);
}
} else if (type == "delete-asset") {
const project = safe_extract(parameters, "project");
const asset = safe_extract(parameters, "asset");
for (const db of Object.values(db_handles)) {
deleteAsset(db, project, asset);
}

} else if (type == "delete-project") {
const project = safe_extract(parameters, "project");
for (const db of Object.values(db_handles)) {
deleteProject(db, project);
}
} else if (type == "delete-project") {
const project = safe_extract(parameters, "project");
for (const db of Object.values(db_handles)) {
deleteProject(db, project);
}

} else {
throw new Error("unknown update action type '" + type + "'");
} else {
throw new Error("unknown update action type '" + type + "'");
}
} catch (err) {
throw new Error("failed update for '" + l.name + "' ('" + JSON.stringify(parameters) + "')", { cause: err });
}
}
}
8 changes: 6 additions & 2 deletions src/local/readLogs.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,12 @@ export function readLogs(registry, since) {
continue;
}

const contents = fs.readFileSync(path.join(logdir, l), { encoding: 'utf8', flag: 'r' });
output.push({ time: parsed, log: JSON.parse(contents) });
try {
const contents = fs.readFileSync(path.join(logdir, l), { encoding: 'utf8', flag: 'r' });
output.push({ name: l, time: parsed, log: JSON.parse(contents) });
} catch (err) {
throw new Error("failed to parse log '" + l + "'", { cause: err });
}
}

return output;
Expand Down

0 comments on commit ac6886c

Please sign in to comment.