|
@@ -1,6 +1,7 @@
|
|
package controller
|
|
package controller
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
+ "fmt"
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
"github.com/aws/aws-sdk-go/service/s3"
|
|
"github.com/aws/aws-sdk-go/service/s3"
|
|
"github.com/ente-io/museum/pkg/controller/lock"
|
|
"github.com/ente-io/museum/pkg/controller/lock"
|
|
@@ -30,6 +31,10 @@ type ObjectController struct {
|
|
complianceCronRunning bool
|
|
complianceCronRunning bool
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+const (
|
|
|
|
+ RemoveComplianceHoldsLock = "remove_compliance_holds_lock"
|
|
|
|
+)
|
|
|
|
+
|
|
// RemoveComplianceHolds removes the Wasabi compliance hold from objects in
|
|
// RemoveComplianceHolds removes the Wasabi compliance hold from objects in
|
|
// Wasabi for files which have been deleted.
|
|
// Wasabi for files which have been deleted.
|
|
//
|
|
//
|
|
@@ -41,7 +46,6 @@ func (c *ObjectController) RemoveComplianceHolds() {
|
|
// Wasabi compliance is currently disabled in config, nothing to do.
|
|
// Wasabi compliance is currently disabled in config, nothing to do.
|
|
return
|
|
return
|
|
}
|
|
}
|
|
-
|
|
|
|
if c.complianceCronRunning {
|
|
if c.complianceCronRunning {
|
|
log.Info("Skipping RemoveComplianceHolds cron run as another instance is still running")
|
|
log.Info("Skipping RemoveComplianceHolds cron run as another instance is still running")
|
|
return
|
|
return
|
|
@@ -51,7 +55,16 @@ func (c *ObjectController) RemoveComplianceHolds() {
|
|
c.complianceCronRunning = false
|
|
c.complianceCronRunning = false
|
|
}()
|
|
}()
|
|
|
|
|
|
- items, err := c.QueueRepo.GetItemsReadyForDeletion(repo.RemoveComplianceHoldQueue, 200)
|
|
|
|
|
|
+ lockStatus := c.LockController.TryLock(RemoveComplianceHoldsLock, time.MicrosecondsAfterHours(24))
|
|
|
|
+ if !lockStatus {
|
|
|
|
+ log.Warning(fmt.Sprintf("Failed to acquire lock %s", RemoveComplianceHoldsLock))
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ defer func() {
|
|
|
|
+ c.LockController.ReleaseLock(RemoveComplianceHoldsLock)
|
|
|
|
+ }()
|
|
|
|
+
|
|
|
|
+ items, err := c.QueueRepo.GetItemsReadyForDeletion(repo.RemoveComplianceHoldQueue, 1000)
|
|
if err != nil {
|
|
if err != nil {
|
|
log.WithError(err).Error("Failed to fetch items from queue")
|
|
log.WithError(err).Error("Failed to fetch items from queue")
|
|
return
|
|
return
|
|
@@ -62,7 +75,7 @@ func (c *ObjectController) RemoveComplianceHolds() {
|
|
c.removeComplianceHold(i)
|
|
c.removeComplianceHold(i)
|
|
}
|
|
}
|
|
|
|
|
|
- log.Infof("Revmoed compliance holds on %d deleted files", len(items))
|
|
|
|
|
|
+ log.Infof("Removed compliance holds on %d deleted files", len(items))
|
|
}
|
|
}
|
|
|
|
|
|
func (c *ObjectController) removeComplianceHold(qItem repo.QueueItem) {
|
|
func (c *ObjectController) removeComplianceHold(qItem repo.QueueItem) {
|