@@ -260,7 +260,7 @@ export class CodeSyncService {
260
260
const userId = req . user . id ;
261
261
const contentType = req . headers [ "content-type" ] || "*/*" ;
262
262
let oldRevList : string [ ] | undefined ;
263
- const rev = await this . db . insert (
263
+ const newRev = await this . db . insert (
264
264
userId ,
265
265
resourceKey ,
266
266
async ( rev , oldRevs ) => {
@@ -294,13 +294,15 @@ export class CodeSyncService {
294
294
) ;
295
295
if ( oldRevList && oldRevList . length > 0 ) {
296
296
// 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
+ ) ;
298
300
}
299
- if ( ! rev ) {
301
+ if ( ! newRev ) {
300
302
res . sendStatus ( isEditSessionsResource ? 400 : 412 ) ;
301
303
return ;
302
304
}
303
- res . setHeader ( "etag" , rev ) ;
305
+ res . setHeader ( "etag" , newRev ) ;
304
306
res . sendStatus ( 200 ) ;
305
307
return ;
306
308
} ,
@@ -342,30 +344,7 @@ export class CodeSyncService {
342
344
}
343
345
344
346
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 ) ;
369
348
res . sendStatus ( 200 ) ;
370
349
} ) ;
371
350
@@ -408,32 +387,35 @@ export class CodeSyncService {
408
387
return JSON . stringify ( extensions ) ;
409
388
}
410
389
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 ) ;
430
400
}
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
+ }
438
420
}
439
421
}
0 commit comments