@@ -561,15 +561,159 @@ func (m *adminStore) BatchCleanDeletedClients(timeout time.Duration, batchSize u
561561
562562// BatchCleanDeletedServices batch clean soft deleted clients
563563func (m * adminStore ) BatchCleanDeletedServices (timeout time.Duration , batchSize uint32 ) (uint32 , error ) {
564- return 0 , nil
564+ log .Infof ("[Store][database] batch clean soft deleted services(%d)" , batchSize )
565+ var rowsAffected int64
566+ err := m .master .processWithTransaction ("batchCleanDeletedServices" , func (tx * BaseTx ) error {
567+ // 查询出需要清理的实例 ID 信息
568+ loadWaitDel := "SELECT id FROM service WHERE flag = 1 AND " +
569+ "mtime <= FROM_UNIXTIME(UNIX_TIMESTAMP(SYSDATE()) - ?) LIMIT ?"
570+ rows , err := tx .Query (loadWaitDel , int32 (timeout .Seconds ()), batchSize )
571+ if err != nil {
572+ log .Errorf ("[Store][database] batch clean soft deleted services(%d), err: %s" , batchSize , err .Error ())
573+ return store .Error (err )
574+ }
575+ waitDelIds := make ([]interface {}, 0 , batchSize )
576+ defer func () {
577+ _ = rows .Close ()
578+ }()
579+
580+ placeholders := make ([]string , 0 , batchSize )
581+ for rows .Next () {
582+ var id string
583+ if err := rows .Scan (& id ); err != nil {
584+ log .Errorf ("[Store][database] scan deleted services id, err: %s" , err .Error ())
585+ return store .Error (err )
586+ }
587+ waitDelIds = append (waitDelIds , id )
588+ placeholders = append (placeholders , "?" )
589+ }
590+
591+ if len (waitDelIds ) == 0 {
592+ return nil
593+ }
594+ inSql := strings .Join (placeholders , "," )
595+
596+ cleanMetaStr := fmt .Sprintf ("delete from service_metadata where id in (%s)" , inSql )
597+ if _ , err := tx .Exec (cleanMetaStr , waitDelIds ... ); err != nil {
598+ log .Errorf ("[Store][database] batch clean soft deleted services(%d), err: %s" , batchSize , err .Error ())
599+ return store .Error (err )
600+ }
601+
602+ cleanInsStr := fmt .Sprintf ("delete from service where flag = 1 and id in (%s)" , inSql )
603+ result , err := tx .Exec (cleanInsStr , waitDelIds ... )
604+ if err != nil {
605+ log .Errorf ("[Store][database] batch clean soft deleted services(%d), err: %s" , batchSize , err .Error ())
606+ return store .Error (err )
607+ }
608+
609+ tRows , err := result .RowsAffected ()
610+ if err != nil {
611+ log .Warnf ("[Store][database] batch clean soft deleted services(%d), get RowsAffected err: %s" ,
612+ batchSize , err .Error ())
613+ return store .Error (err )
614+ }
615+
616+ if err = tx .Commit (); err != nil {
617+ log .Errorf ("[Store][database] batch clean soft deleted services(%d) commit tx err: %s" ,
618+ batchSize , err .Error ())
619+ return err
620+ }
621+
622+ rowsAffected = tRows
623+ return nil
624+ })
625+ return uint32 (rowsAffected ), err
565626}
566627
567628// BatchCleanDeletedRules batch clean soft deleted clients
568629func (m * adminStore ) BatchCleanDeletedRules (rule string , timeout time.Duration , batchSize uint32 ) (uint32 , error ) {
569- return 0 , nil
630+ log .Infof ("[Store][database] batch clean soft deleted %s(%d)" , rule , batchSize )
631+ var rows int64
632+ err := m .master .processWithTransaction ("batchCleanDeleted" + rule , func (tx * BaseTx ) error {
633+ mainStr := "delete from " + rule + " where flag = 1 limit ?"
634+ result , err := tx .Exec (mainStr , int32 (timeout .Seconds ()), batchSize )
635+ if err != nil {
636+ log .Errorf ("[Store][database] batch clean soft deleted %s(%d), err: %s" , rule , batchSize , err .Error ())
637+ return store .Error (err )
638+ }
639+
640+ tRows , err := result .RowsAffected ()
641+ if err != nil {
642+ log .Warnf ("[Store][database] batch clean soft deleted %s(%d), get RowsAffected err: %s" ,
643+ rule , batchSize , err .Error ())
644+ return store .Error (err )
645+ }
646+
647+ if err := tx .Commit (); err != nil {
648+ log .Errorf ("[Store][database] batch clean soft deleted %s(%d) commit tx err: %s" ,
649+ rule , batchSize , err .Error ())
650+ return err
651+ }
652+
653+ rows = tRows
654+ return nil
655+ })
656+ return uint32 (rows ), err
570657}
571658
572659// BatchCleanDeletedConfigFiles batch clean soft deleted clients
573660func (m * adminStore ) BatchCleanDeletedConfigFiles (timeout time.Duration , batchSize uint32 ) (uint32 , error ) {
574- return 0 , nil
661+ log .Infof ("[Store][database] batch clean soft deleted config_files(%d)" , batchSize )
662+ var rows int64
663+ err := m .master .processWithTransaction ("batchCleanDeletedConfigFiles" , func (tx * BaseTx ) error {
664+ mainStr := "delete from config_file where flag = 1 limit ?"
665+ result , err := tx .Exec (mainStr , int32 (timeout .Seconds ()), batchSize )
666+ if err != nil {
667+ log .Errorf ("[Store][database] batch clean soft deleted config_files(%d), err: %s" , batchSize , err .Error ())
668+ return store .Error (err )
669+ }
670+
671+ tRows , err := result .RowsAffected ()
672+ if err != nil {
673+ log .Warnf ("[Store][database] batch clean soft deleted config_files(%d), get RowsAffected err: %s" ,
674+ batchSize , err .Error ())
675+ return store .Error (err )
676+ }
677+
678+ if err := tx .Commit (); err != nil {
679+ log .Errorf ("[Store][database] batch clean soft deleted config_files(%d) commit tx err: %s" ,
680+ batchSize , err .Error ())
681+ return err
682+ }
683+
684+ rows = tRows
685+ return nil
686+ })
687+ return uint32 (rows ), err
688+ }
689+
690+ // BatchCleanDeletedServiceContracts batch clean soft deleted service_contract
691+ func (m * adminStore ) BatchCleanDeletedServiceContracts (timeout time.Duration , batchSize uint32 ) (uint32 , error ) {
692+ log .Infof ("[Store][database] batch clean soft deleted service_contract(%d)" , batchSize )
693+ var rows int64
694+ err := m .master .processWithTransaction ("batchCleanDeletedServiceContracts" , func (tx * BaseTx ) error {
695+ mainStr := "delete from service_contract sc join service_contract_detail sd ON sc.id = sd.contract_id where sc.flag = 1 limit ?"
696+ result , err := tx .Exec (mainStr , int32 (timeout .Seconds ()), batchSize )
697+ if err != nil {
698+ log .Errorf ("[Store][database] batch clean soft deleted service_contract(%d), err: %s" , batchSize , err .Error ())
699+ return store .Error (err )
700+ }
701+
702+ tRows , err := result .RowsAffected ()
703+ if err != nil {
704+ log .Warnf ("[Store][database] batch clean soft deleted service_contract(%d), get RowsAffected err: %s" ,
705+ batchSize , err .Error ())
706+ return store .Error (err )
707+ }
708+
709+ if err := tx .Commit (); err != nil {
710+ log .Errorf ("[Store][database] batch clean soft deleted service_contract(%d) commit tx err: %s" ,
711+ batchSize , err .Error ())
712+ return err
713+ }
714+
715+ rows = tRows
716+ return nil
717+ })
718+ return uint32 (rows ), err
575719}
0 commit comments