@@ -550,6 +550,7 @@ func (s *collectionDb) UpdateLogPositionAndVersionInfo(
550550 "size_bytes_post_compaction" : sizeBytesPostCompaction ,
551551 "last_compaction_time_secs" : lastCompactionTimeSecs ,
552552 "num_versions" : numVersions ,
553+ "compaction_failure_count" : 0 , // Reset on successful compaction
553554 }
554555
555556 if schemaStr != nil {
@@ -592,9 +593,9 @@ func (s *collectionDb) UpdateLogPositionVersionTotalRecordsAndLogicalSize(collec
592593 version := currentCollectionVersion + 1
593594 // only writing if schemaStr is not nil to avoid overwriting the schemaStr
594595 if schemaStr != nil {
595- err = s .db .Model (& dbmodel.Collection {}).Where ("id = ?" , collectionID ).Updates (map [string ]interface {}{"log_position" : logPosition , "version" : version , "total_records_post_compaction" : totalRecordsPostCompaction , "size_bytes_post_compaction" : sizeBytesPostCompaction , "last_compaction_time_secs" : lastCompactionTimeSecs , "tenant" : tenant , "schema_str" : schemaStr }).Error
596+ err = s .db .Model (& dbmodel.Collection {}).Where ("id = ?" , collectionID ).Updates (map [string ]interface {}{"log_position" : logPosition , "version" : version , "total_records_post_compaction" : totalRecordsPostCompaction , "size_bytes_post_compaction" : sizeBytesPostCompaction , "last_compaction_time_secs" : lastCompactionTimeSecs , "tenant" : tenant , "schema_str" : schemaStr , "compaction_failure_count" : 0 }).Error
596597 } else {
597- err = s .db .Model (& dbmodel.Collection {}).Where ("id = ?" , collectionID ).Updates (map [string ]interface {}{"log_position" : logPosition , "version" : version , "total_records_post_compaction" : totalRecordsPostCompaction , "size_bytes_post_compaction" : sizeBytesPostCompaction , "last_compaction_time_secs" : lastCompactionTimeSecs , "tenant" : tenant }).Error
598+ err = s .db .Model (& dbmodel.Collection {}).Where ("id = ?" , collectionID ).Updates (map [string ]interface {}{"log_position" : logPosition , "version" : version , "total_records_post_compaction" : totalRecordsPostCompaction , "size_bytes_post_compaction" : sizeBytesPostCompaction , "last_compaction_time_secs" : lastCompactionTimeSecs , "tenant" : tenant , "compaction_failure_count" : 0 }).Error
598599 }
599600 if err != nil {
600601 return 0 , err
@@ -714,3 +715,16 @@ func (s *collectionDb) BatchGetCollectionSoftDeleteStatus(collectionIDs []string
714715 }
715716 return result , nil
716717}
718+
719+ func (s * collectionDb ) IncrementCompactionFailureCount (collectionID string ) (int32 , error ) {
720+ var collection dbmodel.Collection
721+ err := s .db .Model (& dbmodel.Collection {}).
722+ Where ("id = ?" , collectionID ).
723+ UpdateColumn ("compaction_failure_count" , gorm .Expr ("compaction_failure_count + 1" )).
724+ First (& collection ).Error
725+ if err != nil {
726+ log .Error ("IncrementCompactionFailureCount failed" , zap .Error (err ), zap .String ("collectionID" , collectionID ))
727+ return 0 , err
728+ }
729+ return collection .CompactionFailureCount , nil
730+ }
0 commit comments