@@ -25,6 +25,7 @@ import { MongoImage } from '../../../common/file/image/schema';
25
25
import { hashStr } from '@fastgpt/global/common/string/tools' ;
26
26
import { addDays } from 'date-fns' ;
27
27
import { MongoDatasetDataText } from '../data/dataTextSchema' ;
28
+ import { delay , retryFn } from '@fastgpt/global/common/system/utils' ;
28
29
29
30
export const createCollectionAndInsertData = async ( {
30
31
dataset,
@@ -234,7 +235,7 @@ export const delCollectionRelatedSource = async ({
234
235
relatedImgId ?: string ;
235
236
} ;
236
237
} [ ] ;
237
- session : ClientSession ;
238
+ session ? : ClientSession ;
238
239
} ) => {
239
240
if ( collections . length === 0 ) return ;
240
241
@@ -282,47 +283,55 @@ export async function delCollection({
282
283
const datasetIds = Array . from ( new Set ( collections . map ( ( item ) => String ( item . datasetId ) ) ) ) ;
283
284
const collectionIds = collections . map ( ( item ) => String ( item . _id ) ) ;
284
285
285
- // Delete training data
286
- await MongoDatasetTraining . deleteMany ( {
287
- teamId,
288
- datasetId : { $in : datasetIds } ,
289
- collectionId : { $in : collectionIds }
286
+ await retryFn ( async ( ) => {
287
+ await Promise . all ( [
288
+ // Delete training data
289
+ MongoDatasetTraining . deleteMany ( {
290
+ teamId,
291
+ datasetId : { $in : datasetIds } ,
292
+ collectionId : { $in : collectionIds }
293
+ } ) ,
294
+ // Delete dataset_data_texts
295
+ MongoDatasetDataText . deleteMany ( {
296
+ teamId,
297
+ datasetId : { $in : datasetIds } ,
298
+ collectionId : { $in : collectionIds }
299
+ } ) ,
300
+ // Delete dataset_datas
301
+ MongoDatasetData . deleteMany ( {
302
+ teamId,
303
+ datasetId : { $in : datasetIds } ,
304
+ collectionId : { $in : collectionIds }
305
+ } ) ,
306
+ ...( delImg
307
+ ? [
308
+ delImgByRelatedId ( {
309
+ teamId,
310
+ relateIds : collections
311
+ . map ( ( item ) => item ?. metadata ?. relatedImgId || '' )
312
+ . filter ( Boolean )
313
+ } )
314
+ ]
315
+ : [ ] ) ,
316
+ ...( delFile
317
+ ? [
318
+ delFileByFileIdList ( {
319
+ bucketName : BucketNameEnum . dataset ,
320
+ fileIdList : collections . map ( ( item ) => item ?. fileId || '' ) . filter ( Boolean )
321
+ } )
322
+ ]
323
+ : [ ] ) ,
324
+ // Delete vector data
325
+ deleteDatasetDataVector ( { teamId, datasetIds, collectionIds } )
326
+ ] ) ;
327
+
328
+ // delete collections
329
+ await MongoDatasetCollection . deleteMany (
330
+ {
331
+ teamId,
332
+ _id : { $in : collectionIds }
333
+ } ,
334
+ { session }
335
+ ) ;
290
336
} ) ;
291
-
292
- if ( delImg ) {
293
- await delImgByRelatedId ( {
294
- teamId,
295
- relateIds : collections . map ( ( item ) => item ?. metadata ?. relatedImgId || '' ) . filter ( Boolean ) ,
296
- session
297
- } ) ;
298
- }
299
- if ( delFile ) {
300
- await delFileByFileIdList ( {
301
- bucketName : BucketNameEnum . dataset ,
302
- fileIdList : collections . map ( ( item ) => item ?. fileId || '' ) . filter ( Boolean )
303
- } ) ;
304
- }
305
-
306
- // Delete dataset_datas
307
- await MongoDatasetData . deleteMany (
308
- { teamId, datasetId : { $in : datasetIds } , collectionId : { $in : collectionIds } } ,
309
- { session }
310
- ) ;
311
- // Delete dataset_data_texts
312
- await MongoDatasetDataText . deleteMany (
313
- { teamId, datasetId : { $in : datasetIds } , collectionId : { $in : collectionIds } } ,
314
- { session }
315
- ) ;
316
-
317
- // delete collections
318
- await MongoDatasetCollection . deleteMany (
319
- {
320
- teamId,
321
- _id : { $in : collectionIds }
322
- } ,
323
- { session }
324
- ) ;
325
-
326
- // no session delete: delete files, vector data
327
- await deleteDatasetDataVector ( { teamId, datasetIds, collectionIds } ) ;
328
337
}
0 commit comments