Skip to content

Commit 48a0e12

Browse files
Add timeout and retry deletion for osd core
Signed-off-by: Peter Zhu <[email protected]>
1 parent f52b5d2 commit 48a0e12

File tree

1 file changed

+37
-2
lines changed

1 file changed

+37
-2
lines changed

src/dev/build/lib/fs.ts

+37-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ import del from 'del';
4444
import deleteEmpty from 'delete-empty';
4545
import tar, { ExtractOptions } from 'tar';
4646
import { ToolingLog } from '@osd/dev-utils';
47+
import { standardize } from '@osd/cross-platform';
4748

4849
const pipelineAsync = promisify(pipeline);
4950
const mkdirAsync = promisify(fs.mkdir);
@@ -120,7 +121,24 @@ export async function deleteAll(patterns: string[], log: ToolingLog) {
120121
dryRun: true,
121122
});
122123

123-
await Promise.all(filesToDelete.map((folder) => rm(folder, { force: true, recursive: true })));
124+
await Promise.all(
125+
filesToDelete.map(async (folder) => {
126+
if (process.platform === 'win32') {
127+
folder = standardize(folder, false, false, true); // extended long path
128+
}
129+
130+
for (let i = 0; i < 3; i++) {
131+
try {
132+
await rm(folder, { force: true, recursive: true });
133+
return;
134+
} catch (err) {
135+
if (i === 2) throw err;
136+
log.debug(`Retry ${i + 1}/3 on ${folder}, waiting for 1000ms`);
137+
await new Promise((resolveSleep) => setTimeout(resolveSleep, 1000));
138+
}
139+
}
140+
})
141+
);
124142

125143
if (log) {
126144
log.debug('Deleted %d files/directories', filesToDelete.length);
@@ -155,7 +173,24 @@ export async function deleteEmptyFolders(
155173
})
156174
: [];
157175

158-
await Promise.all(foldersToDelete.map((folder) => rm(folder, { force: true, recursive: true })));
176+
await Promise.all(
177+
foldersToDelete.map(async (folder) => {
178+
if (process.platform === 'win32') {
179+
folder = standardize(folder, false, false, true); // extended long path
180+
}
181+
182+
for (let i = 0; i < 3; i++) {
183+
try {
184+
await rm(folder, { force: true, recursive: true });
185+
return;
186+
} catch (err) {
187+
if (i === 2) throw err;
188+
log.debug(`Retry ${i + 1}/3 on ${folder}, waiting for 1000ms`);
189+
await new Promise((resolveSleep) => setTimeout(resolveSleep, 1000));
190+
}
191+
}
192+
})
193+
);
159194

160195
log.debug('Deleted %d empty folders', foldersToDelete.length);
161196
log.verbose('Deleted:', longInspect(foldersToDelete));

0 commit comments

Comments
 (0)