Skip to content

Commit 50ef2d3

Browse files
committed
💄
1 parent b6c28ad commit 50ef2d3

File tree

1 file changed

+36
-54
lines changed

1 file changed

+36
-54
lines changed

components/server/src/code-sync/code-sync-service.ts

+36-54
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ export class CodeSyncService {
260260
const userId = req.user.id;
261261
const contentType = req.headers["content-type"] || "*/*";
262262
let oldRevList: string[] | undefined;
263-
const rev = await this.db.insert(
263+
const newRev = await this.db.insert(
264264
userId,
265265
resourceKey,
266266
async (rev, oldRevs) => {
@@ -294,13 +294,15 @@ export class CodeSyncService {
294294
);
295295
if (oldRevList && oldRevList.length > 0) {
296296
// sync delete old revs from storage
297-
this.deleteObjects(userId, resourceKey, oldRevList).catch((e) => {});
297+
Promise.allSettled(oldRevList.map((rev) => this.deleteResource(userId, resourceKey, rev))).catch(
298+
() => {},
299+
);
298300
}
299-
if (!rev) {
301+
if (!newRev) {
300302
res.sendStatus(isEditSessionsResource ? 400 : 412);
301303
return;
302304
}
303-
res.setHeader("etag", rev);
305+
res.setHeader("etag", newRev);
304306
res.sendStatus(200);
305307
return;
306308
},
@@ -342,30 +344,7 @@ export class CodeSyncService {
342344
}
343345

344346
const userId = req.user.id;
345-
await this.db.deleteResource(userId, resource, ref, async (ref?: string) => {
346-
const request = new DeleteRequest();
347-
request.setOwnerId(userId);
348-
if (ref) {
349-
request.setExact(toObjectName(resource, ref));
350-
} else {
351-
request.setPrefix(getNamePrefix("editSessions") + resource);
352-
}
353-
try {
354-
const blobsClient = this.blobsProvider.getDefault();
355-
await util.promisify(blobsClient.delete.bind(blobsClient))(request);
356-
} catch (e) {
357-
if (e.code === status.NOT_FOUND) {
358-
return;
359-
}
360-
if (ref) {
361-
log.error({ userId }, "code sync: failed to delete obj", e, {
362-
object: toObjectName(resource, ref),
363-
});
364-
} else {
365-
log.error({ userId }, "code sync: failed to delete", e);
366-
}
367-
}
368-
});
347+
await this.deleteResource(userId, resource, ref);
369348
res.sendStatus(200);
370349
});
371350

@@ -408,32 +387,35 @@ export class CodeSyncService {
408387
return JSON.stringify(extensions);
409388
}
410389

411-
protected async deleteObjects(userId: string, resourceKey: ServerResource, revs: string[]) {
412-
const tasks = revs.map((rev) =>
413-
this.db
414-
.deleteResource(userId, resourceKey, rev, async (rev?: string) => {
415-
const obj = toObjectName(resourceKey, rev!);
416-
try {
417-
const request = new DeleteRequest();
418-
request.setOwnerId(userId);
419-
request.setExact(obj);
420-
const blobsClient = this.blobsProvider.getDefault();
421-
await util.promisify<DeleteRequest, DeleteResponse>(blobsClient.delete.bind(blobsClient))(
422-
request,
423-
);
424-
} catch (err) {
425-
if (err.code === status.NOT_FOUND) {
426-
return;
427-
}
428-
log.error({ userId }, "code sync: failed to delete obj", err, { object: obj });
429-
throw err;
390+
protected async deleteResource(userId: string, resourceKey: ServerResource, rev?: string) {
391+
try {
392+
await this.db.deleteResource(userId, resourceKey, rev, async (rev?: string) => {
393+
try {
394+
const request = new DeleteRequest();
395+
request.setOwnerId(userId);
396+
if (rev) {
397+
request.setExact(toObjectName(resourceKey, rev));
398+
} else {
399+
request.setPrefix(getNamePrefix("resourceKey") + resourceKey);
430400
}
431-
})
432-
.catch((err) => {
433-
log.error({ userId }, "code sync: failed to delete", err);
434-
}),
435-
);
436-
await Promise.allSettled(tasks);
437-
return;
401+
const blobsClient = this.blobsProvider.getDefault();
402+
await util.promisify<DeleteRequest, DeleteResponse>(blobsClient.delete.bind(blobsClient))(request);
403+
} catch (e) {
404+
if (e.code === status.NOT_FOUND) {
405+
return;
406+
}
407+
throw e;
408+
}
409+
});
410+
} catch (e) {
411+
if (rev) {
412+
log.error({ userId }, "code sync: failed to delete obj", e, {
413+
object: toObjectName(resourceKey, rev),
414+
});
415+
} else {
416+
log.error({ userId }, "code sync: failed to delete", e);
417+
}
418+
throw e;
419+
}
438420
}
439421
}

0 commit comments

Comments
 (0)