Skip to content

Commit 396dc3e

Browse files
Merge pull request #2644 from github/robertbrignull/fix_alert_384
Fix alert by rewriting query history scrubbed to do fewer file operations
2 parents 72512da + 4d4cd4c commit 396dc3e

File tree

1 file changed

+44
-34
lines changed

1 file changed

+44
-34
lines changed

extensions/ql-vscode/src/query-history/query-history-scrubber.ts

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
import { pathExists, stat, remove, readFile } from "fs-extra";
1+
import { pathExists, remove, readFile } from "fs-extra";
22
import { EOL } from "os";
33
import { join } from "path";
44
import { Disposable, ExtensionContext } from "vscode";
55
import { extLogger } from "../common/logging/vscode";
66
import { readDirFullPaths } from "../common/files";
77
import { QueryHistoryDirs } from "./query-history-dirs";
88
import { QueryHistoryManager } from "./query-history-manager";
9+
import { getErrorMessage } from "../common/helpers-pure";
910

1011
const LAST_SCRUB_TIME_KEY = "lastScrubTime";
1112

@@ -132,46 +133,55 @@ async function scrubDirectory(
132133
errorMsg?: string;
133134
deleted: boolean;
134135
}> {
135-
const timestampFile = join(dir, "timestamp");
136136
try {
137-
let deleted = true;
138-
if (!(await stat(dir)).isDirectory()) {
139-
void extLogger.log(` ${dir} is not a directory. Deleting.`);
140-
await remove(dir);
141-
} else if (!(await pathExists(timestampFile))) {
142-
void extLogger.log(` ${dir} has no timestamp file. Deleting.`);
143-
await remove(dir);
144-
} else if (!(await stat(timestampFile)).isFile()) {
145-
void extLogger.log(` ${timestampFile} is not a file. Deleting.`);
137+
if (await shouldScrubDirectory(dir, now, maxQueryTime)) {
146138
await remove(dir);
139+
return { deleted: true };
147140
} else {
148-
const timestampText = await readFile(timestampFile, "utf8");
149-
const timestamp = parseInt(timestampText, 10);
150-
151-
if (Number.isNaN(timestamp)) {
152-
void extLogger.log(
153-
` ${dir} has invalid timestamp '${timestampText}'. Deleting.`,
154-
);
155-
await remove(dir);
156-
} else if (now - timestamp > maxQueryTime) {
157-
void extLogger.log(
158-
` ${dir} is older than ${maxQueryTime / 1000} seconds. Deleting.`,
159-
);
160-
await remove(dir);
161-
} else {
162-
void extLogger.log(
163-
` ${dir} is not older than ${maxQueryTime / 1000} seconds. Keeping.`,
164-
);
165-
deleted = false;
166-
}
141+
return { deleted: false };
167142
}
168-
return {
169-
deleted,
170-
};
171143
} catch (err) {
172144
return {
173-
errorMsg: ` Could not delete '${dir}': ${err}`,
145+
errorMsg: ` Could not delete '${dir}': ${getErrorMessage(err)}`,
174146
deleted: false,
175147
};
176148
}
177149
}
150+
151+
async function shouldScrubDirectory(
152+
dir: string,
153+
now: number,
154+
maxQueryTime: number,
155+
): Promise<boolean> {
156+
const timestamp = await getTimestamp(join(dir, "timestamp"));
157+
if (timestamp === undefined || Number.isNaN(timestamp)) {
158+
void extLogger.log(` ${dir} timestamp is missing or invalid. Deleting.`);
159+
return true;
160+
} else if (now - timestamp > maxQueryTime) {
161+
void extLogger.log(
162+
` ${dir} is older than ${maxQueryTime / 1000} seconds. Deleting.`,
163+
);
164+
return true;
165+
} else {
166+
void extLogger.log(
167+
` ${dir} is not older than ${maxQueryTime / 1000} seconds. Keeping.`,
168+
);
169+
return false;
170+
}
171+
}
172+
173+
async function getTimestamp(
174+
timestampFile: string,
175+
): Promise<number | undefined> {
176+
try {
177+
const timestampText = await readFile(timestampFile, "utf8");
178+
return parseInt(timestampText, 10);
179+
} catch (err) {
180+
void extLogger.log(
181+
` Could not read timestamp file '${timestampFile}': ${getErrorMessage(
182+
err,
183+
)}`,
184+
);
185+
return undefined;
186+
}
187+
}

0 commit comments

Comments
 (0)